Board init: all .unwrap() → .expect() with diagnostic messages. Vext/reset forget(): documented why pin must stay in output state. Fixed LoRa params (PREAMBLE_LEN, CRC_ON, etc.): documented as intentionally non-configurable. Watch capacity: documented that display sees latest state only.
DongLoRa
Transparent LoRa radio over USB. Plug in a supported board, talk LoRa from your host. The firmware is a dumb pipe — it exposes clean LoRa parameters (frequency, bandwidth, spreading factor, coding rate, TX power) and gets out of the way. No mesh logic, no protocol opinions, no config files.
Quick Start
- Get a supported board
- Install toolchain (see Building)
- Build and flash:
just flash heltec_v4 - Run an example:
uv run examples/simple_rx.py - See packets
Supported Boards
| Board | MCU | Radio | Display |
|---|---|---|---|
| Heltec V3 | ESP32-S3 | SX1262 | SSD1306 OLED |
| Heltec V4 | ESP32-S3 | SX1262 | SSD1315 OLED |
| RAK WisBlock 4631 | nRF52840 | SX1262 | SSD1306 OLED (optional) |
Protocol
DongLoRa speaks a binary protocol over USB CDC-ACM: COBS-framed, fixed-size little-endian messages. 8 commands, 6 response types — everything you need to configure the radio, transmit, and receive.
See docs/PROTOCOL.md for the complete wire format specification with worked examples.
Examples
All examples use uv for dependency management:
| Script | Description |
|---|---|
all_commands.py |
Exercise all 8 commands (Ping, SetConfig, GetConfig, StartRx, StopRx, Transmit, DisplayOn/Off) |
simple_rx.py |
Configure radio, receive and print packets |
simple_tx.py |
Transmit a single packet |
ping_pong.py |
Two-dongle demo (--role tx / --role rx) |
meshcore/ |
Full MeshCore packet decoder (advanced example) |
Building
Requires just and Rust.
just build-all # build firmware for all boards (skips unavailable toolchains)
just build heltec_v4 # build a specific board
just check-all # compile-check only (no firmware output)
just flash heltec_v4 # build + flash
just clippy heltec_v4 # lint
Xtensa boards (Heltec V3/V4)
Requires the ESP toolchain:
cargo install espup
espup install --toolchain-version 1.82.0.3
ARM boards (RAK 4631)
Stock Rust stable. Targets are installed automatically.
Board Roadmap
Next Up
| Board | MCU | Radio |
|---|---|---|
| Heltec V2 | ESP32 | SX1276 |
| Heltec Wireless Tracker | ESP32-S3 | SX1262 |
| Heltec Vision Master E213/E290 | ESP32-S3 | SX1262 |
| LilyGo T-Beam (SX1262) | ESP32 | SX1262 |
| LilyGo T-Beam Supreme | ESP32-S3 | SX1262 |
| LilyGo T-Echo | nRF52840 | SX1262 |
| LilyGo T3 S3 | ESP32-S3 | SX1262 |
| Seeed Studio Xiao nRF52 WIO | nRF52840 | SX1262 |
Future
| Board | MCU | Radio |
|---|---|---|
| Elecrow ThinkNode M1-M6 | various | various |
| Heltec Wireless Paper / MeshPocket / T114 | various | SX1262 |
| LilyGo T-Deck / T-Echo Lite / LoRa32 | various | various |
| RAK WisBlock 3112 / WisMesh variants | various | SX1262 |
| RPI Pico 2040 + WaveShare SX1262 | RP2040 | SX1262 |
| Seeed Studio SenseCAP / Xiao variants | various | SX1262 |
Contributing
See CONTRIBUTING.md.
License
MIT — Stephen Waits