From f6a25fc32484efaee38df98c7af5749029f5435e Mon Sep 17 00:00:00 2001 From: Joshua King Date: Thu, 4 Jun 2026 19:28:17 -0400 Subject: [PATCH] firmware: fix C6 filesystem provisioning (LittleFS) + ESP-01S env MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The C6 never loaded its /config.json, so it fell back to defaults (SSID RemoteRig, empty password) and couldn't join Wi-Fi. Two bugs: - Data file was named esp32-config.json but the firmware reads /config.json → renamed to config.json. - Firmware used SPIFFS while pioarduino's uploadfs builds a LittleFS image; the SPIFFS mount then reformatted it empty. Switch the C6 to LittleFS (matches the toolchain default and the ESP-01S). Also: - log loaded ssid/broker/camera_id on config load (not the password) - platformio.ini: land the ESP-01S env retarget (board d1_mini -> esp01_1m, dout, upload_speed 115200) that was missed in 403e1d9 - committed config.json keeps wifi_password blank; the real value is flashed to the device, not stored in git Verified: C6 loads config and associates (got a DHCP lease). MQTT to the broker is a separate network issue (hub IP / subnet). Co-Authored-By: Claude Opus 4.8 --- .../data/{esp32-config.json => config.json} | 0 firmware/platformio.ini | 17 +++++++++++------ firmware/src/esp32-mqtt-bridge.cpp | 13 ++++++++----- 3 files changed, 19 insertions(+), 11 deletions(-) rename firmware/data/{esp32-config.json => config.json} (100%) diff --git a/firmware/data/esp32-config.json b/firmware/data/config.json similarity index 100% rename from firmware/data/esp32-config.json rename to firmware/data/config.json diff --git a/firmware/platformio.ini b/firmware/platformio.ini index 5c73b2e..9f9b677 100644 --- a/firmware/platformio.ini +++ b/firmware/platformio.ini @@ -27,20 +27,25 @@ lib_deps = build_flags = -D CORE_DEBUG_LEVEL=0 -; ── ESP8266: Camera Bridge ────────────────────────────────── -; Flashed onto D1 Mini. Talks to GoPro over Wi-Fi, relays to -; ESP32 over UART (TX/RX pins). No MQTT, no router connection. +; ── ESP-01S: Camera Bridge ────────────────────────────────── +; Flashed onto an ESP-01S (ESP8266, 1MB flash). Talks to the GoPro +; over Wi-Fi, relays to the XIAO over the hardware UART (GPIO1/3). +; No MQTT, no router connection. +; +; Flash with a 3.3V USB-UART adapter: tie GPIO0 → GND, power up / +; reset into bootloader, then upload. ESP-01S flash is qio/dout; +; keep upload_speed modest for adapter reliability. [env:esp8266-camera] platform = espressif8266 -board = d1_mini +board = esp01_1m framework = arduino monitor_speed = 115200 -upload_speed = 921600 +upload_speed = 115200 lib_deps = ${common.lib_deps} build_flags = ${common.build_flags} -D PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48_SECHEAP_SHARED -board_build.flash_mode = dio +board_build.flash_mode = dout board_build.f_cpu = 160000000L build_src_filter = -<*.cpp> diff --git a/firmware/src/esp32-mqtt-bridge.cpp b/firmware/src/esp32-mqtt-bridge.cpp index bfa4c2c..eca958c 100644 --- a/firmware/src/esp32-mqtt-bridge.cpp +++ b/firmware/src/esp32-mqtt-bridge.cpp @@ -30,12 +30,12 @@ #include #include #include -#include +#include #include #include // ──────────────────────────────────────────── -// Configuration (SPIFFS) +// Configuration (LittleFS) // ──────────────────────────────────────────── struct Config { @@ -54,8 +54,8 @@ struct Config { } cfg; bool loadConfig() { - if (!SPIFFS.begin(true)) { Serial.println("[CFG] SPIFFS mount failed"); return false; } - File f = SPIFFS.open("/config.json", "r"); + if (!LittleFS.begin(true)) { Serial.println("[CFG] LittleFS mount failed"); return false; } + File f = LittleFS.open("/config.json", "r"); if (!f) { Serial.println("[CFG] No config — using defaults"); return false; } JsonDocument doc; @@ -71,11 +71,14 @@ bool loadConfig() { cfg.heartbeat_sec = doc["heartbeat_interval_sec"] | cfg.heartbeat_sec; cfg.bat_raw_min = doc["bat_raw_min"] | cfg.bat_raw_min; cfg.bat_raw_max = doc["bat_raw_max"] | cfg.bat_raw_max; + Serial.printf("[CFG] Loaded: ssid=%s broker=%s:%d cam=%s\n", + cfg.wifi_ssid.c_str(), cfg.mqtt_broker.c_str(), cfg.mqtt_port, + cfg.camera_id.length() ? cfg.camera_id.c_str() : "-"); return true; } bool saveConfig() { - File f = SPIFFS.open("/config.json", "w"); + File f = LittleFS.open("/config.json", "w"); if (!f) return false; JsonDocument doc; doc["wifi_ssid"] = cfg.wifi_ssid;