Connecting the VGC N76 to your Raspberry Pi via Bluetooth KISS TNC


Today, we’re supercharging our APRS and Packet Radio setup. We’re connecting the VGC N76 handheld directly to a Raspberry Pi 5. No cables, no external TNC clutter. Just pure efficiency.


Before you dive into this blog post, I recommend reading the following blog post first: https://dl1gkk.com/raspberry-pi-ham-radio-best-practice-2026


The Problem: Your Pi thinks your Radio is a Headphone

By default, the Pi 5 sees the N76 and thinks: “Great, a headset! Let’s play some music.” This blocks the serial data channel we need for APRS. We’re going to kill that audio profile first so the data can flow.


Step 1: The “Headset Killer”

We need to tell the Pi to ignore audio and focus on data.

  1. Open your terminal and edit the Bluetooth configuration:
    sudo nano /etc/bluetooth/input.conf
  2. Add these lines to the file:
    [General]
    Disable=Headset
  3. Save (Ctrl+O, Enter) and Exit (Ctrl+X).
  4. Restart the Bluetooth service to apply the “no-nonsense” rule:
    sudo systemctl restart bluetooth

Step 2: The Digital Handshake (Pairing)

Now we introduce the Pi to the N76. This is a one-time setup. Once they know each other, the connection is rock solid.

  1. Put your N76 into pairing mode (ensure Bluetooth is ON and visible).
  2. On your Pi, enter the Bluetooth console:
    bluetoothctl
  3. Run these commands:
    agent on
    default-agent
    scan on
  4. Pay attention now: Look for a device named VR-N76. It will have an address like 38:D2:00:01:03:49. Copy your specific address!
  5. Pair and trust it:
    pair YOUR_DEVICE_ADDRESS
    trust YOUR_DEVICE_ADDRESS
    exit

Step 3: Set it and Forget it (Automation)

As craftsmen, we don’t want to type commands every time we start the engine. We want the “virtual cable” to be ready when we are. We’ll create a service that handles the RFCOMM binding automatically.

  1. Create the service file:
    sudo nano /etc/systemd/system/bt-tnc.service
  2. Paste this configuration (replace the address with your N76 address):
    [Unit]
    Description=Bluetooth KISS TNC Binding for VR-N76
    After=bluetooth.target
    
    [Service]
    Type=oneshot
    ExecStartPre=/usr/bin/rfcomm release 0
    ExecStart=/usr/bin/rfcomm bind rfcomm0 YOUR_DEVICE_ADDRESS 1
    RemainAfterExit=yes
    
    [Install]
    WantedBy=multi-user.target
  3. Enable the “Turbo”:
    sudo systemctl daemon-reload
    sudo systemctl enable bt-tnc.service
    sudo systemctl start bt-tnc.service

The Result: Plug & Play

Your Raspberry Pi now has a permanent virtual port at /dev/rfcomm0. It’s like having an invisible cable plugged directly into your N76. The best part? The connection only activates when your software (like YAAC or a terminal like PoPT) actually needs it.


Installing Packet Radio Terminal Program PoPT

A modern, multi-platform packet terminal program for AX.25 Packet Radio. It supports versatile connections such as KISS over TCP/Serial, AXIP over UDP and Linux AX.25 Devices.

This guide uses a Virtual Environment (venv) to ensure your system stays clean and your other radio tools (VARA, Hamlib, etc.) remain untouched.

1. Install System Dependencies

Run this command to install the necessary system libraries, including the critical libopenblas-dev for math operations.

sudo apt update
sudo apt install python3-tk python3-pil python3-pil.imagetk python3-matplotlib \
python3-crcmod python3-pip python3-gst-1.0 gir1.2-gst-plugins-base-1.0 \
libgirepository1.0-dev libopenblas-dev -y

2. Clone Repository & Setup Virtual Environment

We isolate the installation to keep your “digital workshop” organized.

cd ~
git clone https://github.com/DerHirschi/AX25_POPT.git
cd AX25_POPT

# Create the environment
python3 -m venv venv

# Activate the environment
source venv/bin/activate

3. Install Python Modules

Install the required tools inside your active virtual environment.

pip install -r requirements.txt
pip install playsound3 aprslib tkintermapview requests Pillow networkx

4. Start PoPT

python3 PoPT.py

5. N76 Configuration (KISS via Bluetooth)

  • Open Settings > Port Settings > Add Port.
  • Port Type: Select KISS (Serial).
  • Port Designation: Set a short label (e.g., 1).
  • Port Name/Device: Enter /dev/rfcomm0.
  • Baudrate: Set to 19200.
  • Activate: Check the box for your Callsign (DL1GKK).
  • Finish: Click Save and OK.

To make PoPT truly “plug and play,” we don’t want to type commands every time. Let’s create a professional menu entry in your Raspberry Pi menu.

6. Create the Launch Script

This script handles the folder navigation and activates the virtual environment automatically in the background.

nano ~/start_popt.sh

Paste the following content into the file:

#!/bin/bash
cd /home/pi/AX25_POPT
/home/pi/AX25_POPT/venv/bin/python3 /home/pi/AX25_POPT/PoPT.py

Save (Ctrl+O, Enter) and Exit (Ctrl+X), then make it executable:

chmod +x ~/start_popt.sh

7. Create the Desktop Menu Entry

Now we tell the Raspberry Pi to show PoPT in the application menu under “Internet” or “HamRadio.”

nano ~/.local/share/applications/popt.desktop

Paste this configuration:

[Desktop Entry]
Name=PoPT Terminal
Comment=Modern Packet Radio Terminal
Exec=/home/pi/start_popt.sh
Icon=/home/pi/AX25_POPT/popt.png
Terminal=false
Type=Application
Categories=Network;HamRadio;

8. Done!

You can now find PoPT Terminal in your main menu.

Disclaimer: This setup was developed in collaboration with Gemini AI. While we’ve worked hard to make this guide as “bulletproof” as possible, tech is always evolving—errors may occur, or specific functions might need a bit of extra tweaking.

The solution? Don’t hesitate to ask Gemini yourself if you get stuck. Good luck with your build!


N76-Bluetooth-Link