Skip to main content
v5.0.3 (release 339, built Sep 12 2026) is a hardening release on the same ESP-IDF v5.4 / MicroPython v1.25.0 base. The BLE and ESP-NOW wire formats are unchanged. Every record layout, TOTEM_MSG_MAP, EXTENDED and COMM_SPEED entry is identical. Clients written for v5.0.2 keep working, and the new BLE features are opt-in. The comparison reconstructs every frozen module from both images, disassembles them with MicroPython’s own mpy-tool.py, and diffs them function by function (see methodology). 74 modules are identical, 20 changed, 2 were removed.

At a glance

BLE

Unchanged: the command map, all gen_* record layouts, and both transmit loops. The legacy full-duplex loop that works on macOS behaves exactly as in v5.0.2; see transmit modes. A v5.0.3 device was tested end to end with totemctl.

ESP-NOW mesh

The module body of espnow_conn_v2 (imports, message maps, class construction) is opcode- identical. Changes are inside EspConn (details):
  • All-peer sends unicast to non-POI peers in a rotating order, limited by an estimate of free driver TX buffers.
  • Back-pressure: sends are dropped locally (tx_skipped) when no buffers are free.
  • ESP_ERR_ESPNOW_NO_MEM is treated as back-pressure. In v5.0.2 it set is_silent_reboot.
  • Relay shedding: mesh frames from non-peers are no longer relayed when the receiver drops frames or the TX pool is busy.
  • Supervisor: communicate_supervised restarts the comms task after a crash.
  • Bonding: an already-bonded requester gets five peer ACKs. A Smart Group cancel now also matches by UID.
The LR PHY rate is 250K (e.config(rate=41)) in both versions. Earlier docs said 500K.

Device behaviour

Removed modules