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.
- Open your terminal and edit the Bluetooth configuration:
sudo nano /etc/bluetooth/input.conf - Add these lines to the file:
[General] Disable=Headset - Save (
Ctrl+O,Enter) and Exit (Ctrl+X). - 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.
- Put your N76 into pairing mode (ensure Bluetooth is ON and visible).
- On your Pi, enter the Bluetooth console:
bluetoothctl - Run these commands:
agent on default-agent scan on - Pay attention now: Look for a device named
VR-N76. It will have an address like38:D2:00:01:03:49. Copy your specific address! - 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.
- Create the service file:
sudo nano /etc/systemd/system/bt-tnc.service - 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 - 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!
