Configure an amateur radio gateway with a Raspberry Pi

Configure an amateur radio gateway with a Raspberry Pi

Help share local information by maintaining a piece of the internet-based backbone for packet radio.

open source button on keyboard
Image by :

Subscribe now

Get the highlights in your inbox every week.

The APRS (Automatic Packet Reporting System) is a worldwide digital communications network for amateur radio, providing a single national channel where people can monitor what is happening in the surrounding area.

APRS uses packet radio (AX.25), which Tom Karpiniec described in his excellent article "Packet radio lives on through open source software," as the transport layer.

The basic idea of APRS is to communicate information in the context of the location of an amateur radio operator, such as other stations' position information (whether mobile or fixed), repeater systems, weather information, or events. Amateur radio operators can, in addition, send direct messages to other amateurs via the network. As packets are sent, they include location information that can be displayed on a map. This provides an immediate view of activity in an area.


APRS activity map

Map of APRS activity near Seattle via

Screenshot by Michael Shultz.

Thanks to the internet, APRS is not limited to transmitting traffic only via radio. APRS-IS (Automatic Packet Reporting System-Internet Service) is an internet-based, worldwide network that interconnects various APRS radio networks around the world (and in space via amateur radio satellites and the International Space Station). APRS-IS is maintained and operated by volunteer amateur radio operators to provide a worldwide backbone for amateur radio APRS radio-frequency networks.

A Raspberry Pi-based APRS-IS gateway

Around the world, amateurs operate internet gateway (IGate) systems to route received packets from the packet radio-based network to the internet-based APRS-IS service and back; these gateways can be receive-only or also have transmit capabilities.

This article describes how to configure a Raspberry Pi 2 or 3 and a terminal node controller (TNC) as a receive-only IGate to relay radio traffic to the APRS-IS service, where it can be accessed by amateurs around the world.

There are no licensing requirements for receiving amateur radio traffic, only for transmitting. We can use the base Raspbian operating system, which is available directly from the Raspberry Pi Foundation website as a pre-configured image.

The TNC is a device that basically functions as a modem for the radio and provides the AX.25 protocol functionality. By using a dedicated piece of hardware, in this case the TNC Pi, you don't have to rely on the processing power of the Raspberry Pi to also handle the audio signals and radio control. TNC Pi is a Raspberry Pi HAT (i.e., an add-on board) that interfaces with the Pi either via serial port or I2C bus.



TNC Pi mounted on top of a Raspberry Pi.

Image from Coastal Chipworks, creator of the board.

The TNC Pi can be purchased either fully assembled or as a nice DIY kit where you get to break out the soldering iron. The TNC Pi connects to the radio to enable the Rpi to send and receive packets.

Configuring the hardware

The first step is to configure the TNC and its communication with the Raspberry Pi. Since you will connect the Raspberry Pi to the TNC via serial port, make sure it is available. (Raspberry Pi is configured by default to use the internal serial port as the console port.)

Remove the following line in /boot/cmdline.txt if it exists:

console=ttyAMA0,115200 kgdboc=ttyAMA0, 115200

Add the following line to /boot/config.txt:


If you're using a Raspberry Pi 3, add the following lines to /boot/config.txt:


The following lines need to be added to /lib/systemd/system/hciattach.service to configure the universal asynchronous receiver-transmitter (UART) to communicate the with TNC Pi. (You may have to create the file in case it doesn't exist in the latest version of the distribution).

ExecStart=/usr/bin/hciattach /dev/ttyS0 bcm43xx 921600 noflow -

Once you've made those changes, reboot the Raspberry Pi to ensure it will automatically pick them up during a restart.

Configuring the software

Now that the hardware side is set up, focus your attention on the APRS relay software Aprx that relays received packets to the APRS-IS system.

The packages required are part of the default repositories and can be installed by running the following command: sudo apt-get install aprx -y.

The configuration file for Aprx is located at /etc/aprx.conf. Open the file with your favorite text editor and make the following changes according to your needs. Each section of the file configures different behaviors of the software.

Call sign and location

        mycall  K5TRI-1
        myloc lat 4737.52N lon 12206.05W

The first line above defines your call sign via the mycall keyword and the second defines your location based on latitude and longitude.

Aprx / APRS-IS communication

        login     $mycall
        passcode ****
        heartbeat-timeout   1m  
        filter "m/100"       

The aprsis section configures Aprx to talk to the APRS-IS service. The passcode is a hash generated based on your call sign. The APRS Passcode Generator can auto-generate one. This filter defines a radius of 100 miles around your location. (It can be set smaller, of course.) This means it will only pay attention to traffic within this radius when gating to and from APRS-IS. It wouldn't make much sense to look at traffic from a station in Rome, Italy, if you're located in New York City.


        pidfile /var/run/
        rflog /var/log/aprx/aprx-rf.log
        aprxlog /var/log/aprx/aprx.log
        erlangfile /var/run/aprx.state
        erlang-loglevel LOG_DAEMON
        erlanglog /var/log/erlang.log

The logging section defines where Aprx will write its logs and PID file. The aprx.log file is for program-specific output, while aprx-rf.log writes all the received and transmitted packages.

TNC interface

   serial-device   /dev/ttyAMA0  19200 8n1    KISS
   alias         RELAY,WIDE,TRACE
   callsign $mycall
   tx-ok false #set to false for RX only igate
   telem-to-is true

The interface section defines the TNC parameters like serial port, baud rate, call sign used on this interface (it's possible to have multiple interfaces with different call signs), and whether this interface is allowed to transmit packages.


        beaconmode APRSIS
        cycle-size  60m
        beacon symbol "I&" $myloc comment "RX iGate on Raspberry Pi"

Configure the beacon to inform the APRS network that you exist. At a defined interval, the beacon sends a message to the APRS-IS service with your information. This also places your IGate on the map.

Benefits of an APRS IGate

The APRS service has evolved into a very powerful communications channel for amateur radio with numerous applications and uses. The most prevalent use is for tracking vehicle locations, such as in public service or emergency communications scenarios. Other applications might be transmission and gathering of telemetry such as weather data. No matter how it's used, operating an IGate provides a great service to the local amateur radio community.


About the author

Profile picture of Michael Schulz
Michael Schulz - Michael first got involved with Linux in 1993 when the need for a real multi-tasking capable OS arose to run his BBS (Waffle BBS). Having held various roles over the past 20 years at companies like Compaq, HP, IBM, and Microsoft he had the opportunity to help many enterprises and government organizations understand the value and benefits of open source software and get involved with various OSS communities in different forms. He's been a speaker at events like Linux World, OSCON, Guadec, and...