Dual OTA partition table (ota_0/ota_1, 1920 KB each) on 4MB flash.
Firmware gains OTA command, LED_OTA double-blink, version in STATUS,
and automatic rollback validation. Pi-side esp-ota tool serves firmware
via HTTP and orchestrates the update flow. esp-fleet gains ota subcommand.
Firmware (app_main.c):
- UDP command listener on port 5501 (configurable via Kconfig)
- Commands: REBOOT, IDENTIFY, STATUS, RATE, POWER
- LED status indicator on GPIO2 (off/slow/fast blink/solid)
- NVS persistence for send_rate and tx_power settings
- Refactored ping to support stop/restart for dynamic rate changes
- TX power control via esp_wifi_set_max_tx_power()
Pi-side tooling:
- tools/esp-cmd: standalone Python3 UDP client for device management
Tested on amber-maple (ESP32 v3.1) with ESP-IDF v5.5.2.
Matches the version deployed on ESP32 sensors. Removes v6.1
workaround, updates all docs to reflect v5.5.2, regenerates
sdkconfig for the correct IDF version.