From 926c3a14fa7ff0069e0781a5731556a7d1c8a6ae Mon Sep 17 00:00:00 2001 From: Frank <91616163+softhack007@users.noreply.github.com> Date: Mon, 24 Nov 2025 18:42:09 +0100 Subject: [PATCH] esp32 platformio cleanup and improvements * backported "legacy V3" environments for esp32 * added esp32_compat (OTA compatibility with upstream 0.14 and 0.15) * cleanup of default environments * commented out some dangerous default environments (avoids confusion) --- platformio.ini | 262 ++++++++++++++++++++++++++++--------------------- 1 file changed, 150 insertions(+), 112 deletions(-) diff --git a/platformio.ini b/platformio.ini index d51d2a9a..9976cca0 100644 --- a/platformio.ini +++ b/platformio.ini @@ -73,22 +73,23 @@ default_envs = ; wemos_shield_esp32_16MB_SPM1423_XL ; wemos_shield_esp32_16MB_LineIn_M ;; - esp32_4MB_V4_S ;; experimental; HUB75 supported - esp32_4MB_V4_HUB75_forum ;; experimental; HUB75 supported (forum pinout) - esp32_16MB_V4_S ;; experimental - optimized for speed; HUB75 supported - esp32_16MB_V4_M ;; experimental; HUB75 supported - ; esp32_16MB_V4_M_debug ;; experimental - ; esp32_pico_4MB_V4_S ;; experimental - may work better in case you experience wifi connectivity problems - ;; - esp32_4MB_PSRAM_S ;; WROVER experimental; HUB75 supported + esp32dev_compat ;; legacy + esp32_pico_4MB_V4_S ;; PICO D4 board + esp32_4MB_V4_S ;; esp32 4MB - HUB75 supported + esp32_4MB_V4_HUB75_forum ;; esp32 4MB - HUB75 supported (forum pinout) + esp32_4MB_M_eth ;; esp32 4MB with ethernet support ; esp32_4MB_PSRAM_REV3_S ;; WROVER-E experimental, optimized for WROVER-E with "revision3" chip + esp32_4MB_PSRAM_S ;; esp32 WROVER with PSRAM; HUB75 supported + esp32_16MB_V4_S ;; esp32 16MB - HUB75 supported, optimized for speed + esp32_16MB_V4_M ;; esp32 16MB - HUB75 supported + esp32_16MB_V4_M_debug ;; esp32 16MB - for out-of-the-box debugging ;; esp32S3_4MB_S ;; for HD-WF2 (HUB75 supported) esp32S3_8MB_S ;; experimental, optimized for speed, HUB75 supported - esp32S3_8MB_M ;; HUB75 supported + ;; esp32S3_8MB_M ;; HUB75 supported esp32S3_4MB_PSRAM_S ;; for lolin s3 mini, S3 zero, S3 super mini - optimized for speed (no HUB75 support) esp32S3_4MB_PSRAM_M ;; for lolin s3 mini, S3 zero, S3 super mini (no HUB75 support) - esp32S3_8MB_PSRAM_M ;; experiemental; HUB75 supported + esp32S3_8MB_PSRAM_M ;; for S3 with 8MB flash, HUB75 supported esp32S3_16MB_PSRAM_M_HUB75 ;; for S3 with 16MB flash, HUB75 supported (MOONHUB HUB75 adapter board) esp32S3_WROOM-2_M ;; for S3 WROOM-2; HUB75 supported ;; @@ -326,7 +327,30 @@ platform_packages_compat = platformio/tool-esptoolpy #@ ~1.30000.0 +;; old V3 platform for esp32. Not used any more, just kept for reference +[esp32_legacy] +platform = espressif32@3.5.0 +platform_packages = framework-arduinoespressif32 @ https://github.com/Aircoookie/arduino-esp32.git#1.0.6.4 +build_flags = -g + -DARDUINO_ARCH_ESP32 + -D CONFIG_ASYNC_TCP_USE_WDT=0 + -D CONFIG_ASYNC_TCP_TASK_STACK_SIZE=9472 ;; WLEDMM increase stack by 1.25Kb, as audioreactive needs bigger SETTINGS_STACK_BUF_SIZE + -D CONFIG_ASYNC_TCP_STACK_SIZE=9472 + -D LOROL_LITTLEFS ;; use LITTLEFS library by lorol in ESP32 core 1.x.x instead of built-in in 2.x.x + -DCONFIG_LITTLEFS_FOR_IDF_3_2 -DLFS_THREADSAFE +lib_deps = + esp32async/AsyncTCP @ 3.4.7 + ; https://github.com/lorol/LITTLEFS.git + https://github.com/softhack007/LITTLEFS-threadsafe.git#master ;; WLEDMM specific: patched version of lorol LittleFS with improved thread safety + makuna/NeoPixelBus @ 2.7.5 + ;; makuna/NeoPixelBus @ 2.7.9 ;; experimental + ${env.lib_deps} +default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv ;; WLED standard for 4MB flash: 1.4MB firmware, 1MB filesystem +board_build.f_flash = 80000000L +board_build.flash_mode = dout ;; avoid dio/quot/qio - these are broken in arduino-esp32 1.0.6.x + +;; standard platform for esp32 [esp32] platform = ${esp32_idf_V4.platform} ;; default = tasmota (= default from esp32_idf_V4) platform_packages = ${esp32_idf_V4.platform_packages} @@ -596,65 +620,79 @@ build_unflags = ${common.build_unflags} build_flags = ${common.build_flags_esp8266} -D LEDPIN=1 -D WLED_DISABLE_INFRARED lib_deps = ${esp8266.lib_deps} +;; alias for lazy users [env:esp32dev] -board = esp32dev -platform = ${esp32.platform} -platform_packages = ${esp32.platform_packages} -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32 #-D WLED_DISABLE_BROWNOUT_DET -lib_deps = ${esp32.lib_deps} -monitor_filters = esp32_exception_decoder -board_build.partitions = ${esp32.default_partitions} +extends = env:esp32dev_V4_dio80 -[env:esp32dev_qio80] +;; legacy build for OTA compatibility with upstream 0.15.x, slow but safe +[env:esp32dev_compat] board = esp32dev -platform = ${esp32.platform} -platform_packages = ${esp32.platform_packages} +platform = ${esp32_legacy.platform} +platform_packages = ${esp32_legacy.platform_packages} build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_qio80 #-D WLED_DISABLE_BROWNOUT_DET -lib_deps = ${esp32.lib_deps} +build_flags = ${common.build_flags} ${esp32_legacy.build_flags} -D WLED_RELEASE_NAME=ESP32_compat #-D WLED_DISABLE_BROWNOUT_DET +lib_deps = ${esp32_legacy.lib_deps} +board_build.partitions = ${esp32_legacy.default_partitions} monitor_filters = esp32_exception_decoder -board_build.partitions = ${esp32.default_partitions} +;; RAM: [== ] 23.2% (used 75944 bytes from 327680 bytes) +;; Flash: [========= ] 88.5% (used 1391917 bytes from 1572864 bytes) + +;; legacy build for OTA compatibility with upstream 0.15.x, faster due to qio mode +[env:esp32dev_qio80_compat] +board = esp32dev +platform = ${esp32_legacy.platform} +platform_packages = ${esp32_legacy.platform_packages} +build_unflags = ${common.build_unflags} +build_flags = ${common.build_flags} ${esp32_legacy.build_flags} -D WLED_RELEASE_NAME=ESP32_qio80_compat #-D WLED_DISABLE_BROWNOUT_DET +lib_deps = ${esp32_legacy.lib_deps} +board_build.partitions = ${esp32_legacy.default_partitions} board_build.f_flash = 80000000L board_build.flash_mode = qio +monitor_filters = esp32_exception_decoder [env:esp32dev_V4_dio80] -;; experimental ESP32 env using ESP-IDF V4.4.x board = esp32dev platform = ${esp32_idf_V4.platform} platform_packages = ${esp32_idf_V4.platform_packages} build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} -D WLED_RELEASE_NAME=ESP32_V4_qio80 #-D WLED_DISABLE_BROWNOUT_DET +build_flags = ${common.build_flags} ${esp32_idf_V4.build_flags} -D WLED_RELEASE_NAME=ESP32_V4_dio80 #-D WLED_DISABLE_BROWNOUT_DET lib_deps = ${esp32_idf_V4.lib_deps} monitor_filters = esp32_exception_decoder board_build.partitions = ${esp32_idf_V4.default_partitions} board_build.f_flash = 80000000L board_build.flash_mode = dio +;; alias name for env:esp32_4MB_M_eth; improves compatibility with old platformio_override.ini entries [env:esp32_eth] +extends = env:esp32_4MB_M_eth + +;; legacy build for OTA compatibility with upstream 0.15.x +;; --> use [env:esp32_4MB_M_eth] (4MB) or [env:esp32_16MB_M_eth] +[env:esp32_eth_compat] board = esp32-poe -platform = ${esp32.platform} -platform_packages = ${esp32.platform_packages} +platform = ${esp32_legacy.platform} +platform_packages = ${esp32_legacy.platform_packages} upload_speed = 921600 build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags_esp32} -D WLED_RELEASE_NAME=ESP32_Ethernet -D RLYPIN=-1 -D WLED_USE_ETHERNET -D BTNPIN=-1 +build_flags = ${common.build_flags} ${esp32_legacy.build_flags} -D WLED_RELEASE_NAME=ESP32_Ethernet_compat -D RLYPIN=-1 -D WLED_USE_ETHERNET -D BTNPIN=-1 -D WLED_DISABLE_ESPNOW ;; ESP-NOW requires wifi, may crash with ethernet only -lib_deps = ${esp32.lib_deps} -board_build.partitions = ${esp32.default_partitions} +lib_deps = ${esp32_legacy.lib_deps} +board_build.partitions = ${esp32_legacy.default_partitions} -[env:esp32s2_saola] -board = esp32-s2-saola-1 -platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip -platform_packages = -framework = arduino -board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv -board_build.flash_mode = qio -upload_speed = 460800 -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=S2_saola - ;-DLOLIN_WIFI_FIX ;; try this in case Wifi does not work - -DARDUINO_USB_CDC_ON_BOOT=1 -lib_deps = ${esp32s2.lib_deps} +;; WLEDMM: use WLEDMM build environments +;;[env:esp32s2_saola] +;;board = esp32-s2-saola-1 +;;platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.2.2/platform-tasmota-espressif32-2.0.2.zip +;;platform_packages = +;;framework = arduino +;;board_build.partitions = tools/WLED_ESP32_4MB_1MB_FS.csv +;;board_build.flash_mode = qio +;;upload_speed = 460800 +;;build_unflags = ${common.build_unflags} +;;build_flags = ${common.build_flags} ${esp32s2.build_flags} #-D WLED_RELEASE_NAME=S2_saola +;; ;-DLOLIN_WIFI_FIX ;; try this in case Wifi does not work +;; -DARDUINO_USB_CDC_ON_BOOT=1 +;; lib_deps = ${esp32s2.lib_deps} ;; WLEDMM: use WLEDMM build environments ;; [env:esp32_wrover] @@ -692,59 +730,60 @@ board_build.flash_mode = dio ;; some boards do not boot with the faster "qio" mo ; RAM: [== ] 21.2% (used 69312 bytes from 327680 bytes) ; Flash: [======== ] 78.1% (used 1228472 bytes from 1572864 bytes) -[env:esp32s3dev_8MB] +;; WLEDMM: use WLEDMM build environments +;; [env:esp32s3dev_8MB] ;; ESP32-S3-DevKitC-1 development board, with 8MB FLASH, no PSRAM (flash_mode: qio) -board = esp32-s3-devkitc-1 -platform = ${esp32s3.platform} -platform_packages = ${esp32s3.platform_packages} -upload_speed = 921600 ; or 460800 -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=ESP32-S3_8MB - -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 - -D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip - ;-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") - ;-D WLED_DEBUG -lib_deps = ${esp32s3.lib_deps} - ${esp32.AR_lib_deps} -board_build.partitions = ${esp32.large_partitions} -board_build.f_flash = 80000000L -board_build.flash_mode = qio -; board_build.flash_mode = dio ;; try this if you have problems at startup -monitor_filters = esp32_exception_decoder +;; board = esp32-s3-devkitc-1 +;; platform = ${esp32s3.platform} +;; platform_packages = ${esp32s3.platform_packages} +;; upload_speed = 921600 ; or 460800 +;; build_unflags = ${common.build_unflags} +;; build_flags = ${common.build_flags} ${esp32s3.build_flags} -D WLED_RELEASE_NAME=ESP32-S3_8MB +;; -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 +;; -D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip +;; ;-D ARDUINO_USB_CDC_ON_BOOT=1 ;; -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") +;; ;-D WLED_DEBUG +;; lib_deps = ${esp32s3.lib_deps} +;; ${esp32.AR_lib_deps} +;; board_build.partitions = ${esp32.large_partitions} +;; board_build.f_flash = 80000000L +;; board_build.flash_mode = qio +;; ; board_build.flash_mode = dio ;; try this if you have problems at startup +;; monitor_filters = esp32_exception_decoder -[env:esp32s3dev_8MB_PSRAM_opi] +;; [env:esp32s3dev_8MB_PSRAM_opi] ;; ESP32-S3 development board, with 8MB FLASH and >= 8MB PSRAM (memory_type: qio_opi) -board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support -board_build.arduino.memory_type = qio_opi ;; use with PSRAM: 8MB or 16MB -platform = ${esp32s3.platform} -platform_packages = ${esp32s3.platform_packages} -upload_speed = 921600 -build_unflags = ${common.build_unflags} -build_flags = ${common.build_flags} ${esp32s3.build_flags} - -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 - ;-D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip - -D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") - ; -D WLED_RELEASE_NAME=ESP32-S3_PSRAM - -D WLED_USE_PSRAM -DBOARD_HAS_PSRAM ; tells WLED that PSRAM shall be used - -D WLED_USE_PSRAM_JSON -DALL_JSON_TO_PSRAM ; WLEDMM --> force all JSON stuff into PSRAM; gives more free heap -lib_deps = ${esp32s3.lib_deps} - ${esp32.AR_lib_deps} -board_build.partitions = ${esp32.large_partitions} -board_build.f_flash = 80000000L -board_build.flash_mode = qio -monitor_filters = esp32_exception_decoder +;; board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support +;; board_build.arduino.memory_type = qio_opi ;; use with PSRAM: 8MB or 16MB +;; platform = ${esp32s3.platform} +;; platform_packages = ${esp32s3.platform_packages} +;; upload_speed = 921600 +;; build_unflags = ${common.build_unflags} +;; build_flags = ${common.build_flags} ${esp32s3.build_flags} +;; -D CONFIG_LITTLEFS_FOR_IDF_3_2 -D WLED_WATCHDOG_TIMEOUT=0 +;; ;-D ARDUINO_USB_CDC_ON_BOOT=0 ;; -D ARDUINO_USB_MODE=1 ;; for boards with serial-to-USB chip +;; -D ARDUINO_USB_CDC_ON_BOOT=1 -D ARDUINO_USB_MODE=1 ;; for boards with USB-OTG connector only (USBCDC or "TinyUSB") +;; ; -D WLED_RELEASE_NAME=ESP32-S3_PSRAM +;; -D WLED_USE_PSRAM -DBOARD_HAS_PSRAM ; tells WLED that PSRAM shall be used +;; -D WLED_USE_PSRAM_JSON -DALL_JSON_TO_PSRAM ; WLEDMM --> force all JSON stuff into PSRAM; gives more free heap +;; lib_deps = ${esp32s3.lib_deps} +;; ${esp32.AR_lib_deps} +;; board_build.partitions = ${esp32.large_partitions} +;; board_build.f_flash = 80000000L +;; board_build.flash_mode = qio +;; monitor_filters = esp32_exception_decoder -[env:esp32s3dev_16MB_PSRAM_opi] -extends = env:esp32s3dev_8MB_PSRAM_opi -board_build.partitions = tools/WLED_ESP32_16MB.csv -board_upload.flash_size = 16MB +;; [env:esp32s3dev_16MB_PSRAM_opi] +;; extends = env:esp32s3dev_8MB_PSRAM_opi +;; board_build.partitions = tools/WLED_ESP32_16MB.csv +;; board_upload.flash_size = 16MB -[env:esp32s3dev_8MB_PSRAM_qspi] +;; [env:esp32s3dev_8MB_PSRAM_qspi] ;; ESP32-TinyS3 development board, with 8MB FLASH and PSRAM (memory_type: qio_qspi) -extends = env:esp32s3dev_8MB_PSRAM_opi -;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860 -board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support -board_build.arduino.memory_type = qio_qspi ;; use with PSRAM: 2MB or 4MB +;; extends = env:esp32s3dev_8MB_PSRAM_opi +;; ;board = um_tinys3 ; -> needs workaround from https://github.com/Aircoookie/WLED/pull/2905#issuecomment-1328049860 +;; board = esp32-s3-devkitc-1 ;; generic dev board; the next line adds PSRAM support +;; board_build.arduino.memory_type = qio_qspi ;; use with PSRAM: 2MB or 4MB [env:esp8285_4CH_MagicHome] board = esp8285 @@ -844,27 +883,26 @@ lib_deps = ${esp32s2.lib_deps} # custom board configurations # ------------------------------------------------------------------------------ -[env:esp32c3dev_2MB] -;; for ESP32-C3 boards with 2MB flash (instead of 4MB). -;; this board need a specific partition file. OTA not possible. -extends = esp32c3 -platform = ${esp32c3.platform} -platform_packages = ${esp32c3.platform_packages} -board = esp32-c3-devkitm-1 -build_flags = ${common.build_flags} ${esp32c3.build_flags} #-D WLED_RELEASE_NAME=ESP32-C3 - -D WLED_WATCHDOG_TIMEOUT=0 - -D WLED_DISABLE_OTA - ; -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual CDC USB - -DARDUINO_USB_CDC_ON_BOOT=0 ;; for serial-to-USB chip -build_unflags = ${common.build_unflags} -upload_speed = 115200 -lib_deps = ${esp32c3.lib_deps} -board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv -board_build.flash_mode = dio -board_upload.flash_size = 2MB -board_upload.maximum_size = 2097152 -; RAM: [== ] 20.6% (used 67496 bytes from 327680 bytes) -; Flash: [======== ] 77.9% (used 1224652 bytes from 1572864 bytes) +;; WLEDMM: use [env:esp32c3dev_2MB_M] (WLEDMM build environment) +;; [env:esp32c3dev_2MB] +;; ;; for ESP32-C3 boards with 2MB flash (instead of 4MB). +;; ;; this board need a specific partition file. OTA not possible. +;; extends = esp32c3 +;; platform = ${esp32c3.platform} +;; platform_packages = ${esp32c3.platform_packages} +;; board = esp32-c3-devkitm-1 +;; build_flags = ${common.build_flags} ${esp32c3.build_flags} #-D WLED_RELEASE_NAME=ESP32-C3 +;; -D WLED_WATCHDOG_TIMEOUT=0 +;; -D WLED_DISABLE_OTA +;; ; -DARDUINO_USB_CDC_ON_BOOT=1 ;; for virtual CDC USB +;; -DARDUINO_USB_CDC_ON_BOOT=0 ;; for serial-to-USB chip +;; build_unflags = ${common.build_unflags} +;; upload_speed = 115200 +;; lib_deps = ${esp32c3.lib_deps} +;; board_build.partitions = tools/WLED_ESP32_2MB_noOTA.csv +;; board_build.flash_mode = dio +;; board_upload.flash_size = 2MB +;; board_upload.maximum_size = 2097152 ;WLEDMM: see below ; [env:wemos_shield_esp32]