Skip to content

Conversation

@netmindz
Copy link
Member

@netmindz netmindz commented Feb 7, 2026

Summary of Changes: v4.4.5 → v4.4.8

🔴 High Impact for WLED

1. Wi-Fi Stability & Connectivity

This is the single biggest area of improvement and directly impacts WLED's core functionality:

  • v4.4.5: Fixed KRACK key reinstallation vulnerabilities (CVE-2017-13077 through CVE-2017-13082), fixed station connecting slowly to some APs, fixed modem sleep issues after scan
  • v4.4.6: Fixed SoftAP not verifying SSID of association requests, fixed Wi-Fi MAC not going to sleep, fixed beacon parsing with zero-length IEs
  • v4.4.7: Fixed esp_wifi_scan_start memory leakage, fixed beacon timeout after restart, fixed Wi-Fi stop taking too long in coexistence scenarios, fixed station no response after "m f null", fixed PSRAM causing DHCP failure in WAPI encryption mode, fixed AMPDU duration issues
  • v4.4.8: Fixed ESP32 unrecoverable "m f" issue, fixed AMPDU compatibility for some APs, fixed task watchdog triggered by esp_wifi_stop, fixed scan-while-connected causing loop beacon timeout, fixed WPA3-SAE memory leak, patched CVE-2023-52160 (PEAP authentication vulnerability)

WLED impact: Many users report Wi-Fi disconnection and connectivity issues (#4187). The "m f" fix alone is significant — this was a well-known unrecoverable crash on ESP32. Memory leaks in scan and WPA3 would affect WLED devices that reconnect frequently.

2. BLE Coexistence Fixes

WLED supports ESP-NOW and can run alongside BLE:

  • v4.4.5-4.4.8: Dozens of fixes for BLE+WiFi coexistence crashes, including fixed scan not restarting after WiFi interruption, fixed coexistence assert on ESP32, fixed memory leaks when BLE scan and other events coexist
  • v4.4.8: Fixed circular dependency issue on ESP32 coexistence, fixed loss of coexistence request events causing BT link disconnection

WLED impact: Users running audioreactive (which uses I2S/DMA) alongside WiFi would benefit. ESP-NOW stability would improve.

3. Ethernet Fixes

WLED supports Ethernet via esp32_eth build environments:

  • v4.4.6: Fixed ESP32 EMAC hang when stopped/started multiple times at 10Mbps, fixed Ethernet transmit when link was down
  • v4.4.7: Reduced "no mem for receive buffer" errors (multiple longstanding issues fixed)
  • v4.4.8: Fixed IP101 reset timing to align with datasheet

WLED impact: Directly relevant to #4502 (Fix Ethernet builds with V4). The EMAC hang and receive buffer fixes would improve Ethernet reliability.

🟡 Medium Impact for WLED

4. PSRAM Fixes (ESP32-S3 with PSRAM boards)

  • v4.4.5: Fixed Octal PSRAM detection on ESP32-S3, fixed PSRAM timing tuning for 80MHz Octal PSRAM
  • v4.4.6: Fixed SPI Flash concurrency under XIP_PSRAM, fixed Octal PSRAM timing tuning under low temperature on ESP32-S3
  • v4.4.7: Fixed PSRAM access failure after CPU-powered-down light sleep wakeup, fixed PSRAM crash due to wrong MSPI timing after frequency switching with DFS

WLED impact: WLED's ESP32-S3 builds with PSRAM (esp32s3dev_16MB_opi, esp32s3dev_8MB_opi) would directly benefit. WLED uses PSRAM for JSON buffers and LED data on S3 boards.

5. RMT Driver Fix

  • v4.4.5: Fixed some RMT LL functions not being inlined

WLED impact: WLED uses RMT for NeoPixel LED output, including a custom high-priority interrupt RMT driver (NeoEsp32RmtHIMethod). Inlining fixes could slightly improve LED output performance.

6. Power Management & Sleep

  • v4.4.6-4.4.8: Multiple sleep current fixes, fixed light sleep wakeup failures, fixed Fast/Slow memory loss in sleep on C3/S3, fixed watchdog timeout after light sleep wakeup

WLED impact: Users running WLED on battery-powered projects or with sleep features would see improvements.

7. NVS (Non-Volatile Storage) Fixes

  • v4.4.8: Fixed race condition during NVS Lock initialization, fixed buffer overrun in nvs_get_blob with inconsistent multi-page BLOBs

WLED impact: WLED stores settings, presets, and configuration in NVS. The buffer overrun fix is a potential crash/corruption fix.

8. Heap & Memory Management

  • v4.4.5: Heap component binary IRAM/DRAM usage decreased by ~40%, added better failure logging
  • v4.4.7: Added memory poisoning checks for integrity functions
  • v4.4.8: Fixed heap_caps_calloc size propagation to allocation failed hook

WLED impact: WLED is often heap-constrained. The 40% reduction in heap component footprint could free up valuable IRAM/DRAM. WLED has custom d_malloc/d_calloc wrappers that enforce minimum free heap.

🟢 Lower Impact but Notable

9. Security Fixes

  • v4.4.5: eFuse key burning bug fix for ESP32-C3/S3
  • v4.4.6: Hardware AES DMA descriptor memory corruption fix
  • v4.4.7: Anti-rollback security bypass protection, mbedTLS updated to 2.28.7
  • v4.4.8: mbedTLS updated to 2.28.8, CVE-2023-52160 (PEAP auth), CVE-2024-24746 (NimBLE DoS)

WLED impact: Important if WLED is deployed on networks requiring enterprise authentication or if using secure boot.

10. Peripheral Driver Fixes

  • I2C timeout fix (v4.4.8) — relevant for WLED I2C usermods (4-line display, sensors)
  • LEDC PWM 100% duty cycle fix (v4.4.7) — relevant if using PWM-based LED drivers
  • ADC oneshot mode fixes — relevant for audioreactive analog input
  • SDMMC card initialization fixes — relevant for file-based presets stored on SD cards

Summary & Recommendation

Category | Fixes (4.4.4→4.4.8) | WLED Relevance -- | -- | -- Wi-Fi | ~40+ fixes including "m f" crash, memory leaks, security CVEs | Critical BLE/Coexistence | ~80+ fixes across BLE controller, host, and coex | High (ESP-NOW, audioreactive) Ethernet | EMAC hang, buffer errors, PHY timing | High (Ethernet builds) PSRAM | Timing, detection, sleep interaction fixes | High (S3 PSRAM builds) Heap/Memory | 40% footprint reduction, crash fixes | Medium-High NVS | Race condition, buffer overrun | Medium Security | mbedTLS updates, CVE patches | Medium Sleep/Power | Multiple current and wakeup fixes | Medium Peripherals | I2C, LEDC, ADC, RMT fixes | Low-Medium

Summary of Changes: v4.4.5 → v4.4.8
🔴 High Impact for WLED

  1. Wi-Fi Stability & Connectivity
    This is the single biggest area of improvement and directly impacts WLED's core functionality:

v4.4.5: Fixed KRACK key reinstallation vulnerabilities (CVE-2017-13077 through CVE-2017-13082), fixed station connecting slowly to some APs, fixed modem sleep issues after scan
v4.4.6: Fixed SoftAP not verifying SSID of association requests, fixed Wi-Fi MAC not going to sleep, fixed beacon parsing with zero-length IEs
v4.4.7: Fixed esp_wifi_scan_start memory leakage, fixed beacon timeout after restart, fixed Wi-Fi stop taking too long in coexistence scenarios, fixed station no response after "m f null", fixed PSRAM causing DHCP failure in WAPI encryption mode, fixed AMPDU duration issues
v4.4.8: Fixed ESP32 unrecoverable "m f" issue, fixed AMPDU compatibility for some APs, fixed task watchdog triggered by esp_wifi_stop, fixed scan-while-connected causing loop beacon timeout, fixed WPA3-SAE memory leak, patched CVE-2023-52160 (PEAP authentication vulnerability)
WLED impact: Many users report Wi-Fi disconnection and connectivity issues (#4187). The "m f" fix alone is significant — this was a well-known unrecoverable crash on ESP32. Memory leaks in scan and WPA3 would affect WLED devices that reconnect frequently.

  1. BLE Coexistence Fixes
    WLED supports ESP-NOW and can run alongside BLE:

v4.4.5-4.4.8: Dozens of fixes for BLE+WiFi coexistence crashes, including fixed scan not restarting after WiFi interruption, fixed coexistence assert on ESP32, fixed memory leaks when BLE scan and other events coexist
v4.4.8: Fixed circular dependency issue on ESP32 coexistence, fixed loss of coexistence request events causing BT link disconnection
WLED impact: Users running audioreactive (which uses I2S/DMA) alongside WiFi would benefit. ESP-NOW stability would improve.

  1. Ethernet Fixes
    WLED supports Ethernet via esp32_eth build environments:

v4.4.6: Fixed ESP32 EMAC hang when stopped/started multiple times at 10Mbps, fixed Ethernet transmit when link was down
v4.4.7: Reduced "no mem for receive buffer" errors (multiple longstanding issues fixed)
v4.4.8: Fixed IP101 reset timing to align with datasheet
WLED impact: Directly relevant to #4502 (Fix Ethernet builds with V4). The EMAC hang and receive buffer fixes would improve Ethernet reliability.

🟡 Medium Impact for WLED
4. PSRAM Fixes (ESP32-S3 with PSRAM boards)
v4.4.5: Fixed Octal PSRAM detection on ESP32-S3, fixed PSRAM timing tuning for 80MHz Octal PSRAM
v4.4.6: Fixed SPI Flash concurrency under XIP_PSRAM, fixed Octal PSRAM timing tuning under low temperature on ESP32-S3
v4.4.7: Fixed PSRAM access failure after CPU-powered-down light sleep wakeup, fixed PSRAM crash due to wrong MSPI timing after frequency switching with DFS
WLED impact: WLED's ESP32-S3 builds with PSRAM (esp32s3dev_16MB_opi, esp32s3dev_8MB_opi) would directly benefit. WLED uses PSRAM for JSON buffers and LED data on S3 boards.

  1. RMT Driver Fix
    v4.4.5: Fixed some RMT LL functions not being inlined
    WLED impact: WLED uses RMT for NeoPixel LED output, including a custom high-priority interrupt RMT driver (NeoEsp32RmtHIMethod). Inlining fixes could slightly improve LED output performance.

  2. Power Management & Sleep
    v4.4.6-4.4.8: Multiple sleep current fixes, fixed light sleep wakeup failures, fixed Fast/Slow memory loss in sleep on C3/S3, fixed watchdog timeout after light sleep wakeup
    WLED impact: Users running WLED on battery-powered projects or with sleep features would see improvements.

  3. NVS (Non-Volatile Storage) Fixes
    v4.4.8: Fixed race condition during NVS Lock initialization, fixed buffer overrun in nvs_get_blob with inconsistent multi-page BLOBs
    WLED impact: WLED stores settings, presets, and configuration in NVS. The buffer overrun fix is a potential crash/corruption fix.

  4. Heap & Memory Management
    v4.4.5: Heap component binary IRAM/DRAM usage decreased by ~40%, added better failure logging
    v4.4.7: Added memory poisoning checks for integrity functions
    v4.4.8: Fixed heap_caps_calloc size propagation to allocation failed hook
    WLED impact: WLED is often heap-constrained. The 40% reduction in heap component footprint could free up valuable IRAM/DRAM. WLED has custom d_malloc/d_calloc wrappers that enforce minimum free heap.

🟢 Lower Impact but Notable
9. Security Fixes
v4.4.5: eFuse key burning bug fix for ESP32-C3/S3
v4.4.6: Hardware AES DMA descriptor memory corruption fix
v4.4.7: Anti-rollback security bypass protection, mbedTLS updated to 2.28.7
v4.4.8: mbedTLS updated to 2.28.8, CVE-2023-52160 (PEAP auth), CVE-2024-24746 (NimBLE DoS)
WLED impact: Important if WLED is deployed on networks requiring enterprise authentication or if using secure boot.

  1. Peripheral Driver Fixes
    I2C timeout fix (v4.4.8) — relevant for WLED I2C usermods (4-line display, sensors)
    LEDC PWM 100% duty cycle fix (v4.4.7) — relevant if using PWM-based LED drivers
    ADC oneshot mode fixes — relevant for audioreactive analog input
    SDMMC card initialization fixes — relevant for file-based presets stored on SD cards
    Summary & Recommendation
    Category Fixes (4.4.4→4.4.8) WLED Relevance
    Wi-Fi ~40+ fixes including "m f" crash, memory leaks, security CVEs Critical
    BLE/Coexistence ~80+ fixes across BLE controller, host, and coex High (ESP-NOW, audioreactive)
    Ethernet EMAC hang, buffer errors, PHY timing High (Ethernet builds)
    PSRAM Timing, detection, sleep interaction fixes High (S3 PSRAM builds)
    Heap/Memory 40% footprint reduction, crash fixes Medium-High
    NVS Race condition, buffer overrun Medium
    Security mbedTLS updates, CVE patches Medium
    Sleep/Power Multiple current and wakeup fixes Medium
    Peripherals I2C, LEDC, ADC, RMT fixes Low-Medium

Summary by CodeRabbit

  • Chores

    • Updated ESP32 platform and cores to a newer release for improved stability and compatibility.
    • Removed the automatic package manifest for the pixels_dice_tray usermod to avoid unintended inclusion in custom builds.
    • Adjusted an ESP-IDF compatibility workaround to cover a broader 4.4.x range.
  • Documentation

    • Added a guide describing BLE requirements and steps to build or re-enable the pixels_dice_tray usermod with BLE-enabled ESP32 builds.

Part 2: Arduino Core 2.0.9 → 2.0.17 Changes
Arduino Core 2.0.18 does not exist. The 2.x line ended at v2.0.17 (May 2024, based on ESP-IDF 4.4.7). The next release was v3.0.0 (May 2024, based on ESP-IDF 5.1.4), which is a major breaking change.

v2.0.17 (May 2024) — based on ESP-IDF 4.4.7
Fixed HWCDC firmware uploading — important for USB-CDC flashing on ESP32-S3/C3
Arduino Nano ESP32 board fix
v2.0.10 through v2.0.16
WLED explicitly warns against 2.0.10 through 2.0.14 in platformio.ini ("buggy so avoid them")
These versions introduced various regressions that affected stability
Summary of what changed between 2.0.9 and 2.0.17:
The primary change is the underlying ESP-IDF version moving from 4.4.4 to 4.4.7, carrying all the fixes described in Part 1 above.

Part 3: Impact Assessment for WLED
🔴 Critical Impacts (Stability/Crashes)
Xtensa register corruption fix (4.4.7) — Random crashes from a6/a7 register corruption during task context switching. WLED is heavily multitasked, so this is very relevant.
SPI Flash concurrency fix (4.4.6) — Could cause flash corruption when using PSRAM (many S3 builds).
AES DMA memory corruption (4.4.6) — Could cause crashes when using encryption (HTTPS/TLS).
esp_timer linked list corruption (4.4.6) — Could cause random crashes; WLED uses timers extensively.
🟠 High Impacts (WiFi/Networking)
WiFi fixes across all three versions — Beacon timeout, scan failures, modem sleep, fragment handling, DHCP, multicast. WLED's core functionality depends on WiFi.
LwIP fixes — TCP out-of-order handling, DHCP server subnet overflow, multicast forwarding. Directly affects E1.31, Art-Net, DDP protocols.
mDNS fix — WLED uses mDNS for device discovery.
🟡 Medium Impacts (Peripheral/Feature)
LEDC duty cycle 100% fix (4.4.7) — Directly affects WLED's analog (PWM) LED output. Previously couldn't reach full brightness.
I2S channel format/mono mode fixes — Affects audio-reactive WLED builds.
ADC clock divider fixes — Affects audio-reactive microphone input accuracy.
Ethernet fixes — Important for Ethernet-enabled WLED controllers (e.g., WT32-ETH01, QuinLED-ESP32).
UART fixes — Could affect DMX input/output.
Heap improvements — ~40% reduction in heap component IRAM usage; important since WLED is memory-constrained.
PSRAM timing fixes for ESP32-S3 — Better stability on S3 boards with OPI PSRAM.
USB Serial JTAG data loss fixes — Affects S3/C3 boards using USB-CDC for serial communication.
🟢 Recommendation
Upgrading from ESP-IDF 4.4.4 (Arduino Core 2.0.9) to ESP-IDF 4.4.7 (Arduino Core 2.0.17) would bring significant stability, security, and performance improvements to WLED. The most impactful areas are:

Random crash prevention (register corruption, timer corruption, flash concurrency)
WiFi reliability (dozens of fixes across 3 releases)
Analog LED output (LEDC 100% duty cycle fix)
Memory efficiency (heap IRAM savings)
ESP32-S3 stability (PSRAM, SPI flash, USB-CDC fixes)
However, WLED's note about Arduino Core 2.0.10-2.0.14 being "buggy" suggests that some intermediate versions had regressions. Moving directly to 2.0.17 (or the very latest 2.0.17 Tasmota fork) would be the safest path, skipping the problematic intermediate versions.

Alternatively, the project could consider moving to Arduino Core 3.x (ESP-IDF 5.x), but that's a much larger migration with breaking API changes across WiFi, BLE, GPIO, LEDC, and more (see the Migration Guide from v2.X to 3.X).

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 7, 2026

Walkthrough

Updates the ESP32 V4 PlatformIO environment reference, broadens an ESP-IDF version guard in audio code, adds BLE build guidance for the pixels_dice_tray usermod, and removes that usermod's library.json to avoid automatic inclusion.

Changes

Cohort / File(s) Summary
ESP32 V4 Platform Update
platformio.ini
Replaced V4 ESP32 platform URL: 2023.06.02/platform-espressif32.zip2024.06.00/platform-espressif32.zip; updated described Arduino core (2.0.9→2.0.18), IDF patch (4.4.4→4.4.8) and IPv6 wording.
pixels_dice_tray — BLE requirement doc
usermods/pixels_dice_tray/BLE_REQUIREMENT.md
Added new documentation describing BLE requirements, why library.json is disabled, custom build steps, platform constraints, and re-enable instructions.
pixels_dice_tray — manifest removal
usermods/pixels_dice_tray/library.json
Deleted library.json, removing declared dependencies/manifest so the usermod is not auto-included in standard builds.
Audio I2S IDF guard
usermods/audioreactive/audio_source.h
Adjusted ESP-IDF version conditional for the I2S left/right channel workaround from <= 4.4.6 to < 4.5.0 (broadens matched IDF 4.4.x range).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested reviewers

  • DedeHai
🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Upgrade platform to 4.4.8' is directly related to the main objective of the pull request, which upgrades ESP-IDF from v4.4.5 to v4.4.8, but it does not fully capture the broader scope of changes including BLE documentation and the I2S workaround extension.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

No actionable comments were generated in the recent review. 🎉


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@DedeHai
Copy link
Collaborator

DedeHai commented Feb 7, 2026

from the summary these look like good fixes to have, I have certainly seen my fair share of mysterious crashes due to core issues and am not opposed to any improvement. I am a bit cautious with espressif core issues as they are numerous and really hard to pinpoint (that strange DNS bug from #5332 just to mention one).

@softhack007
Copy link
Member

softhack007 commented Feb 7, 2026

Does the changelog say anything about the good-old "I2S left channel swap" bug?

Currently AR has the workaround active up to esp-idf 4.4.6 (=arduino 2.0.16), and a year ago i did a short test that confirmed the bug still existed.

If the bug still exists, the consequences will be easy to see: make a build with audioreactive included, configure any I2S microphone like the INMP441 or ICS43434. No sound = bug still exists.

In that case, extend this guard to include 4.4.8 (or simply change it to match any 4.4.x version)

#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0)) && (ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(4, 4, 6))

@softhack007
Copy link
Member

softhack007 commented Feb 7, 2026

@coderabbitai does the tasmota framework changelog say anything about the I2S swaped channel bug #5357 (comment) ?

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 7, 2026

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🌐 Web query:

Tasmota platform-espressif32 2024.06.00 changelog I2S

💡 Result:

There isn’t a Tasmota platform-espressif32 release/version 2024.06.00 to pull an I2S-specific changelog from. In Tasmota’s own release notes, 2024.06.00 is referenced as the ESP8266 platform update (i.e., platform-espressif8266), not ESP32. [1]

For the ESP32/I2S changes around that time window, the relevant entry is in Tasmota v14.1.0 (“Rachel”), which lists “ESP32 I2S audio improvements” (PR #21433) while the ESP32 platform at that point is noted as Core3 platform 2024.05.13 (not 2024.06.00). [2]

Sources:
[1] arendst/Tasmota v14.2.0 release notes (platform versions) — newreleases.io [1]
[2] arendst/Tasmota v14.1.0 release notes (“ESP32 I2S audio improvements” / Core3 platform 2024.05.13) — GitHub releases [2]


🌐 Web query:

ESP-IDF 4.4.8 I2S left right channel swap bug fix

💡 Result:

ESP-IDF v4.4.8 (legacy driver/i2s.h) doesn’t have a specific “L/R swap bug fix” patch you can apply; the usual “channels swapped” symptom is handled by configuration (or, for the internal DAC, by the fixed GPIO mapping).

Fix / workaround in ESP-IDF 4.4.8

  1. Flip the channel order in i2s_config_t.channel_format
    If your stereo stream is swapped, change:
  • I2S_CHANNEL_FMT_RIGHT_LEFTI2S_CHANNEL_FMT_LEFT_RIGHT
    (ESP-IDF shows channel_format as the control for stereo slot order in the v4.4.8 I2S configuration example.) [1]
  1. If you use the ESP32 internal DAC (I2S0): verify the fixed Left/Right-to-GPIO mapping
    In ESP-IDF, the built-in DAC mapping is:
  • Right channel → DAC1 → GPIO25
  • Left channel → DAC2 → GPIO26 [1][2]

So if you assumed the opposite wiring, it will appear “swapped” unless you re-route accordingly (or swap channels in software).

Sources:
[1] ESP-IDF v4.4.8 I2S Programming Guide (legacy driver, channel_format and DAC mode mapping) (docs.espressif.com)
[2] ESP-IDF I2S DAC mode mapping example (GPIO25/GPIO26 mapping) (docs.espressif.com)

Citations:


🌐 Web query:

Arduino ESP32 2.0.17 2.0.18 I2S channel swap fix

💡 Result:

I couldn’t find any published Arduino-ESP32 2.0.17 → 2.0.18 release-note item (or tracked PR/issue) that specifically says it fixes swapped I2S L/R channels—and the public GitHub “Releases” page content that’s readily accessible today mostly shows newer 3.x releases, not the old 2.0.18 notes. [1]

What you can do on 2.0.17 / 2.0.18 if your DAC output is L/R swapped:

  1. Fix it at the signal level (most common): invert WS/LRCLK
  • Many “channel swapped” reports are actually WS polarity mismatch (WS=0 meaning “left” vs “right”, depending on DAC expectations).
  • In ESP-IDF-style I2S configs this is typically a ws_inv / “invert WS” option (where available); Arduino’s higher-level wrapper may or may not expose it directly depending on which I2S API you’re using.
  1. Fix it in software: swap samples in your stereo buffer
  • If you write interleaved stereo, swap each (L,R) pair before write().
  1. Double-check you’re using the intended Arduino I2S API
  • Arduino-ESP32’s newer I2S wrapper uses begin(mode, rate, bits, ch, slot_mask) and “slots” terminology; make sure you’re not mixing old “legacy I2S.h” examples with the newer ESP_I2S APIs, because behavior/config defaults differ. [2]

Related: ESP-IDF docs also call out that some I2S data can appear “swapped” in certain mono/buffer-format cases (different problem than L/R stereo, but it often gets confused with “channel swap”). [3] And historically, people have observed L/R swap behavior with certain ESP-IDF baselines (e.g., PlatformIO note about IDF v4.0). [4]

If you share:

  • your exact board + DAC model (e.g., PCM5102A),
  • whether you’re using legacy driver/i2s.h or ESP_I2S / new I2S API,
  • and a minimal sketch,
    I can point to the exact knob (WS invert vs buffer swap) that matches your setup.

Sources:
[1] Arduino-ESP32 releases page (newer releases visible; older 2.0.18 notes not readily shown) https://github.com/espressif/arduino-esp32/releases
[2] Arduino-ESP32 I2S API (begin(..., ch, slot_mask) / slots) https://docs.espressif.com/projects/arduino-esp32/en/latest/api/i2s.html
[3] ESP-IDF I2S docs note about swapped data order in some mono cases https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/i2s.html
[4] PlatformIO community note about L/R swapped with ESP-IDF v4.0 baseline https://community.platformio.org/t/esp32-i2s-stops-working-when-building-with-arduino-and-esp-idf-framework/18164/2


🏁 Script executed:

#!/bin/bash
# Check the exact Tasmota platform URL being used in the PR
cat platformio.ini | grep -A2 -B2 "2024.06.00/platform-espressif32.zip"

Length of output: 367


🏁 Script executed:

#!/bin/bash
# Search for any I2S-related changes or mentions in the repository
rg -i "i2s.*swap|swap.*i2s|i2s.*channel" --type=cpp --type=h -C3

Length of output: 14553


@softhack007, based on my search of available documentation and the codebase analysis, I found no evidence that the I2S left/right channel swap bug has been fixed in IDF 4.4.8 or Arduino Core 2.0.18.

Key findings:

  1. Tasmota platform changelog: No specific I2S channel swap fix is documented in the available Tasmota platform-espressif32 2024.06.00 release information.

  2. ESP-IDF 4.4.8 documentation: The official docs still describe channel configuration workarounds but don't mention a fix for the swap bug.

  3. Arduino ESP32 2.0.17/2.0.18: No published release notes indicate a fix for the swapped L/R channels issue.

  4. Current workaround scope: The guard in usermods/audioreactive/audio_source.h (lines 66-95) currently covers IDF versions 4.4.0 through 4.4.6:

    `#if` (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0)) && (ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(4, 4, 6))

    This means IDF 4.4.8 will NOT have the workaround active, potentially breaking I2S microphone functionality.

Recommendation:

Your suggestion to extend the guard is correct. You should either:

  • Change the upper bound to 4.4.8: <= ESP_IDF_VERSION_VAL(4, 4, 8)
  • Or simplify to match any 4.4.x version: < ESP_IDF_VERSION_VAL(4, 5, 0)

As you mentioned, this can be verified by testing with an I2S microphone (INMP441 or ICS43434) – if there's no sound with the audioreactive build, the bug still exists and the workaround must be extended.


🧠 Learnings used
Learnt from: blazoncek
Repo: wled/WLED PR: 5140
File: wled00/data/settings_time.htm:66-76
Timestamp: 2025-12-01T07:01:16.949Z
Learning: In WLED PR `#5134`, the fix for macros being initialized with the enable bit set only handles new configurations, not existing ones. If there is a bug in timer/macro handling code (e.g., in settings_time.htm), it must be fixed to work correctly for existing configurations as well.

Learnt from: DedeHai
Repo: wled/WLED PR: 4798
File: wled00/FX.cpp:7531-7533
Timestamp: 2025-08-26T11:51:21.817Z
Learning: In WLED PR `#4798`, DedeHai confirmed that certain gamma-related calls in FX.cpp/FX_fcn.cpp/particle systems are intentional for effect-level shaping (e.g., brightness curves, TV sim, Pride 2015 pre-mix), distinct from final output gamma. Do not flag or remove these in future reviews; add comments when feasible to clarify intent.

Learnt from: DedeHai
Repo: wled/WLED PR: 0
File: :0-0
Timestamp: 2026-01-03T16:42:26.035Z
Learning: In WLED PR `#5267`, the bus allocation strategy for single I2S mode was changed: ESP32 now uses single I2S on bus 8 (the last bus, digitalCount=9) instead of bus 0; ESP32-S2 uses single I2S on bus 4 (digitalCount=5). Memory calculation logic must account for which specific bus uses I2S in single mode, not just check digitalCount <= 8.

Learnt from: blazoncek
Repo: wled/WLED PR: 4482
File: wled00/udp.cpp:147-149
Timestamp: 2025-02-19T12:43:34.199Z
Learning: ESP8266 and ESP32 platforms have different maximum segment name lengths in WLED, which can cause truncation when syncing segment names between devices. This platform difference affects the user experience when using the segment name sync feature.

Learnt from: netmindz
Repo: wled/WLED PR: 5093
File: wled00/util.cpp:1159-1182
Timestamp: 2025-11-20T00:04:04.829Z
Learning: In WLED PR `#5093`, the deviceId feature is designed for opt-in usage reporting that tracks only version/upgrade information (non-behavioral data), not user activity patterns. The deterministic salt approach (MAC + "WLED" + chip model/revision) is acceptable for this limited use case, as correlating MAC addresses to version history represents minimal privacy risk compared to behavioral tracking.

Learnt from: softhack007
Repo: wled/WLED PR: 0
File: :0-0
Timestamp: 2025-11-14T13:37:11.994Z
Learning: In WLED code reviews, when code is modified or added, look for "magic numbers" (hardcoded numeric literals) and suggest replacing them with appropriate defined constants when those constants are meaningful in the context of the PR. For example, the hardcoded value 32 should be replaced with WLED_MAX_SEGNAME_LEN when it represents a segment name length limit. This improves code maintainability and reduces the risk of inconsistencies.

@wled wled deleted a comment from coderabbitai bot Feb 7, 2026
It's very unlikely that this old bug will ever be fixed in any esp-idf 4.4.x release.
@softhack007
Copy link
Member

@netmindz I've extended the workaround.
In case that you have "no sound" with the new platform version, just revert my last commit.

*/

#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0)) && (ESP_IDF_VERSION <= ESP_IDF_VERSION_VAL(4, 4, 6))
#if (ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(4, 4, 0)) && (ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(4, 5, 0))
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice catch @softhack007

@softhack007
Copy link
Member

The change log sounds very good indeed.
I think that tasmota folks have continued to maintain arduino-esp32 v2.0.17.

Espressif basically "dropped the pen" on the 2.0.17 code in summer 2024, exactly at the moment when official support ran out. That's one of the reasons I never wanted plain 2.0.17. Plus I'm a bit cautious in general about espressif code, same as @DedeHai.

But let's give it a chance 😀 maybe the tasmota team managed to finish the job that espressif failed to do.

@DedeHai
Copy link
Collaborator

DedeHai commented Feb 8, 2026

I gave it a spin and did not notice any immediate oddities. It saves quite a lot of flash: 20k on the C3 and 17k on the ESP32 classic. RAM usage is different though: 2.4k saved on the C3, an addtional 1k used on the ESP32. Did not check S2 and S3. DNS queue (#5332) and WiFi scan (#5351) bugs are not fixed unfortunately.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants