Firmware: OTA client, dual-board build (devkit/XIAO), version reporting, XIAO fixes
Build and push server image / build-and-push (push) Successful in 36s

- version.txt + esp_app_desc_t version reporting (X-Frame-Version header);
  new ota_update.c checks the server's advertised version against the
  running one and streams+applies an update via esp_https_ota, gated by
  bootloader rollback (marks the image valid only after a full successful
  cycle, so a bad update can't brick a wall-mounted frame).
- Dual-OTA partition tables: partitions.csv (8MB dev board, 2MB slots) and
  new partitions_xiao.csv (4MB XIAO, 1.875MB slots -- the dev board's
  table doesn't fit the XIAO's flash). New build_for_board.sh gives each
  board its own build dir + generated sdkconfig via SDKCONFIG_DEFAULTS
  layering, so switching boards never clobbers the other's config.
- fetch_photo_info()/fetch_face_labels() were using the short
  reachability-check timeout even though the manage-menu path can be the
  first (cold, TLS-handshake-paying) request of a wake cycle -- switched
  to the longer fetch timeout to stop spurious ESP_ERR_HTTP_CONNECT
  failures.
- XIAO: the RF switch that selects onboard vs. external antenna
  (GPIO3/14) isn't initialized by plain ESP-IDF the way Seeed's Arduino
  package does it, leaving WiFi unable to reliably reach the antenna at
  all -- new board_antenna.c powers the switch and selects the onboard
  antenna, gated behind FRAME_XIAO_ANTENNA_INIT (on by default in
  sdkconfig.xiao). Also remaps the EPD DC/RST/BUSY pins, since the dev
  board's defaults (GPIO9/10/11) aren't physically exposed on the XIAO.
This commit is contained in:
2026-07-20 22:24:15 -04:00
parent f7eaadcbed
commit a3ab6c5f13
17 changed files with 402 additions and 15 deletions
+18
View File
@@ -1,5 +1,23 @@
menu "ESPresso Frame Configuration"
config FRAME_XIAO_ANTENNA_INIT
bool "Select onboard antenna on Seeed XIAO ESP32-C6 (RF switch init)"
default n
help
The XIAO ESP32-C6 routes its antenna through an FM8625H RF
switch (GPIO3 = switch power enable, GPIO14 = antenna
select) so it can optionally use an external u.FL antenna
instead of the onboard ceramic one. Seeed's own Arduino
board package powers the switch and selects the onboard
antenna automatically at boot; plain ESP-IDF (what this
firmware uses) does not -- without this, the switch's
GPIOs are left floating and the radio may not reliably
reach the onboard antenna at all. Symptom: a softAP (or
STA connection) that starts successfully in the log but
is never actually visible/reachable over the air. Enabled
by default in sdkconfig.xiao; leave off for the DevKitC-1
dev board, which has no such switch.
config ESP_AP_SSID
string "Provisioning softAP SSID prefix"
default "ESPRESSO"