From d5962916776b15fccaeba601197ebd3ce329b0ab Mon Sep 17 00:00:00 2001 From: cjkas Date: Wed, 28 Oct 2026 21:31:10 +0100 Subject: [PATCH] build: bring back the ESP32-C3 build With the old API gone, the C3 image is 1,498,512 bytes at CORE_DEBUG_LEVEL=2 and leaves 72.6 KB of its 1.5 MB OTA slot. It was 76.5 KB over when ESP-IDF 5.5 dropped it. - platformio.ini: env esp32c3, single core, esp32_3MB.csv, level 2. - CI builds and releases it with the other chips. - ADR 0003: amended. Co-Authored-By: Claude Opus 5.5 --- .github/workflows/build.yaml | 12 +++++++++--- docs/adr/0003-pioarduino-idf55.md | 2 ++ platformio.ini | 8 ++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 7ef5508..d4b1f33 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -60,9 +60,7 @@ jobs: # fwname: firmware-only binary for OTA updates # obname: onboard image (bootloader + partitions + firmware + littlefs merged) # for flashing a new chip via USB/serial - # addr_bootloader: chip-dependent (ESP32: 0x1000, S3/C6: 0x0) - # No C3: on ESP-IDF 5.5 its image no longer fits the 1.5 MB OTA slot - # (docs/adr/0003-pioarduino-idf55.md). C3 boards stay on 3.0.x. + # addr_bootloader: chip-dependent (ESP32: 0x1000, S3/C3/C6: 0x0) # addr_fs: must match spiffs/littlefs offset in esp32_3MB.csv include: - env: esp32dev @@ -81,6 +79,14 @@ jobs: fwname: SomfyController.ino.esp32s3.bin fsname: SomfyController.littlefs.esp32s3.bin obname: SomfyController.onboard.esp32s3.bin + - env: esp32c3 + name: ESP32-C3 + chip: ESP32-C3 + addr_bootloader: "0x0" + addr_fs: "0x310000" + fwname: SomfyController.ino.esp32c3.bin + fsname: SomfyController.littlefs.esp32c3.bin + obname: SomfyController.onboard.esp32c3.bin - env: esp32c6 name: ESP32-C6 chip: ESP32-C6 diff --git a/docs/adr/0003-pioarduino-idf55.md b/docs/adr/0003-pioarduino-idf55.md index 3a6baf0..cb06ae1 100644 --- a/docs/adr/0003-pioarduino-idf55.md +++ b/docs/adr/0003-pioarduino-idf55.md @@ -12,6 +12,8 @@ We moved every firmware env from `espressif32 @ 6.13.0` (Arduino 2.0.17 on ESP-I - **Firmware size.** The ESP32 image grows from 1,382,640 bytes (v3.0.14) to 1,555,472 at `CORE_DEBUG_LEVEL=2`, leaving 17 KB of the 1.5 MB OTA slot. At level 3 it doesn't fit, so release envs build at level 2 (warnings and errors) and debug envs stay at 3. PlatformIO's "Flash:" figure counts ELF sections, not the image, and reads about 45 KB low, so CI checks `firmware.bin` against the app partition and fails under 8 KB free (`.github/size_check.py`). - **No more C3 builds.** Its image grows by 214 KB to 1,651,216 bytes, 76.5 KB over the OTA slot even at level 2. C3 boards stay on the 3.0.x releases. + + > **Amended in 4.0.0.** The C3 builds again. Without the old API (ports 8080 and 8081), its image is 1,498,512 bytes at level 2 and leaves 72.6 KB of the OTA slot. - **Ethernet PHY ids are ours.** Arduino 3.x renumbered `eth_phy_type_t` (`ETH_PHY_GENERIC` is 0). NVS, backups and the web UI keep the Arduino 2.x numbers as `eth_phy_id_t` (`src/EthPhy.h`), translated by name when Ethernet starts. Never cast a stored id to the framework enum. - **Ethernet only on the original ESP32.** Arduino 3.x has the RMII MAC API only where `CONFIG_ETH_USE_ESP32_EMAC` is set. S3 and C6 build without Ethernet. - **Updates roll back until proven.** We override the core's `verifyRollbackLater()` hook to return true, and `loop()` marks the new firmware valid once it has run 60 s and the network is up. A reset before then boots the previous firmware. The LittleFS image an update wrote stays, so the old firmware runs with the new web UI. diff --git a/platformio.ini b/platformio.ini index e7e5b60..aaed9a4 100644 --- a/platformio.ini +++ b/platformio.ini @@ -95,6 +95,14 @@ build_flags = ${dualcore.build_flags} -DCORE_DEBUG_LEVEL=2 +[env:esp32c3] +extends = esp32 +board = esp32-c3-devkitm-1 +board_build.partitions = esp32_3MB.csv +build_flags = + ${esp32.build_flags} + -DCORE_DEBUG_LEVEL=2 + ; Released as a debug build with one 3 MB app slot, so C6 boards update over ; USB, not OTA. [env:esp32c6]