Turns a Dragino LG01-P into a multi-mode raw LoRa node at 433MHz: KISS TNC over TCP, standalone APRS digipeater + iGate, and a Reticulum network interface — no LoRaWAN, no reflash to switch modes.
"Chimera": one device, three interoperable personalities, sharing a single "raw radio modem" firmware layer.
The LG01-P ships as a single-channel LoRaWAN gateway. This project replaces that use case entirely and exposes the radio as a general-purpose raw LoRa modem instead.
Unlike the LG01-N / LG02 (where the SX1276 hangs directly off the Linux SoC's SPI bus), the LG01-P has an ATmega328P between the AR9331 and the radio, making it architecturally an Arduino Yún. All radio control therefore runs as an Arduino sketch on the ATmega328P; the Linux side only bridges the serial link to the network. See docs/hardware-notes.md.
| Mode | What the device does | Client side |
|---|---|---|
| TNC | Exposes the radio as a KISS TNC over TCP | PinPoint, Xastir, APRSIS32, YAAC, any KISS-speaking software |
| Digipeater + iGate | Standalone LoRa APRS digipeater (WIDEn-N), optionally gating traffic to APRS-IS — with an optional message downlink back to RF. Digi, iGate and downlink are independently toggleable | None required (standalone) |
| Reticulum | Exposes the radio as a raw packet interface for a custom RNS Interface class |
rnsd, MeshChat, Sideband on an external host |
In TNC mode the bridge translates between what's on the air and what the
client expects: the 433.775 LoRa APRS ecosystem (OE5BPA trackers,
RadioGroup/PIRS nodes…) transmits text packets (<0xFF0x01 + TNC2
ASCII), while KISS clients expect binary AX.25 frames. The bridge
converts bidirectionally — received text becomes proper AX.25 UI frames
(callsigns, path and has-been-repeated bits included), and the client's
AX.25 beacons go out as LoRa APRS text the surrounding nodes understand.
Controlled by bridge.kiss_text_translation in the config (default on;
turn it off to get raw payloads). Unrecognized on-air payloads are dropped
and logged instead of being forwarded as junk.
Stations of the Italian LoRa APRS network received and decoded via KISS TNC:
In Reticulum mode the device replicates the on-air behaviour of the official RNode firmware (1-byte PHY framing, sync word, preamble — implemented in the host-side interface class), so it exchanges Reticulum traffic directly with any RNode device, provided the radio parameters (frequency, SF, BW, CR) match — verified over the air against a stock RNode (see Status below).
Switching personality is one command on the device (chimera-mode tnc|aprs|reticulum), persistent across reboots — or a click in the web UI.
No reflash needed.
- Dragino LG01-P, 433MHz version (not LG01-N, not LG02 — different, incompatible radio architecture)
- Ethernet connectivity for the iGate function (optional otherwise)
- For Reticulum mode: any host on the network running RNS (PC, homelab, phone)
No USB cable and no Arduino IDE needed: a prebuilt firmware image is included and the ATmega328P is flashed from the Dragino itself.
Full step-by-step guide (factory device → working node, with commands for Linux, macOS and Windows): docs/INSTALL.md.
In short:
- SSH into the Dragino, free the internal serial port from the factory Yún bridge, fix the kernel-console settings (required for boot reliability).
- Copy the daemons, init scripts and your config (created from the
config/*.example.*templates — never commit the real files). - Flash the prebuilt sketch image from the Dragino itself
(
run-avrdude), no USB needed. chimera-mode aprs|tnc|reticulumand go.
firmware/atmega328p-modem/ Arduino sketch (single sketch, all 3 modes)
firmware/.../prebuilt/ compiled .hex images, ready to flash
openwrt/bridge/ AR9331 serial<->TCP bridge daemon
openwrt/digipeater/ standalone APRS digipeater daemon
openwrt/igate/ APRS-IS client daemon
openwrt/init.d/ OpenWrt boot scripts
openwrt/chimera-mode one-command personality switcher
openwrt/luci/ web UI page for mode switching
reticulum/interface/ custom RNS Interface class (runs on external host)
config/ configuration templates (*.example.*)
docs/ install guide, architecture, hardware notes
Running in production on real hardware (factory OpenWrt Chaos Calmer 15.05.1, Python 2.7):
- TNC mode: full chain verified end-to-end (TCP client → bridge → serial → sketch → radio and back), boot-safe including power-loss tests.
- Digipeater + iGate: deployed and live on APRS-IS.
- Reticulum mode: verified over the air against real RNode hardware (Heltec WiFi LoRa 32 V3, SX1268, RNode firmware 1.86) — bidirectional Reticulum traffic at 64/180/300-byte payloads, RNode split packets included. Testing against an SX1276-family board and the MeshChat/Sideband acceptance runs are still open — see docs/architecture.md.
- Dragino — LG01-P hardware and OpenWrt firmware
- RadioHead — RH_RF95 driver
- aprs-is.net — APRS-IS connection conventions
- Reticulum / RNode by Mark Qvist
IZ0KEW
GPLv3 — consistent with most amateur-radio LoRa software in this space.

