diff --git a/.github/workflows/pr_check.yml b/.github/workflows/pr_check.yml index d8b061db3..164112974 100644 --- a/.github/workflows/pr_check.yml +++ b/.github/workflows/pr_check.yml @@ -22,10 +22,10 @@ jobs: with: python-version: '3.13' - - name: Install PlatformIO + - name: Install pioarduino run: | pip install wheel - pip install -U platformio + pip install -U "pioarduino==6.2.0" - name: Run unit tests run: | diff --git a/.github/workflows/stable_release.yml b/.github/workflows/stable_release.yml index c96af1acb..7d2c174ce 100644 --- a/.github/workflows/stable_release.yml +++ b/.github/workflows/stable_release.yml @@ -38,10 +38,10 @@ jobs: version=`grep -E '^#define EMSESP_APP_VERSION' ./src/emsesp_version.h | awk -F'"' '{print $2}'` echo "VERSION=$version" >> $GITHUB_OUTPUT - - name: Install PlatformIO + - name: Install pioarduino run: | python -m pip install --upgrade pip - pip install -U platformio + pip install -U "pioarduino==6.2.0" python -m pip install intelhex - name: Build webUI diff --git a/.github/workflows/test_release.yml b/.github/workflows/test_release.yml index cc46c6a2c..efc1b31d5 100644 --- a/.github/workflows/test_release.yml +++ b/.github/workflows/test_release.yml @@ -39,10 +39,10 @@ jobs: version=`grep -E '^#define EMSESP_APP_VERSION' ./src/emsesp_version.h | awk -F'"' '{print $2}'` echo "VERSION=$version" >> $GITHUB_OUTPUT - - name: Install PlatformIO + - name: Install pioarduino run: | python -m pip install --upgrade pip - pip install -U platformio + pip install -U "pioarduino==6.2.0" python -m pip install intelhex - name: Build webUI diff --git a/CHANGELOG_LATEST.md b/CHANGELOG_LATEST.md index d6faa85c1..e2caf3112 100644 --- a/CHANGELOG_LATEST.md +++ b/CHANGELOG_LATEST.md @@ -74,5 +74,5 @@ This release is based on the latest Espressif/Arduino core version 3. It brings - failed versions.json fetches back off from 5 up to 160 minutes instead of retrying every 5 minutes, as each attempt blocks the main loop for as long as the DNS, connect and read timeouts allow - optimized the LED library to support WS2812B V5 and the newer V6 RGB LEDs - hold Tx while a K30RF/KM200 gateway is syncing [#3094](https://github.com/emsesp/EMS-ESP32/issues/3094) -- Tasmota platform 2026.05.50 (Arduino 3.3.8 / IDF 5.5.4) to 2026.09.50 (Arduino 3.3.12 / IDF 5.5.5) +- Tasmota platform 2026.05.50 (Arduino 3.3.8 / IDF 5.5.4) to 2026.09.50 (Arduino 3.3.12 / IDF 5.5.5). Building that platform needs PlatformIO Core ≥6.2.0; install `pioarduino==6.2.0` (official `platformio` is still 6.1.19). See CONTRIBUTING.md - CI dev-release firmware jobs run in parallel (webUI, firmware targets, standalone) instead of one serial job diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 04d99e530..41ab1ee29 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -10,6 +10,40 @@ Everybody is welcome and invited to contribute to the EMS-ESP Project by: This document describes rules that are in effect for this repository, meant for handling issues by contributors in the issue tracker and PRs. +## Building the firmware + +Arduino/IDF 3.3.12 (Tasmota platform `2026.09.50` in `platformio.ini`) needs **PlatformIO Core ≥6.2.0**. The official `platformio` package on PyPI is still 6.1.19, so `pio upgrade` and `pip install -U platformio` stay on 6.1.19 and you get: + +`IncompatiblePlatform: Development platform 'espressif32' is not compatible with PlatformIO Core v6.1.19 and depends on PlatformIO Core >=6.2.0.` + +Install **pioarduino** 6.2.0 (drop-in Core fork). It provides the same `pio` / `platformio` commands. + +**VS Code / Cursor** (PlatformIO IDE uses `~/.platformio/penv`): + +Linux / macOS: + +```bash +~/.platformio/penv/bin/pip install -U "pioarduino==6.2.0" +~/.platformio/penv/bin/pio --version +``` + +Windows (PowerShell): + +```powershell +& "$env:USERPROFILE\.platformio\penv\Scripts\pip.exe" install -U "pioarduino==6.2.0" +& "$env:USERPROFILE\.platformio\penv\Scripts\pio.exe" --version +``` + +You should see `PlatformIO Core, version 6.2.0`. Reload the window (or restart the IDE), then build again. + +**CLI-only / CI:** + +```bash +pip install -U "pioarduino==6.2.0" +# or: uv pip install --system pioarduino==6.2.0 +platformio --version +``` + ## Opening New Issues 1. Opening an issue means that a problem exists in the code and should be addressed by the project contributors. diff --git a/pio_local.ini_bak b/pio_local.ini_bak new file mode 100644 index 000000000..54dbfc56f --- /dev/null +++ b/pio_local.ini_bak @@ -0,0 +1,109 @@ +; example custom platformio ini file for EMS-ESP + +[common] +; custom build flags to use in my_build_flags +; -DEMSESP_UART_DEBUG ; debugging UART +; -DEMSESP_DEBUG ; enables DEBUG to the log. Will generate a lot of extra traffic on Console and Syslog +; -DEMSESP_DEFAULT_BOARD_PROFILE=\"NODEMCU\" ; hard code the default board name +; -DEMSESP_DEBUG_SENSOR ; additional debug for the sensors +; -DCORE_DEBUG_LEVEL=5 ; verbose core level debugging 5=verbose, 4=debug, 3=info +; -DEMSESP_TEST ; enable the tests. EN language only +; -DEMSESP_DE_ONLY ; only DE translated entity names +; -DEMSESP_EN_ONLY ; only EN translated entity names +; -DEMSESP_PINGTEST ; send log message every 1/2 second + +; my_build_flags = -DEMSESP_TEST -DEMSESP_DEBUG +; my_build_flags = -DEMSESP_DEBUG -DEMSESP_TEST -DEMSESP_PINGTEST +; my_build_flags = -DEMSESP_DEBUG -DCORE_DEBUG_LEVEL=5 +; my_build_flags = -DEMSESP_EN_ONLY -DEMSESP_TEST -DCORE_DEBUG_LEVEL=5 -DARDUINO_USB_CDC_ON_BOOT=1 +; my_build_flags = -DEMSESP_EN_ONLY +; my_build_flags = -DEMSESP_DEBUG +; my_build_flags = +; -D EMSESP_GATEWAY_TX_HOLD ; hold Tx while a K30RF/KM200 gateway is syncing, see issue #3094 +; -D EMSESP_TX_PRE_DELAY=1000 ; wait this many us before each Tx so we don't overlap the master's break, see issue #3094 + +my_build_flags = + +[platformio] +default_envs = s_16M_P ; BBQKees E32V2 +; default_envs = s_16M_P_custom ; BBQKees E32V2 with custom Arduino/IDF libs +; default_envs = recovery_s_16M_P ; recovery +; default_envs = crashtest_s_16M_P ; crash test +; default_envs = build-webUI ; build the web interface only +; default_envs = s3_16M_P ; BBQKees S3 +; default_envs = s_4M ; BBQKees older S32, 4MB no psram +; default_envs = s_16M ; BBQKees newer S32 V2, 16MB no psram +; default_envs = c6 ; XIAO ESP32C +; default_envs = debug + +; default_envs = core3 +; default_envs = core2 + +[env] + +; uncomment if you want to upload the firmware via OTA (must have upload_protocol = custom) +extra_scripts = + post:scripts/rename_fw.py ; renames the firmware .bin file + scripts/upload.py ; optionally upload the firmware via OTA (must have upload_protocol = custom) + +; set the username and password for the admin account (default password is admin) +custom_username = admin +custom_password = admin + +; ** upload settings ** +; for direct USB, which is the default you can set an optional port for example: +; upload_port = /dev/ttyUSB0 +; upload_port = /dev/ttyACM0 + +; CH340G bridge tops out here reliably; drop back to 460800 if uploads fail +; upload_speed = 921600 +upload_speed = 2000000 + +; for direct via HTTP (OTA) set: +; upload_protocol = custom +; custom_emsesp_ip = or ems-esp.local + +upload_protocol = custom + +; custom_emsesp_ip = ems-esp.local ; E32V2.2 (test) +; custom_emsesp_ip = 192.168.1.39 ; E32V2.2 (test) +; custom_emsesp_ip = 192.168.1.75 ; E32V2.2 (test) v3.8.4 + +custom_emsesp_ip = ems-espP.local ; E32V2.2 (prod) +; custom_emsesp_ip = 10.10.10.202 ; E32V2.2 (prod) + +; custom_emsesp_ip = ems-esps32.local ; S32, 4MB no psramS32 +; custom_emsesp_ip = ems-espS3.local ; ems-espS3 +; custom_emsesp_ip = 10.10.10.175 ; Wemos Lolin S3 + +; lib_deps = +; bblanchon/ArduinoJson @ 7.4.3 +; ESP32Async/AsyncTCP @ 3.4.10 +; ESP32Async/ESPAsyncWebServer @ 3.11.0 +; https://github.com/mobizt/ReadyMail.git @ 0.4.0 +; https://github.com/mobizt/ESP_SSLClient.git @ 3.1.3 + ; https://github.com/emsesp/EMS-ESP-Modules.git @ 1.0.8 +; ; file://${PROJECT_DIR}/../modules/EMS-ESP-Modules + +; ** debug settings ** +; to be used with an ESP32-S3 which has an onboard JTAG, connect the OTG USB port to the PC +; if using an external JTAG board like the ESP-PROG set debug_tool = esp-prog, and use zadig to set the correct driver for the USB port +; see https://docs.platformio.org/en/stable/projectconf/sections/env/options/debug/debug_init_break.html for settings +; use with my_build_flags = -DEMSESP_EN_ONLY -DEMSESP_TEST -DCORE_DEBUG_LEVEL=5 -DARDUINO_USB_CDC_ON_BOOT=1 +[env:debug] +board = esp32-s3-devkitc-1 +framework = arduino +platform = espressif32@6.12.0 ; Arduino Core v2.0.17 / IDF v4.4.7 +board_build.partitions = partitions/esp32_partition_16M.csv +board_upload.flash_size = 16MB +board_build.app_partition_name = app0 +board_build.filesystem = littlefs +upload_protocol = esptool +build_type = debug +monitor_raw = no +monitor_filters = colorize, esp32_exception_decoder +debug_tool = esp-builtin +debug_init_break = +upload_speed = 2000000 +monitor_speed = 115200 +extra_scripts = diff --git a/platformio.ini b/platformio.ini index 67c440f4a..f02f21474 100644 --- a/platformio.ini +++ b/platformio.ini @@ -6,6 +6,8 @@ ; For example: EMS-ESP-3_7_0-dev_31-esp32-16MB+.bin ; ; boards can be found in https://github.com/pioarduino/platform-espressif32/tree/main/boards +; Tasmota platform 2026.09.50 needs PlatformIO Core >=6.2.0. Official platformio is still +; 6.1.19 — install pioarduino instead (see CONTRIBUTING.md). `pio upgrade` will not get 6.2.0. [platformio] ; build all supported targets. Use pio_local.ini to override and build specific targets. @@ -63,18 +65,11 @@ unbuild_flags = [espressif32_base_4M] framework = arduino board_build.partitions = partitions/esp32_partition_4M.csv -board_upload.flash_size = 4MB -board_build.app_partition_name = app0 -platform = https://github.com/tasmota/platform-espressif32/releases/download/2026.09.50/platform-espressif32.zip ; Arduino Core 3.3.12 based on IDF 5.5.5 ; 16MB Flash variants [espressif32_base_16M] framework = arduino board_build.partitions = partitions/esp32_partition_16M.csv -board_upload.flash_size = 16MB -board_build.app_partition_name = app0 -platform = https://github.com/tasmota/platform-espressif32/releases/download/2026.09.50/platform-espressif32.zip ; Arduino Core 3.3.12 based on IDF 5.5.5 -platform_packages = framework-arduinoespressif32 @ https://github.com/emsesp/esp32-arduino-lib-builder/releases/download/0910-1604-5.5.5/framework-arduinoespressif32-v5.5.5-a63b839f.tar.xz build_flags = ${common.build_flags} -D EMSESP_HAS_RECOVERY ; installs and falls back to the recovery firmware in the factory partition @@ -84,11 +79,10 @@ build_flags = [espressif32_base_32M] framework = arduino board_build.partitions = partitions/esp32_partition_32M.csv -board_upload.flash_size = 32MB -board_build.app_partition_name = app0 -platform = https://github.com/tasmota/platform-espressif32/releases/download/2026.09.50/platform-espressif32.zip ; Arduino Core 3.3.12 based on IDF 5.5.5 [env] +platform = https://github.com/tasmota/platform-espressif32/releases/download/2026.09.50/platform-espressif32.zip ; Arduino Core 3.3.12 based on IDF 5.5.5 +platform_packages = framework-arduinoespressif32 @ https://github.com/emsesp/esp32-arduino-lib-builder/releases/download/0910-1604-5.5.5/framework-arduinoespressif32-v5.5.5-a63b839f.tar.xz build_flags = ${common.build_flags} build_unflags =