Merge pull request #308 from MoonModules/flickerFixer_backport

WLED-MM backport of upstream wled#4980
RMT High-priority Interrupt driver - solves flickering problems on esp32, esp32-S2 and esp32-S3

do not use the new RMTHI driver on old V3 builds (especially esp32dev_compat)
upgrade all esp32 builds to NeoPixelBus 2.7.9 (we can't go higher due to API incompatibilities)
This commit is contained in:
Frank Möhle
2026-01-09 16:23:10 +01:00
committed by GitHub
8 changed files with 1349 additions and 32 deletions

View File

@@ -253,7 +253,8 @@ lib_deps =
fastled/FastLED @ 3.7.1 ;; needed to prevent compiler errors when using newer framework versions
;; https://github.com/softhack007/FastLED.git#ESP32-C6 ;; patched version needed for -C6
IRremoteESP8266 @ 2.8.2
;;makuna/NeoPixelBus @ 2.7.5 ;; WLEDMM will be added in board specific sections
;;makuna/NeoPixelBus @ 2.7.9 ;; WLEDMM will be added in board specific sections
;;makuna/NeoPixelBus @ 2.8.3
https://github.com/Aircoookie/ESPAsyncWebServer.git#v2.4.2
bitbank2/AnimatedGIF@^1.4.7
https://github.com/Aircoookie/GifDecoder.git#bc3af189b6b1e06946569f6b4287f0b79a860f8e
@@ -301,6 +302,7 @@ build_flags =
-D NON32XFER_HANDLER ;; ask forgiveness for PROGMEM misuse
-D WLED_DISABLE_PARTICLESYSTEM2D
-D WLED_DISABLE_PIXELFORGE ;; not enought space in flash
-D WLED_USE_SHARED_RMT ;; don't use the RMTHI driver (not compatible with esp8266)
;; special library dependencies for 8266 (workaround for upsteam #5136) - replaces env.lib_deps
lib8266_deps =
@@ -318,6 +320,7 @@ lib_deps =
makuna/NeoPixelBus @ 2.7.5
${esp8266.lib8266_deps} ;; use proven library versions for 8266
lib_ignore =
NeoESP32RmtHI
;; compatibilty flags - same as 0.14.0 which seems to work better on some 8266 boards. Not using PIO_FRAMEWORK_ARDUINO_MMU_CACHE16_IRAM48
build_flags_compat =
@@ -331,6 +334,7 @@ build_flags_compat =
-DVTABLES_IN_FLASH
-DMIMETYPE_MINIMAL
-DWLED_SAVE_IRAM ;; needed to prevent linker error
-D WLED_USE_SHARED_RMT ;; don't use the RMTHI driver (not compatible with esp8266)
;; this platform version was used for WLED 0.14.0
platform_compat = espressif8266@4.2.0
@@ -354,6 +358,7 @@ build_flags = -g
-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
-D WLED_USE_SHARED_RMT ;; don't use the RMTHI driver (not compatible with esp-idf v3.x)
;; -D CORE_DEBUG_LEVEL=5 ;; enable core debug messages
;; -DDEBUG -DWLED_DEBUG ;; enable WLED debug messages
lib_deps =
@@ -363,6 +368,8 @@ lib_deps =
makuna/NeoPixelBus @ 2.7.5
;; makuna/NeoPixelBus @ 2.7.9 ;; experimental
${env.lib_deps}
lib_ignore =
NeoESP32RmtHI
monitor_filters = esp32_exception_decoder
board_build.partitions = ${esp32.default_partitions} ;; default partioning for 4MB Flash - can be overridden in build envs
default_partitions = ${esp32.default_partitions} ;; backwards compatibility
@@ -430,8 +437,7 @@ build_flagsV4 = -g
;;; V4.4.x libraries (without LOROL_LITTLEFS; with newer NeoPixelBus)
lib_depsV4 =
esp32async/AsyncTCP @ 3.4.7
makuna/NeoPixelBus @ 2.7.5
;; makuna/NeoPixelBus @ 2.7.9 ;; experimental
makuna/NeoPixelBus @ 2.7.9 ;; experimental
${common_mm.HUB75_lib_deps}
${env.lib_deps}
@@ -465,8 +471,7 @@ build_flags = -g
default_partitions = tools/WLED_ESP32_4MB_1MB_FS.csv
lib_deps =
esp32async/AsyncTCP @ 3.4.7
makuna/NeoPixelBus @ 2.7.5
;; makuna/NeoPixelBus @ 2.7.9 ;; experimental
makuna/NeoPixelBus @ 2.7.9 ;; experimental
${env.lib_deps}
board_build.partitions = ${esp32.default_partitions} ;; default partioning for 4MB Flash - can be overridden in build envs
monitor_filters = esp32_exception_decoder
@@ -500,10 +505,10 @@ build_flags = -g
-DARDUINO_USB_MODE=0 ;; this flag is mandatory for ESP32-S2 !
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
;; ARDUINO_USB_CDC_ON_BOOT
; -D WLED_USE_SHARED_RMT ;; un-comment to use the standard RMT driver instead of RMTHI
lib_deps =
esp32async/AsyncTCP @ 3.4.7
;; makuna/NeoPixelBus @ 2.7.5 ;; standard
makuna/NeoPixelBus @ 2.7.9 ;; experimental - reduces LED glitches on -S2
${env.lib_deps}
board_build.partitions = ${esp32.default_partitions} ;; default partioning for 4MB Flash - can be overridden in build envs
@@ -527,12 +532,14 @@ build_flags = -g
-DARDUINO_USB_MODE=1 ;; this flag is mandatory for ESP32-C3
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
;; ARDUINO_USB_CDC_ON_BOOT
-D WLED_USE_SHARED_RMT ;; don't use the RMTHI driver (not compatible with -C3)
lib_deps =
esp32async/AsyncTCP @ 3.4.7
makuna/NeoPixelBus @ 2.7.5
;; makuna/NeoPixelBus @ 2.7.9 ;; experimental
makuna/NeoPixelBus @ 2.7.9 ;; experimental
${env.lib_deps}
lib_ignore =
NeoESP32RmtHI
board_build.partitions = ${esp32.default_partitions} ;; default partioning for 4MB Flash - can be overridden in build envs
monitor_filters = esp32_exception_decoder
@@ -556,10 +563,10 @@ build_flags = -g
-DCO
;; please make sure that the following flags are properly set (to 0 or 1) by your board.json, or included in your custom platformio_override.ini entry:
;; ARDUINO_USB_MODE, ARDUINO_USB_CDC_ON_BOOT
;-D WLED_USE_SHARED_RMT ;; un-comment to use the standard RMT driver instead of RMTHI
lib_deps =
esp32async/AsyncTCP @ 3.4.7
makuna/NeoPixelBus @ 2.7.5
;; makuna/NeoPixelBus @ 2.7.9 ;; experimental
makuna/NeoPixelBus @ 2.7.9 ;; experimental
${env.lib_deps}
board_build.partitions = ${esp32.large_partitions} ;; default partioning for 8MB flash - can be overridden in build envs
monitor_filters = esp32_exception_decoder
@@ -810,26 +817,31 @@ board_build.flash_mode = dio ;; some boards do not boot with the faster "qio" mo
;; ; board_build.flash_mode = dio ;; try this if you have problems at startup
;; monitor_filters = esp32_exception_decoder
;; only for testing.
;; [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
;; ESP32-S3 development board, with 8MB FLASH and >= 8MB PSRAM (memory_type: qio_opi)
;; board = esp32-s3-devkitc-1 ;; generic dev board; the next lines add PSRAM support
;; board_build.flash_mode = qio
;; 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}
;; ; -DCORE_DEBUG_LEVEL=0
;; ;;-DNDEBUG ;; removing this flag leads to a massive flood of runtime warnings from NeoPixelBus 2.7.9
;; 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
;; ; -DCORE_DEBUG_LEVEL=5
;; ;;-DWLED_DEBUG ; -DDEBUG
;; ; -D WLED_USE_SHARED_RMT ;; RMTHI causes interrupt watchdog reset - needs more investigation
;; -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_opi
;; -D BOARD_HAS_PSRAM -D WLED_USE_PSRAM ; tells WLED that PSRAM shall be used
;; -D WLED_USE_PSRAM_JSON -D ALL_JSON_TO_PSRAM ; WLEDMM --> force all JSON stuff into PSRAM; gives more free heap
;; lib_deps = ${esp32s3.lib_deps}
;; ${esp32.AR_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]
@@ -1295,7 +1307,9 @@ platform_packages = ${esp32_legacy.platform_packages}
build_unflags = ${esp32_legacy.build_unflags}
build_flags = ${common.build_flags} ${esp32_legacy.build_flags} ${common_mm.build_flags_S} ${common_mm.build_disable_sync_interfaces}
lib_deps = ${esp32_legacy.lib_deps} ${common_mm.lib_deps_S}
lib_ignore = ${common_mm.DMXin_lib_ignore} ;; requires V4 framework
lib_ignore =
${common_mm.DMXin_lib_ignore} ;; requires V4 framework
${esp32_legacy.lib_ignore}
upload_speed = 460800 ; or 921600
;; new V4 platform
;;platform = ${esp32.platform}
@@ -2735,6 +2749,7 @@ lib_ignore =
OneWire ; not needed as we don't include USERMOD_DALLASTEMPERATURE
U8g2 ; not needed as we don't include USERMOD_FOUR_LINE_DISPLAY
${common_mm.animartrix_lib_ignore} ;; Tips our memory usage over the limit
${esp32c3.lib_ignore}
; RAM: [== ] 22.1% (used 72408 bytes from 327680 bytes)
; Flash: [======== ] 83.5% (used 1313420 bytes from 1572864 bytes)
@@ -2819,7 +2834,9 @@ build_flags = ${common.build_flags} ${esp32c3.build_flags}
-D WLED_USE_MY_CONFIG
;-D WLED_DEBUG -D SR_DEBUG
lib_deps = ${esp32c3.lib_deps} ${common_mm.lib_deps_S}
lib_ignore = IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation
lib_ignore =
IRremoteESP8266 ; use with WLED_DISABLE_INFRARED for faster compilation
${esp32c3.lib_ignore}
monitor_filters = esp32_exception_decoder
; RAM: [== ] 22.5% (used 73740 bytes from 327680 bytes)
; Flash: [==========] 96.3% (used 1515336 bytes from 1572864 bytes)