Skip to main content

Meshtastic APRS Gateway

What is APRS?

APRS - Automatic Packet Reporting System - is an amateur radio protocol designed for real-time tactical digital communications. Originally developed by Bob Bruninga (WB4APR), it carries position data, weather reports, text messages, and telemetry over RF. Reports are aggregated on publicly accessible maps such as aprs.fi, making it a cornerstone of ham radio situational awareness worldwide.

Why Integrate Meshtastic with APRS?

Meshtastic nodes equipped with GPS can be bridged into APRS-IS (the internet backbone of APRS), causing them to appear on aprs.fi maps. This provides several advantages:

  • Mesh position data becomes visible to the broader amateur radio community without requiring a dedicated APRS radio.
  • Enables interoperability with Winlink gateway operators who already monitor APRS.
  • During emergency activations, mesh nodes show up alongside APRS-equipped vehicles and portable stations on the same common operating picture.

License Requirement

Operating an APRS-IS gateway requires a valid amateur radio license - Technician class or higher in the United States. Your callsign is used as the APRS-IS station identifier. Transmitting on APRS RF frequencies without a license is illegal; software-only APRS-IS connections are generally treated the same way by convention. Check your national regulations.

meshtastic-aprs-gateway

The open-source meshtastic-aprs-gateway project (GitHub: nwdigitalradio/meshtastic-aprs) bridges Meshtastic MQTT output to APRS-IS. It runs on any Linux system with internet access - a Raspberry Pi is the most common deployment platform.

Core requirements:

  • Python 3.8+
  • An MQTT broker already receiving packets from your Meshtastic node(s)
  • An APRS-IS account (callsign + APRS-IS passcode - generated from your callsign)

Setup Overview

  1. Install Python dependencies: pip install meshtastic paho-mqtt aprslib
  2. Clone the gateway repository and copy the example config file.
  3. Edit the config: enter your callsign, APRS-IS passcode, APRS-IS server (e.g. rotate.aprs2.net:14580), and MQTT broker address.
  4. Test manually: python meshtastic_aprs.py --config config.yaml
  5. Install as a systemd service for automatic start on boot:
    /etc/systemd/system/meshtastic-aprs.service
    Set Restart=on-failure and RestartSec=10 to recover from transient network drops.

Packet Flow

Meshtastic node
 ↓ (LoRa RF)
 Mesh network
 ↓ (LoRa RF)
 MQTT gateway node (USB-connected Pi)
 ↓ (TCP, localhost)
 Mosquitto MQTT broker
 ↓ (TCP, internet)
 meshtastic-aprs-gateway
 ↓ (TCP, APRS-IS protocol)
 APRS-IS network
 ↓
 aprs.fi (and other APRS clients)

Position Filtering and Consent

The gateway config allows you to whitelist specific node IDs or callsigns for forwarding. Only forward nodes whose operators have consented. Do not expose the positions of private nodes, shelters, or sensitive installations to the public APRS map without explicit permission from the node owner.

Best practice: maintain a config-controlled allowlist and review it whenever new nodes join your mesh.

Bidirectional Messaging

Some implementations support two-way message bridging - APRS messages addressed to your gateway callsign arrive as Meshtastic messages, and mesh messages can be relayed outbound as APRS messages. This is useful during ARES/RACES exercises where some operators have APRS radios and others have Meshtastic nodes.

Implementation complexity is higher than position-only bridging; test thoroughly before deploying in an operational scenario.

Frequency Note

APRS in North America operates on 144.390 MHz (a 2-meter FM frequency). This is entirely separate from LoRa mesh frequencies (915 MHz in North America). The APRS gateway described here is a software bridge over IP - it does not require your Pi to transmit on 144.390 MHz. The RF-to-internet connection is handled by existing APRS-IS infrastructure.

If you want true RF APRS transmission (e.g. for locations without internet), you need a licensed APRS radio and a TNC - that is a separate project beyond this software gateway.