-
Notifications
You must be signed in to change notification settings - Fork 3
Firmware Receiver v14
OneSeventyFour edited this page May 15, 2026
·
2 revisions
| Released | 2026-05 |
| Status | Superseded by v15 |
| Pairs with dongle | v8+ |
| Predecessor | v13 |
| Notable | One-binary-fits-the-fleet — identity moved to NVS. |
| File | Purpose | Download |
|---|---|---|
os4_receiver_v14.bin |
App partition. | Download |
os4_receiver_v14.bootloader.bin |
Chip bootloader. | Download |
os4_receiver_v14.partitions.bin |
Partition table. | Download |
os4_receiver_v14.boot_app0.bin |
OTA "next-app" pointer. | Download |
Move NODE_ID + RECEIVER_IDENT out of firmware and into NVS (flash-backed Preferences). One firmware binary now serves the whole fleet; per-unit identity is provisioned over USB serial after the first flash via the host-side devices/utils/flash_receiver.py helper (which sends a SETID <node_id> <ident> line and waits for the chip to reboot).
-
NODE_ID==0is the unprovisioned sentinel: the receiver does not start the radio, displays a slow magenta breathing pattern on the status LEDs so the operator can see the unit needs commissioning, and only services serial. Once provisioned,ESP.restart()picks up the new identity from NVS like any boot. - Serial commands accepted at any time (one per line, 115200 8N1):
-
GETID→ printsNODE_ID=<n> IDENT=<s> -
SETID <n> <ident>→ writes NVS, printsOK SETID ...then resets -
WIPEID→ clears NVS identity (back to unprovisioned)
-
- NVS namespace is
"byh_rx", keys"node_id"(uchar) and"ident"(string, max 15 chars + NUL). The host flash workflow preserves NVS across all flashes: the default partition table puts NVS at0x9000–0xdfff, in the gap between the partition table andboot_app0, andflash_receiver.py(both default and--full) only writes regions outside that gap. Identity therefore survives every firmware update unless someone explicitly erases the chip (e.g.esptool.py erase_flash).
-
Breaking workflow change: pre-v14 firmware baked
NODE_IDandIDENTinto the binary, so each receiver needed its own per-unit build. v14+ uses a single binary; identity is set viaflash_receiver.py --set-id. - When upgrading from a pre-v14 binary, the chip's NVS will be empty for the new keys. Run
flash_receiver.py <port> --set-id <NODE_ID> <IDENT>once after the first v14 flash. After that all updates preserve identity.
- Flashing a receiver → routine flash — the modern flow assumes v14+.
Getting started
- Overview
- Desktop installers (macOS / Windows)
- macOS
- Linux
- Windows
- Production vs Development
- Connecting the dongle
- Flash a receiver
- Flash a dongle
- OTA flashing
Raspberry Pi
System overview
Subsystems
Hardware
- Receiver firmware
- Dongle firmware
- RF protocol
- Contributor Portal — BOMs, schematics, and board resources
UI walkthrough
Reference
Downloads
- Firmware
- Installers
Module Build & User Guides
- Cue
- Receiver
- Dongle