$ show richonguzman/LoRa_APRS_iGate
This repository provides the firmware for a LoRa-based APRS iGate/digipeater station running on ESP32 microcontrollers. It bridges amateur radio APRS packets between LoRa RF and the internet (APRS-IS), and can also operate as a digipeater, TNC (KISS), weather station, and GPS tracker. The firmware includes a full web-based configuration UI, live map, MQTT integration, syslog, OTA updates, and support for dozens of hardware variants (Heltec, TTGO, etc.). The code is organized into modular C++ namespaces (LoRa_Utils, DIGI_Utils, APRS_IS_Utils, etc.) and uses a JSON-based configuration store. While the project is actively maintained, it shows some technical drift through vendored esptool binaries, dependency on older libraries (ElegantOTA), and heavy use of compile-time conditionals across board variants. The architecture is a classic embedded monolith targeting a single firmware binary, with strong hardware abstraction via pinout headers and a common configuration object. Several componentsβsuch as the KISS protocol encoder/decoder, the NetworkManager abstraction, and the Configuration classβare well-isolated and potentially reusable in other ESP32/ham radio projects.
The LLM identified 4 files worth highlighting for reuse:
The Configuration class reads and writes system settings from a JSON file on SPIFFS. It is self-contained, uses ArduinoJson for serialization, and provides a single global config object. Could be extracted for any ESP32 project needing persistent JSON configuration.
The NetworkManager class abstracts WiFi (STA/AP) and Ethernet connectivity with event-driven callbacks. It handles connection retries, hostname setup, and supports both built-in WiFi and external Ethernet modules. The interface is small and could be reused in other ESP32 IoT projects.
Implements the KISS framing protocol for AX.25 packet radio. Provides functions to encode and decode KISS frames (FEND, FESC, etc.) and to build APRS-style addresses from raw callsigns. This is a clean, dependency-free implementation that could be reused in any ham radio or packet radio project.
Power management module for AXP192 and AXP2101 PMUs. Provides init, voltage/current monitoring, and peripheral power control (GPS, LoRa). The interface is narrow and the implementation is well-separated from the rest of the code, allowing extraction for other ESP32 boards with AXP PMUs.