Ranger - LoRa Mesh Communicator
A handheld radio that keeps voice, text and location working when the cell network doesn't.
Ranger is a low-power handheld communication device built on LoRa and the ESP32. It operates independently of cellular towers, SIM cards, subscriptions and government-controlled infrastructure - the idea being that a node in each home forms an instant community mesh the moment normal service fails.
It targets five specific gaps: cellular single points of failure in disasters, deliberate network shutdowns, mandatory subscription cost, unencrypted analog radio, and the lack of location awareness in existing handhelds.
Highlights
- Voice over LoRa: Codec2 compresses speech to 3200 bps, ~40:1, so it fits a 64-byte payload.
- ~250 ms end-to-end voice latency, half-duplex push-to-talk.
- Hardware AES-128 encryption, selectable between open broadcast and encrypted unicast.
- Dual-core FreeRTOS split: Core 0 runs time-critical I2S DMA, Core 1 does compression and radio control.
- GPS location sharing with bearing/distance to peers; 2-15 km range depending on spreading factor.
The audio pipeline
An INMP441 I2S microphone captures audio in 20 ms frames. Codec2 encodes each frame at 3200 bps in about 5 ms. Eight frames are buffered into a single 64-byte LoRa payload before transmission - batching amortises the radio's per-packet overhead against latency.
That 250 ms figure is the honest cost of squeezing intelligible voice through a narrowband long-range radio; it's a deliberate trade of latency for range and power.
Why the dual-core split matters
I2S DMA transfers are unforgiving - miss the timing and you get audible glitches. Pinning those to Core 0 under FreeRTOS keeps them isolated from the CPU-heavy Codec2 compression and the LoRa driver, which live on Core 1. It's the embedded version of separating a real-time thread from best-effort work.
Roadmap
Phase 1 is the breadboard MVP: basic voice and text exchange. Phase 2 moves to a custom PCB, adds GPS integration, LoRaWAN relay support and keypad text entry - targeting a genuinely pocketable device.
Stack
Compute
- ESP32 (dual-core)
- FreeRTOS
Radio
- SX1276 @ 433 MHz
- SX1281 @ 2.4 GHz fallback
Audio
- INMP441 I2S mic
- Codec2 @ 3200 bps
Support
- SSD1306 OLED
- TP4056 + LiPo
- AES-128 HW