firmware: no-reflash config updates for ESP-01S + UART-OTA groundwork
Build (Dev) / build (push) Failing after 9s
CI/CD / lint-and-typecheck (push) Successful in 9m28s
CI/CD / test (push) Successful in 9m27s
CI/CD / build (push) Failing after 4m53s
CI/CD / deploy (push) Has been skipped

Updating the buried ESP-01S currently means a USB-UART adapter and a
GPIO0 jumper. Add a path to change its settings without reflashing, and
lay the groundwork for full firmware updates over the existing UART.

set_config (no reflash for settings):
- ESP-01S: add saveConfig() + a set_config command — updates GoPro
  SSID/password/IP and poll interval, persists to LittleFS, acks, and
  re-associates Wi-Fi if creds changed
- XIAO: forward an MQTT set_camera_config down to the ESP-01S over UART
  (hub -> MQTT -> XIAO -> UART -> ESP-01S/LittleFS)

UART-OTA groundwork ("XIAO as flasher"):
- reserve XIAO GPIOs ESP01_RST_PIN=D8, ESP01_PGM_PIN=D10 for driving the
  ESP-01S serial bootloader (not driven yet)
- docs/design/esp01s-uart-ota.md: full design (why Wi-Fi OTA doesn't fit
  the 1MB ESP-01S on the GoPro AP, bootloader entry, ROM flash protocol,
  HTTP-pull delivery, scope)
- hardware/README.md: fix stale ESP32-C3 -> XIAO ESP32-C6 wiring, add the
  two control lines (Notion wiring diagram updated to match)

Both firmwares build clean and are flashed; set_config round-trip needs
the broker to exercise end-to-end.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Joshua King
2026-06-04 19:11:34 -04:00
parent cefb7ef52c
commit 403e1d9edd
4 changed files with 175 additions and 42 deletions
+9 -4
View File
@@ -129,7 +129,7 @@ USB Power Bank
└── USB-C cable → bottom USB-C female input on Camera Node Case
├── rocker switch → node power rail
├── PWR LED indicator
├── ESP32-C3 Super Mini
├── XIAO ESP32-C6
├── ESP-01S / ESP8266
├── 1.3-inch OLED display
├── RGB status LED
@@ -138,9 +138,14 @@ USB Power Bank
(power only — no data)
UART / control inside case:
ESP-01S TX ──→ ESP32-C3 RX
ESP-01S RX ←── ESP32-C3 TX
ESP-01S GND ─── ESP32-C3 GND
ESP-01S TX (GPIO1) ──→ XIAO D7 (RX)
ESP-01S RX (GPIO3) ←── XIAO D6 (TX)
ESP-01S GND ─── XIAO GND
# Reserved for UART OTA (XIAO reflashes the ESP-01S — no adapter):
ESP-01S RST ←── XIAO D8 (pulse low to reset)
ESP-01S GPIO0 ←── XIAO D10 (low at reset = bootloader)
# See docs/design/esp01s-uart-ota.md
```
**Power note:** exact wiring depends on the regulator/power board used. Confirm OLED voltage, LED current limiting, and whether the rocker switches USB 5 V input or a regulated node rail.