# LoRa_APRS_iGate: putting an ESP32 on the amateur radio packet network

> This firmware turns an ESP32 board with a LoRa module and GPS into an APRS iGate and digipeater, bridging received LoRa packets onto the APRS-IS network and transmitting position beacons. It supports a long list of commercial boards plus several DIY combinations, and ships a web flasher so nobody has to install a toolchain.

**richonguzman/LoRa_APRS_iGate** — LoRa APRS iGATE for ESP32 Based Board with Rx + Tx capabilities

- Repository: https://github.com/richonguzman/LoRa_APRS_iGate
- Stars: 528 · Forks: 161
- Language: C++
- License: GPL-3.0
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/richonguzman-lora-aprs-igate

## What the firmware does

The CA2RXU LoRa APRS iGate and Digipeater firmware is for using ESP32 based boards with LoRa modules and GPS to live in the APRS world, and the repository description puts it as a LoRa APRS iGate for an ESP32 based board with Rx plus Tx capabilities.

The two roles it fills are the ones that define the APRS network's structure. An iGate is a bridge: it receives packets over the local radio link and forwards them onto the internet network, APRS-IS, so that a transmission made within radio range of the gateway is visible to the whole APRS network. A digipeater is the repeater: it retransmits received packets so that they propagate further, and it applies rules about what to repeat and how often, to avoid the endless loops that a naive repeater creates.

Both roles together is what the project means by Rx plus Tx. The device hears a packet, decides under the digipeater rules whether to retransmit it, and separately sends it onward to the APRS-IS server so that operators elsewhere can see the station.

The firmware is written to work with the companion tracker firmware. The readme states that the iGate firmware works with all LoRa Tracker firmwares, and specifically with the LoRa APRS Tracker Firmware.

That pairing is the ecosystem. The tracker is the handheld unit, the iGate is the fixed station, and both speak the same LoRa APRS dialect so a tracker can talk through an iGate and out to the wider network.

The project is C++, licensed GPL-3.0, built with PlatformIO as the platformio.ini in the repository root suggests, and the last push was on 2026-10-18 with the newest release V4.0.4 from 2026-10-14.

## The board list, and why it is so long

The supported boards list is the largest part of the readme and it is a better guide to the project's scale than any description.

The note at the top says all boards with 433, 868 and 915 MHz versions are supported, so the constraint is the radio band rather than the hardware. The list then covers the TTGO LilyGo LoRa32 V2.1 with the note that V1.6 is the same, and the T3S3 V1.2. The TTGO T-Beam appears in versions V1.0, V1.1 and V1.2, with variations carrying SX1262 and SX1268 LoRa modules, plus the Supreme V3 and the T-Beam 1W.

Then Heltec, in a long run: V2, V3, V3.2, V4, T114, Wireless Stick, Wireless Stick Lite V3 and V3.2, HT-CT62, Wireless Tracker and Wireless Paper. RAK Wireless appears as the 4631 with the 19007 or 19003 board, plus the RAK3312 and RAK3112.

Then the less common ones. Faketec V3 built on an NRF52840 with a Heltec HTRA62 carrying the SX1262. QRP Labs LightGateway 1.0 and Plus 1.0. The T-Deck Plus and the regular T-Deck with or without GPS.

And then the DIY entries, which are the most useful part of the list for anyone building their own board. An ESP32 with an SX1278 module, or an Ebyte 400M30S or 900M30S, or the Ebyte E32 400M30S 1W module. The same with an ESP32C3 for a smaller board, and an ESP32C3 SuperMini with an SX1278 carrying the RA-01 or RA-02 module. An ESP32 with a 4G or LTE A7670 modem and an SX1278, for a version that has cellular backhaul. And a Wemos Lolin32 with an OLED and an SX1278.

The list ends with and many more, and the timeline in the readme shows the additions arriving steadily, most recently the T-Beam 1W in October 2026 and a Heltec V2 915 MHz version in February 2026.

The DX factor in the SX1262 and SX1268 modules is the thing to notice, because those are the newer LoRa chips with higher output power than the SX1276 and SX1278 that older boards carry. The 1W module options in the list and the 1W board additions reflect that, and the same chips bring different radio characteristics, which is why the firmware treats them as separate variants rather than assuming compatibility.

## The digipeater rules, and the LoRa air protocol details

The timeline entries show what the firmware actually does under the hood, and the LoRa-specific parts are the interesting ones because APRS and LoRa do not naturally fit together.

CAD, Channel Activity Detection, and DIFS, Distributed Inter-Frame Space, were both added in August 2026. These are LoRa radio concepts. CAD is the mechanism by which a LoRa transmitter checks whether the channel is busy before transmitting, and DIFS is a waiting period that spreads transmissions out. The firmware uses them as a digipeating mechanism, and the September 2026 entry records the consequence: CAD timeout, packet dropped after 10s of busy channel.

That is a real design tension. A digipeater wants to retransmit promptly so the packet gets through, but retransmitting into a busy channel loses the packet entirely because LoRa transmitters cannot hear while they transmit. So the firmware waits for the channel to clear, and drops the packet if it does not clear in time. Dropping is preferable to corrupting, but it does mean a busy local channel costs you digipeats.

The other LoRa-specific item is cross frequency digipeater rules, added in October 2024. Because the LoRa APRS scheme can use different frequencies for receiving and transmitting, a digipeater can listen on one frequency and repeat on another, and the rules for when to do that are separate from the ordinary frequency-hopping rules.

Beyond that there is a large body of APRS-specific behaviour accumulated over two years. WIDE2-n was added to WIDE1-n in the digipeater modes, and the difference is the number of times a packet may be repeated. A callsign blacklist was added in January 2025, and a manager list in March 2025 to enable and disable the digipeater eco mode and the transmit control separately. Objects rules were updated, and there is a personal note field for the station shown in the web interface.

There is also a validation layer, which for a network that accepts traffic from strangers over the air is not optional. Callsign validation was fixed in June 2024, APRS-IS connection and passcode validation were added in December 2024, and there was a fix for missing validation of the correct digipeater mode when not connected to APRS-IS.

## The web interface, and the fixes that shaped it

The web interface is what distinguishes this firmware from a minimal digipeater, and the timeline shows it being built out over two years.

The new web UI arrived in August 2026, along with a live view over a map to see the received stations. The readme shows the two halves of the interface as a new menu and a map, and the map view is the more unusual part, because it turns the iGate into something you can watch rather than something you configure and forget.

Web authentication was added in August 2024, and that is a significant detail rather than a cosmetic one. An iGate has a web interface that can change the frequency, the callsign and the beacon, so leaving it unauthenticated on a network means anybody who finds it can reconfigure your station. The readme credits a contributor for that work.

The October 2024 EcoMode entry describes the power saving in detail: it is for remote digipeaters without WiFi, WiFiAP, a screen or LEDs, and on the LILYGO LoRa32 it draws only 24mA, or 150mA with the WiFi access point enabled. The current consumption of almost 10% at idle came later, in June 2025, when the digipeaters got an updated EcoMode where the board sleeps until a packet is received. And an October 2025 entry allows APRS messages and queries to start and stop that mode, so the station can be woken up on demand rather than only by incoming traffic.

There are also power and thermal features. The September 2025 entry mentions EcoMode for the digipeaters, and the October 2026 T-Beam 1W board was added with fan control and transmit over-temperature protection, which is what you would expect for a board that can push a watt of RF.

MQTT was added in September 2025 with both publish and subscribe, and there is a user defined NTP server and beacon over MQTT from October 2025. The mDNS kiss-tnc entry from October 2026 is for phone apps, which is a small feature that makes the device usable from a handset on the same network.

The security entry from October 2026 is worth singling out: a fix for stored XSS in received packets, alongside a warning when the WiFi password is bad. That is the fix you would hope a device with a web interface needs, and it arriving in the same release as a 1W board addition says the maintainer is treating the web side as a real attack surface.

## How you install it, and the repository layout

The installation route is the most interesting engineering decision in the project, because it is aimed at people who do not compile firmware.

The readme links a web flasher and installer, hosted as a GitHub Pages site at lora-igate-web-flasher. There is also a firmware manual, a PDF on Google Drive, and the wiki has been converted into a PDF manual as well.

A web flasher means the browser talks to the device over USB and programs it, so a new user needs a board and a USB cable and nothing else. For a project whose audience is amateur radio operators, many of whom would not know what PlatformIO is, that is the difference between the firmware being usable and the firmware being a GitHub repository nobody opens.

The manual being a PDF rather than only wiki pages is the same instinct applied to documentation. Radio operators print things.

The repository layout reflects a PlatformIO project with per-board variants. There is platformio.ini at the root, plus common_settings.ini, which is where shared build settings live. There is a variants/ directory for the per-board configurations, which is how a single codebase targets a dozen radios without forking. There is include/ and lib/ for the headers and the libraries, including the APRSPacketLib the timeline mentions in updates, src/ for the sources, and data/ and data_embed/ for the embedded file content, which for a firmware with a web interface is the static assets. There is a tools/ directory for host-side utilities, images/ for the documentation screenshots, and a .vscode/ directory for editor settings.

The licence changed during the project's life. The June 2025 entry records the licence changed into GNU GPLv3, and the DateVersion format changed in the same release, which is a housekeeping entry that tells you the maintainer reset the versioning scheme and the licensing terms at the same time.

The project is funded through GitHub Sponsors and PayPal, and the readme makes the pitch in one line: you can support this project to continue to grow.

## Conclusion

Adopt this firmware if you want to put a cheap ESP32 radio on the amateur APRS packet network, because it handles the LoRa to APRS-IS bridging, the digipeating rules and the position beacon in one program that runs on hardware you probably already own. Do not adopt it if you want a commercial-grade gateway with support obligations, since it is a hobby firmware maintained by one person. Before you commit, pick your board from the supported list and confirm the frequency band, because the firmware is built per board variant and per frequency, and use the web flasher rather than a local build if you just want it running.

## FAQ

### What is the LoRa APRS iGate firmware?

It is firmware for ESP32 based boards with LoRa modules and GPS that live in the APRS world. It works as both an iGate, bridging received LoRa packets to the APRS-IS internet network, and a digipeater, retransmitting packets under digipeating rules. It is written in C++, licensed GPL-3.0 and built with PlatformIO.

### Which boards does the LoRa APRS iGate firmware support?

A long list including the TTGO LoRa32 and T3S3, the T-Beam in several revisions with SX1262 and SX1268 modules, the Supreme V3 and T-Beam 1W, the T-Deck Plus, many Heltec boards from V2 to V4 and the T114 and Wireless Stick and Wireless Paper families, RAK Wireless boards, the Faketec V3 and the QRP Labs LightGateway. Several DIY combinations are listed too, and all boards with 433, 868 and 915 MHz versions are covered.

### What are CAD and DIFS in the LoRa APRS digipeater?

They are LoRa radio concepts the firmware uses for digipeating. CAD is Channel Activity Detection, checking whether the channel is busy before transmitting, and DIFS is Distributed Inter-Frame Space, a waiting period that spreads transmissions. The timeline records the addition of both in August 2026 and, in September 2026, a CAD timeout that drops a packet after 10 seconds of a busy channel.

### How is the LoRa APRS iGate firmware installed?

Through a web flasher and installer hosted on GitHub Pages, which programs the board over USB from the browser so no local toolchain is needed. There is also a firmware manual in PDF form on Google Drive, and the project wiki has been converted into a PDF manual as well.

### What does EcoMode do in the LoRa APRS iGate firmware?

It is a power saving mode for remote digipeaters without WiFi, a screen or LEDs, where the board sleeps until a packet is received, cutting idle current consumption to almost 10 percent. The readme records that on the LILYGO LoRa32 it draws only 24mA, or 150mA with the WiFi access point enabled, and a later update allows APRS messages and queries to wake the station on demand.

## Sources

- [Issues](https://github.com/richonguzman/LoRa_APRS_iGate/issues)
- [License: GPL-3.0](https://github.com/richonguzman/LoRa_APRS_iGate/blob/main/LICENSE)
- [README](https://github.com/richonguzman/LoRa_APRS_iGate/blob/main/README.md)
- [Releases](https://github.com/richonguzman/LoRa_APRS_iGate/releases)
- [richonguzman/LoRa_APRS_iGate on GitHub](https://github.com/richonguzman/LoRa_APRS_iGate)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/richonguzman-lora-aprs-igate
