APRS (Automatic Packet Reporting System) is one of those ham radio technologies that feels more relevant in 2024 than it did in 1992 when Bob Bruninga, WB4APR, first conceived it. Real-time position tracking, weather station data, messaging, telemetry—all running on a network that doesn't depend on cellular infrastructure or the internet to function over RF.
Street prices in this article were checked in July 2026 and move around; verify with a dealer such as HRO, DX Engineering, or GigaParts before you buy.
An iGate (Internet Gateway) bridges the RF APRS network to the APRS-IS internet backbone. Stations transmitting APRS packets on 144.390 MHz (the North American APRS frequency) get heard by your iGate and forwarded to servers like aprs.fi, where anyone can see them on a map. You're providing infrastructure for the network.
Building one is cheaper and easier than you'd think. A Raspberry Pi, an inexpensive radio, and some free software. Let's walk through it.
What You'll Need
Hardware
- Raspberry Pi 3B+ or 4 (either works; a Pi 4 with 2GB RAM is overkill for this but gives you headroom). A Pi Zero 2 W also works but the single-core performance makes initial setup slower. Cost: $35-$55.
- MicroSD card: 16GB or larger, Class 10 or better. The system doesn't use much storage but write speed matters for OS responsiveness. $8-$12.
- Power supply: Official Raspberry Pi USB-C supply (5.1V/3A for Pi 4) or a quality 5V/2.5A supply for Pi 3B+. Don't cheap out here—brownouts cause SD card corruption.
- Radio: You have two paths here:
- RTL-SDR dongle (receive-only iGate): An RTL-SDR Blog V3 or V4 ($30-$40) for receive-only operation. You hear packets and gate them to the internet, but don't transmit anything on RF. This is the simplest setup and doesn't require a dedicated transceiver.
- VHF transceiver (full TX/RX iGate): A cheap handheld or mobile radio capable of 144.390 MHz with a data/speaker jack. The Baofeng UV-5R works (barely—more on this later) but a proper mobile like a Kenwood TM-V71A or even a used Alinco DR-135 is better. The radio connects to the Pi via a sound card interface or a dedicated TNC.
- Sound card interface (if using a radio): A USB sound card dongle ($7-$15) works. The Sabrent AU-MMSA is popular in the APRS community. Or use a dedicated interface like the Digirig Mobile ($50) which includes PTT control.
- Antenna: A 2m antenna outdoors, as high as you can get it. A quarter-wave ground plane (19.5 inches of vertical wire with three or four 19.5-inch radials) works well. Commercial options like the Comet GP-3 or Diamond X-50A ($80-$100) give better coverage.
Software
- Raspberry Pi OS Lite (no desktop needed—headless operation saves resources)
- Direwolf: The star of this project. A software TNC (Terminal Node Controller) and AX.25 decoder that turns your Pi + sound input into a full APRS decoder. Free, open source, actively maintained.
- Optional: aprx (for a more minimal iGate daemon), but Direwolf does everything for a basic iGate.
Step-by-Step Build
1. Flash the OS
Download Raspberry Pi OS Lite (64-bit) from raspberrypi.com. Use the Raspberry Pi Imager to flash it to your microSD card. In the Imager's settings (gear icon), enable SSH, set a username/password, and configure your WiFi credentials. This lets you run headless from the start—no monitor or keyboard needed.
Pop the card in, power up the Pi, and SSH in.
2. Update and Install Dependencies
sudo apt update && sudo apt upgrade -y
sudo apt install -y git cmake build-essential libasound2-dev libgps-dev
If you're using an RTL-SDR, also install:
sudo apt install -y rtl-sdr librtlsdr-dev
Plug in your RTL-SDR dongle and verify it's detected:
rtl_test -t
You should see your dongle identified (usually "Realtek RTL2832U" or similar). If you get a "device busy" error, blacklist the default DVB-T driver:
echo 'blacklist dvb_usb_rtl28xxu' | sudo tee /etc/modprobe.d/blacklist-rtl.conf
sudo reboot
3. Install Direwolf
cd ~
git clone https://github.com/wb2osz/direwolf.git
cd direwolf
mkdir build && cd build
cmake ..
make -j4
sudo make install
This takes a few minutes on a Pi 4, longer on a Pi 3. Go make coffee.
After installation, generate a default config:
make install-conf
This creates ~/direwolf.conf.
4. Configure Direwolf
Open the config file:
nano ~/direwolf.conf
Key settings to change:
Your callsign (required—you must have a valid amateur radio license):
MYCALL YOURCALL-10
The -10 SSID is the standard for iGates. Use your actual callsign.
Audio input (for RTL-SDR setup):
ACHANNEL 0
CHANNEL 0
MODEM 1200
If using RTL-SDR as the audio source, you'll pipe rtl_fm output into Direwolf (covered below).
For a USB sound card connected to a radio:
ACHANNEL 0
ADEVICE plughw:1,0
CHANNEL 0
MODEM 1200
(The device number may vary—use arecord -l to find your USB sound card.)
iGate configuration:
IGSERVER noam.aprs2.net
IGLOGIN YOURCALL-10 YOUR_PASSCODE
Your APRS-IS passcode is generated from your callsign using a standard algorithm. Search "APRS passcode generator" online, or use: https://apps.magicbug.co.uk/passcode/. It's a simple hash—not a security mechanism, just a verification that you hold the callsign.
Receive-only iGate (no RF transmit):
IGTXVIA 0 0
This tells Direwolf not to transmit anything from the internet back to RF.
Set your position (for the iGate to appear on aprs.fi):
PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" lat=42^37.14N long=071^20.83W comment="Rx-only iGate"
Replace with your actual coordinates in APRS degree^minute format.
5. Running It
With RTL-SDR (receive-only):
rtl_fm -f 144.39M -s 24000 -g 42 - | direwolf -c ~/direwolf.conf -r 24000 -D 1 -
Breaking this down:
rtl_fmtunes to 144.390 MHz with 24 kHz sample rate-g 42sets gain (adjust between 20-50 depending on your local noise floor; too high = overload)- Output pipes directly into Direwolf
-r 24000tells Direwolf the sample rate-D 1selects channel 0 only
With a radio and sound card:
direwolf -c ~/direwolf.conf
That's it. Direwolf reads audio from the configured sound device.
I had a Pi 3B+ running as a receive-only iGate in my attic for two years straight. The only maintenance was replacing the SD card once (which, honestly, I should have used a more durable card from the start—lesson learned). On a typical day it gated 200-400 unique packets from local APRS stations, weather stations, and passing vehicles.
6. Make It Persistent (Run at Boot)
Create a systemd service:
sudo nano /etc/systemd/system/direwolf.service
[Unit]
Description=Direwolf APRS iGate
After=network-online.target sound.target
Wants=network-online.target
[Service]
Type=simple
User=pi
ExecStart=/bin/bash -c 'rtl_fm -f 144.39M -s 24000 -g 42 - | direwolf -c /home/pi/direwolf.conf -r 24000 -D 1 -'
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
(Adjust the ExecStart line if you're using a sound card instead of RTL-SDR.)
sudo systemctl enable direwolf.service
sudo systemctl start direwolf.service
sudo systemctl status direwolf.service
Green and running? You're done.
Verifying It Works
Go to aprs.fi and search for your callsign-10. Within an hour (after your position beacon fires), you should see your iGate appear on the map. As local APRS stations transmit, you'll see them appear with your iGate listed as the path.
You can also monitor locally:
journalctl -u direwolf.service -f
You'll see decoded packets scrolling by in real time. Satisfying.
RTL-SDR vs. Dedicated Radio: My Take
Here's where I'll get opinionated. For a receive-only iGate, the RTL-SDR is genuinely the better choice for most people. It's cheaper, simpler, and the receive sensitivity is adequate for APRS (you're decoding 1200-baud AX.25 packets, not pulling weak signals out of the noise). The RTL-SDR Blog V4 has better filtering than the V3, which helps in urban environments with strong nearby signals.
A dedicated radio makes sense when:
- You want a TX-capable iGate (to relay messages from APRS-IS back to RF)
- You're in a very weak signal environment and need better sensitivity
- You already have a spare 2m radio sitting unused
The Baofeng UV-5R can work as an iGate radio, but its receiver is easily overloaded by nearby paging transmitters or strong commercial signals, and the audio output from the speaker jack is noisy. If that's all you have, try it—but don't be surprised if decode rates are poor in urban areas. A radio with proper IF filtering (even a used Kenwood TH-F6A or Yaesu FT-60R) performs significantly better.
Optimizing Decode Performance
Antenna matters more than anything. A good outdoor 2m antenna at 20+ feet will hear stations that a rubber duck on a windowsill will miss entirely. This is the single biggest variable in iGate performance.
RTL-SDR gain setting: Start at 42 and adjust. Too high and you get intermod from strong local signals, reducing decode rate. Too low and you miss distant stations. Check your log and adjust if you're seeing very few decodes.
Direwolf FIX_BITS setting: Direwolf can attempt error correction on received packets. Add FIX_BITS 1 to your config for moderate error correction. Setting it higher (2 or 3) can decode more marginal packets but also increases false decodes.
CPU temperature: If your Pi is in an enclosed space (like an attic in summer), it may throttle. A small heatsink or fan helps. Monitor with vcgencmd measure_temp.
Legal Notes
You need an amateur radio license (Technician class or higher in the US) to operate an APRS iGate, even a receive-only one, because you're identifying your station with your callsign on the APRS-IS network. The APRS-IS passcode system is tied to licensed callsigns.
A receive-only iGate that doesn't transmit on RF is a gray area in some interpretations—you're technically not transmitting—but the APRS-IS network requires a valid callsign for login. Get licensed. It's a weekend of study and a $15 exam fee.
Total Cost Breakdown
Component Receive-Only TX-Capable Raspberry Pi 4 (2GB) $45 $45 MicroSD card $10 $10 Power supply $12 $12 RTL-SDR Blog V4 $35 — USB Sound card + radio cable — $15 Used VHF radio (Kenwood, etc.) — $50-$100 Digirig Mobile — $50 2m Antenna (DIY ground plane) $10 $10 Total ~$112 ~$182-$232For about $100-$120, you get a working receive-only iGate that contributes to the APRS network 24/7. Not bad for a weekend project that keeps giving back to the ham radio community.
Plug it in, put it in the attic next to your antenna, and forget about it. Except for checking aprs.fi occasionally to see how many stations you're hearing. That part never gets old.
Reader field notes — share yours
Log in to share your field notes and photos.