An APRS iGate receives Automatic Packet Reporting System packets over radio and forwards them to the APRS-IS network. This lets stations heard in your area appear on services such as APRS.fi and helps fill gaps in APRS coverage.
You can build a reliable receive-only iGate with a Raspberry Pi, a VHF radio, a USB sound interface, and Direwolf. This guide walks through the complete setup, from connecting the hardware to running Direwolf automatically at startup.
What This Project Does
The signal path looks like this:
APRS station → 144.390 MHz radio → USB sound interface → Direwolf → APRS-IS
Direwolf acts as a software TNC. It decodes the 1200-baud AFSK packets received by the radio and sends valid packets to an APRS-IS server through your internet connection.
This guide builds a receive-only iGate. It does not transmit internet traffic back onto RF. That keeps the installation simpler and avoids the additional controls required for a two-way iGate or digipeater.
What You Need
- Raspberry Pi 3, 4, 5, or Zero 2 W
- Raspberry Pi OS or another Debian-based Linux distribution
- MicroSD card or USB storage
- Stable power supply
- 2-meter FM radio with an audio output
- VHF antenna suitable for 144.390 MHz
- USB sound card or radio interface
- Audio cable between the radio and sound interface
- Internet connection
- Amateur radio license and callsign
An inexpensive USB sound card can work well for a receive-only station. Interfaces based on the CM108 or CM119 chipsets are also common. Devices such as an AIOC can provide both audio and push-to-talk control if you later add RF transmitting.
In North America, APRS normally uses 144.390 MHz FM. Other regions use different frequencies, so confirm the APRS channel used in your country.
Step 1: Prepare the Raspberry Pi
Install Raspberry Pi OS Lite if the Pi will operate without a monitor. During installation, configure:
- A hostname, such as
pi-aprs - Your normal user account
- Wi-Fi or Ethernet
- SSH access, if you will manage the Pi remotely
- The correct timezone
After the Pi starts, update it:
sudo apt update
sudo apt full-upgrade -y
sudo reboot
Log back in after the reboot.
Step 2: Install Direwolf and Audio Utilities
Install Direwolf and the ALSA audio tools:
sudo apt install -y direwolf alsa-utils
Confirm that Direwolf is available:
direwolf --version
Step 3: Connect and Identify the Sound Interface
Connect the USB sound interface, then list the recording devices:
arecord -l
You may see output similar to this:
card 2: AllInOneCable [AllInOneCable], device 0: USB Audio [USB Audio]
ALSA can address that input as either a card number or a card name. A persistent name is usually safer because card numbers can change after a reboot.
For the example above, the Direwolf audio device would be:
plughw:CARD=AllInOneCable,DEV=0
Your device name may differ. Use the exact name shown on your Pi.
Step 4: Test the Audio Input
Tune the radio to 144.390 MHz FM and disable tone squelch. Start with ordinary carrier squelch set just above the noise floor. Turn off features that change the received audio, such as noise reduction or voice filtering, if the radio provides them.
Open the ALSA mixer:
alsamixer
Press F6, select the USB sound interface, and adjust the capture level. A setting around 30 to 50 percent provides a reasonable starting point, but the correct value depends on the radio and interface.
You can make a short test recording:
arecord -D plughw:CARD=AllInOneCable,DEV=0 -f S16_LE -r 48000 -c 1 -d 10 test.wav
aplay test.wav
Replace AllInOneCable with your device name. You should hear received radio audio without severe distortion or clipping.
Step 5: Obtain Your APRS-IS Passcode
APRS-IS requires a numeric passcode tied to your amateur radio callsign. This is not a password for a personal account. Use a trusted APRS passcode generator or the passcode function included with supported APRS software.
Use your base callsign to generate the passcode. You can then use an SSID on the iGate login, such as NI3N-2, if that SSID is appropriate for your station.
Do not copy another station’s passcode. Never publish your passcode in screenshots, configuration examples, or public repositories.
Step 6: Create the Direwolf Configuration
Create a configuration directory in your home folder:
mkdir -p ~/.config/direwolf
nano ~/.config/direwolf/direwolf.conf
Add the following basic configuration and replace the example values:
# USB audio input
ADEVICE plughw:CARD=AllInOneCable,DEV=0
ACHANNELS 1
ARATE 48000
# Radio channel
CHANNEL 0
MYCALL NI3N-2
MODEM 1200
# APRS-IS connection
IGSERVER noam.aprs2.net
IGLOGIN NI3N-2 12345
# Station position sent directly to APRS-IS
IGBEACON delay=1 every=30 overlay=R symbol="I&" lat=39^52.33N long=079^44.34W comment="Receive-only Raspberry Pi Direwolf iGate"
Change the following fields:
ADEVICE: Your ALSA capture deviceMYCALL: Your callsign and chosen SSIDIGLOGIN: The same callsign followed by your APRS-IS passcodelatandlong: Your station coordinates in degrees and decimal minutescomment: A short, useful station description
The example coordinates are only placeholders. Enter your actual station location. Avoid publishing more precision than you are comfortable sharing.
The overlay and symbol combination R& identifies a receive-only iGate. In the Direwolf beacon syntax, the overlay and base symbol are entered separately as shown above.
Save the file in Nano with Ctrl+O, press Enter, then exit with Ctrl+X.
A Note About Beacon Types
IGBEACON sends the iGate’s position through APRS-IS. It does not key the radio.
PBEACON creates an RF beacon and requires a properly configured PTT connection, a transmitting radio, and compliance with your license and local rules. Do not add PBEACON, PTT, DIGIPEAT, or IGTXVIA directives to a receive-only iGate unless you intentionally design and test those functions.
Step 7: Start Direwolf Manually
Run Direwolf in the foreground so you can watch the startup messages and decoded packets:
direwolf -t 0 -c ~/.config/direwolf/direwolf.conf
On startup, confirm that Direwolf:
- Opens the correct audio device
- Connects to an APRS-IS server
- Accepts your login
- Reports no configuration errors
When the radio receives an APRS packet, Direwolf should display the decoded callsign, path, and packet contents. A message showing that a packet was sent to APRS-IS confirms the gating path is working.
Press Ctrl+C to stop Direwolf after testing.
Step 8: Adjust the Receive Audio
Audio level has a major effect on decoding. Direwolf displays an audio level for received packets. A practical target is roughly 40 to 60, although clean decoding matters more than one exact number.
If levels are consistently too low:
- Increase the radio’s audio output slightly
- Raise the ALSA capture level
- Check the audio cable and connectors
If levels are very high or packets rarely decode:
- Reduce the radio volume
- Lower the capture level
- Make sure the input is not clipping
Change one control at a time. Listen for several minutes after each adjustment because local packet activity can vary.
Persist the ALSA mixer setting after you find a good level:
sudo alsactl store
Step 9: Run Direwolf Automatically with systemd
Find the full path to Direwolf:
command -v direwolf
It will normally return /usr/bin/direwolf.
Create a service file:
sudo nano /etc/systemd/system/direwolf.service
Paste this configuration, replacing ni3n with your Linux username:
[Unit]
Description=Direwolf APRS iGate
Wants=network-online.target
After=network-online.target sound.target
[Service]
Type=simple
User=ni3n
Group=ni3n
ExecStart=/usr/bin/direwolf -t 0 -c /home/ni3n/.config/direwolf/direwolf.conf
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Enable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable --now direwolf
Check its status:
systemctl status direwolf --no-pager
Follow the live log:
journalctl -u direwolf -f
Step 10: Verify the iGate Online
Allow several minutes for the beacon and gated packets to reach APRS-IS. Search for your iGate callsign on APRS.fi.
Check for:
- Your iGate position and comment
- A recent last-heard time
- Stations shown as heard through your iGate
- Consistent packet activity in the Direwolf journal
Receiving a packet in Direwolf does not always mean it will appear as a new station on a map. APRS-IS may already have received the same packet through another path, and duplicate suppression is normal.
Common Problems and Fixes
Direwolf Cannot Open the Audio Device
Run:
arecord -l
Confirm that the ADEVICE entry matches the detected card. Also check whether another program already has the device open.
Direwolf Receives Audio but Decodes Nothing
- Confirm the radio is on the correct APRS frequency
- Use normal FM, not narrow FM, unless your regional network specifies otherwise
- Disable tone squelch
- Adjust the audio level gradually
- Try a better antenna or location
- Check that the radio audio reaches the correct sound-card input
APRS-IS Rejects the Login
- Confirm the callsign in
IGLOGIN - Regenerate the passcode from the base callsign
- Remove accidental spaces or punctuation
- Make sure the Pi has working internet access and correct system time
The Service Works Manually but Not at Boot
- Verify the username and home-directory path in the service file
- Check the service log with
journalctl -u direwolf -b - Use a persistent ALSA card name instead of a changing card number
- Confirm the service user can access the sound device
If the service user lacks audio access, add it to the audio group and reboot:
sudo usermod -aG audio ni3n
sudo reboot
Replace ni3n with your Linux username.
Packets Decode Only Occasionally
Poor decoding often comes from weak signals, multipath, excessive audio, or a radio with heavily processed receive audio. Improve the antenna first, then adjust the audio. A clear antenna location usually provides more benefit than chasing a perfect mixer number.
Reliability and Security Tips
- Use Ethernet when practical
- Use a quality power supply
- Give the Pi a DHCP reservation
- Keep Raspberry Pi OS and Direwolf updated
- Use SSH keys and disable password login after testing
- Allow SSH through the firewall only from your LAN or management network
- Back up
direwolf.confafter the station works - Monitor disk space and the system journal
- Do not expose Direwolf’s AGW or KISS network ports to the internet
You can apply routine updates with:
sudo apt update
sudo apt upgrade
Restart the iGate after changing its configuration:
sudo systemctl restart direwolf
Optional Improvements
Once the receive-only iGate operates reliably, you can add:
- A small display showing decoded packets and system status
- A GPS receiver for a portable installation
- Local monitoring with Xastir, YAAC, or another APRS client
- A dedicated radio interface with isolation
- Power monitoring and automatic shutdown for battery operation
- A watchdog or external uptime monitor
Treat RF transmitting, digipeating, and two-way gating as separate upgrades. Each requires careful configuration, suitable PTT hardware, and an understanding of the effect it will have on the local APRS channel.
Final Thoughts
A Raspberry Pi and Direwolf make an effective APRS iGate without requiring a hardware TNC. The most important parts are a clean receive signal, correct audio level, reliable APRS-IS login, and a service that restarts automatically.
Start with a receive-only configuration. Let it run for several days, review the stations it hears, and fine-tune the antenna and audio. Once it operates consistently, you will have a useful addition to the local APRS network and a strong platform for future packet-radio projects.