Lots of Blinky! ESP32 Drives 20,000 WS2812 LEDs

20,000 LEDs sounds like an amazing amount of blink. When we start to consider the process of putting together 20,000 of anything, and then controlling them all with a small piece of electronics the size of a postage stamp, we get a little bit dizzy.

To be fair, we’re not sure that [yves-bazin] has put together 20,000 LEDs yet, but he HAS demonstrated the feasibility of driving 20k LEDs all at once thanks to some editing of the FastLED I2S library and hardware GPIO expansion. The trick is in using a shift register to convert a single ESP32 pin into five outputs. Using sixteen GPIO pins, with each connected to a HC595 shift register, and all of them connected to the same 17th and 18th GPIO pins for latch and clock, those sixteen outputs are expanded to 80 outputs, which are used to drive strips of 256 WS2812s, yielding 20480 LEDs controlled. The shift register method allows the ESP32 to operate at five times the speed of the LED strip, so it can push out the bits on each pin for five strips, latch, and then repeat for each bit for 256 LEDs, then start over for the next frame.

[yves-bazin] hasn’t yet built the full 20,000 pixel display, though his videos do show off a 6,000 pixel video wall, but he’s able to demonstrate that his concept is working by plugging a smaller panel into each of the outputs successively to show that the correct signal is still making it out of the ESP32 for all 80 strips, at an impressive 130 fps.

The demonstration video is on reddit. Using the 74HC595 shift register for GPIO expansion is nothing new, and we’ve seen an ESP8266 with shift registers for 157 lights, but using it to control 20k LEDs is pretty impressive, especially now that there’s a library for it for ESP32. Bring your sunglasses.

17 thoughts on “Lots of Blinky! ESP32 Drives 20,000 WS2812 LEDs

  1. okay… interesting project.
    I wonder though, how much current would 20000 LEDs draw? At 18mA per LED, that would mean a 360A?!?
    But seriously now, demonstration shows the principle works with squared paper, I wonder if it would work with lined paper too?
    Anyhow, I’m very curious about the end result and usage of this project.

      1. Cold Cranking Amps does NOT relate to steady-state power availability.

        Your typical lead-acid starting battery, which have around 50 AH capacity at a 10-20 hour discharge rate, would be flat in under 5 minutes, if it could last that long before the plates melted down.

        1. Might not actually be a horrible idea…. How often do you sustain a full-bright-full-white output? CCA availability could help with peak current draws, as long as your charging/supply setup can output well above average power consumption in practical use. Might also keep you within standard 15A 120V supply circuit limitations, which could be a huge benefit, and maybe worth the complication of dealing with battery maintenance.

    1. That’s 670A at 5VDC, which is “only” 3350W, or 29A at 115VAC, not including conversion and resistance losses. If you plan carefully and use quality PSUs and cables, you may be able to power it all off two 20A 115VAC breakers (assumes US power grid).

      It’s feasible, but would take careful planning. You’re better off using conservative estimates at each step and over-engineering it a bit to avoid a meltdown when you least want it.

      Where I see the greatest potential here is if it could accept E1.31 (aka Streaming ACN) to act as a receiver for xLights or Falcon Player (FPP). Even with less output lines, it could rival some of the commercial controllers out there at significantly lower cost.

      1. There is in fact an ArtNet library and a SACN library for the ESP-32 out there. There isnt much documentation on the SACN library so I’m playing with the ArtNet library first. You are correct though, this is an absolute game changer cost-wise, compared to commerically available options.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.