Ceiling LED ring with 1024 WS2812B LEDs - ESP32 + WLED + occasional random flicker at full brightness

Hi everyone,

After three weeks of soldering and debugging, I finally finished my biggest LED project so far: a circular ceiling ring using exactly 1024 individually addressable WS2812B LEDs (20 m of 60 LEDs/m strip, cut and re-connected into a perfect circle).

Hardware setup:

  • MCU: ESP32 DevKit V1 (38-pin)
  • LEDs: 20 m 60 LEDs/m WS2812B (5 V, bought 2024 batch)
  • Power supply: Mean Well LRS-350-5 (5 V 350 W / 60 A) + 2000 µF 16 V capacitor at PSU output
  • Power injection: every ~3 m (≈180 LEDs), 10 AWG silicone wire directly from PSU bus bars
  • Level shifter: 74AHCT125 (4 channels) between ESP32 and first data line
  • Firmware: Latest WLED 0.14.4 (compiled with PlatformIO) + Sound Reactive branch for testing

The good news: It works beautifully at 50–70 % brightness, WLED effects are smooth, Hyperion screen capture sync is perfect, and the room looks like a spaceship at night.

The problem (only at 90–100 % white brightness):

  • Every 20–90 seconds I get one or two random LEDs flashing white for a single frame, or sometimes a short “glitch wave” across 5–10 LEDs.
  • Happens only when global brightness ≥ 90 % and color is pure white or very bright colors.
  • If I limit current to 85 % in WLED, the issue disappears completely.

Things I already tried:

  • Added 470 Ω resistor on data line after level shifter
  • Added 100 nF decoupling caps near every power injection point
  • Twisted data + GND together
  • Shortened data line to < 20 cm between ESP32 and first LED
  • Different USB cable / separate 5 V for ESP32 logic
  • Changed WLED brightness limiter from 255 → 220 (problem solved but I lose brightness)

My questions to the experts here:

  1. Is this most likely still a power issue even with 350 W PSU and heavy power injection?
  2. Could it be ESP32 GPIO not driving the first LED reliably at high current draw? (I’m using GPIO16)
  3. Any recommended settings in WLED (ABL, current limit, etc.) to keep full brightness without glitches?
  4. Has anyone successfully run >1000 LEDs at full white on a single ESP32 without artifacts?

Thanks in advance!#wled #ws2812 #esp32 #fastled #power-injection

I doubt it would do any good there.The cap belongs close to the LED strip, to prevent destructive inductive spikes from the power wiring entering the strip.
Same for the termination resistor, close to the first LED.
Leo..

Have you tried the WLED recommended set-up

You might want to probe the voltages there.
Measure the strip voltage in the middle of injection points while driving the strip at max brightness. Measure also the level shifter HV voltage.
According to datasheet the data line voltage shouldn't be more than supply voltage + 0.5V.
Could cause issue here if you have big voltage drop on supply.
Personally never experienced that kind of problem though.

That would normally speaking be my guess. There is of course a chance of it being a software bug.
To find out one way or the other i would send the signal to only about half of the LEDs and see if the problem disappears at full brightness. If so then it is most definitely a power issue.

That should suffice, and is a PSU from a reputable vendor. There is some disparity between WS2812B power consumption. The more recent Chips are using a maximum of 36mA per LED, but before that they were rated at 60mA per LED. The latter would indicate that your PSU doesn't provide enough. If so the test i described before should give you an indication.

There should be those on the strip already, but you could add something like a 470uF Cap at every power insert.

That won't help

That only deteriorates the signal a bit more, but it is anyway not the issue.

Probably, but i have experienced something similar when using a large LED structure, where i ended up coming to the conclusion that the power-lines started acting as an antenna and the glitches were caused by a rather big and powerful WiFi router. Still in that case it should also happen at lower brightness.

No. Not only do you pass it through the level shifter (btw does that have a de-coupling capacitor right next to it) but also the WS2812b leds have a logical input and the current draw on the datapin is negligible.

I am a bit puzzled by the pin recommendation in this though.

I am not quite sure what method they actually use to generate the signal, i know they did inquire with Makuna Neopixelbus for some added feature, but looking through the SRC of the library it did not show me straight away what is their method. But an ESP32 does not really have any restrictions on the pin use except that some have internal pullups since they are strapping pins, and some pins are input only, and on a 38-pin devkit, some of the pins aren't usable at all ( GPIO 6 - 11, no idea why they are exposed) But anyway GPIO 16 should work just fine, although it is also the default Rx pin for UART2 but that should not be relevant.

I have a 2560 led matrix-board and i control that with an ESP32 and no artifacts. Powered with 2 PSUs 60A + 30A but fully separated by use of MAX485 transceivers into 2 sections, controlled with the Neopixelbus 8x parallel method, maximum of 680 pixels per output (i use 4 of them) for the sake of keeping the framerate high i do not support more than 4 universe per output.

There is still a chance your PSU may anyway be the cause. We have had issues with PSUs that caused glitches when powering leds within (80% of) their spec, but those were cheap 9and at some point fairly old) PSUs
Super annoying though when trying all sorts of stuff to get rid of a glitch only to find out the PSU was the problem.

This might be from writing "out of bounds" of the array. Use code to verify all addressed LEDs are inside the array before writing to the array.

Then there is the problem I once had... with all that power moving from PSU into LED strip, the heat could be enough to un-do some soldering. Verify your solder joints. Weak joints could cause more resistance and more heat, which could cause flexing of the joints and restricted power and data.

One thing I had problems with is when the processor updated the output I got a flash. I found that by turning on the onboard LED each time I updated it. I am assuming all of the LEDs flicker, not just a few.