What is the max amount of Addressable LEDs per controller?
I often see this question pass by in the Discord server and online, how many LEDs can controller X handle? And well, it’s true, cannot keep adding more LEDs to a digitally addressable LED strip/string and get the same results, after a certain amount of LEDs you will start to visible slowdown or choppiness of the LEDs and effects, making the whole experience a lot less enjoyable. But generally this is because of a limitation in the LED protocol, not so much the controller!
So how many LEDs should you run per controller or rather, per channel of a controller?
This article is mainly oriented towards using ws281x protocol based LEDs (ws2811, ws2812b, ws2813, ws2815, sk6812, etc.) other type of LEDs
such as APA102/SK9822 have different characteristics and limits because of using a separate clock line.
I generally recommended to run between 500~600 ws281x LEDs per channel maximum
The reason you cannot add LEDs indefinitely to a single controller is because the most used LED protocol (ws281x) runs at a fix rate of 800kHz. That means the more LEDs you add, the slower each LED will get it’s update.
These are random numbers, not real –> Basically that means, if you have 10LEDs which could update at 100 updates per second 100hz/FPS, if you’d have 100LEDs each would only see 10 hz/FPS/updates per second.
How does that really work?
Diving into it a little bit deeper, as the great Phil Bolduc explained it on the Intermittent Technology Discord server, each pixel receives the data signal of the previous LED, processes this, strips off the first LED data (3 channels in case of RGB or 4 in case of RGBW) and then sends on the data signal to the next LED. This process repeats itself until there is no more LED data to send. That means all LED data for the whole strip is basically passed through the first LED on the strip.
The simplest explanation is that with the protocol having a fixed speed it takes about 30µs to update a single LED. That means we can update a maximum of 33.333 pixels per second at 1Hz/FPS. Now let’s see what that equates to if we want to have a higher FPS or Updates of the LED per second:
|Amount of RGB LEDs||FPS / Updates per Second|
Interesting, with that in mind, what are the maximum amount of LEDs we can run at either 42FPS or 60FPS?
|Amount of RGB LEDs||FPS / Updates per Second|
|793,6||42 (WLED default FPS)|
But the above mentioned rates are what is theoretically possible, there is always going to be a bit of extra overhead to take into account so let’s treat them as an absolute maximum speed that are possible.
RGB vs RGBW
Running RGBW Addressable LEDs means each LED takes up one extra channel of information vs just having RGB. So where the RGB version timing was 30µs per LED, since it’s using the same ws281x protocol that means the total time it takes to update an LED package is slightly longer, taking about 40µs:
|Amount of RGBW LEDs||FPS / Updates per Second|
|595,2||42 (WLED default FPS)|
Again the above mentioned numbers are the pure theoretical maximum and should be used with a little margin.
Desired visible framerate
Our eyes start to blends images together above 20 to 30FPS but changes in framerate are still very visible above that value for most people out there. WLED has a set internal rendering frame rate of ~42FPS to make sure all processing has time to complete. For our general recommendations we do still try to get close to the 60FPS barrier per channel, just to have a bit of overhead available.
Per channel, not per controller
My QuinLED controllers generally have multiple channels and the above limitations are per data output channel available on the board until another bottleneck (such as CPU) is encountered.
QuinLED-Dig-Uno with an ESP8266 I suggest to use max 1 channel
QuinLED-Dig-Uno with an ESP32 you can use 2 full channels
QuinLED-Dig-Quad with an ESP32 you can use 4 full channels
Unlimited controller data driving power?!
No, even an ESP32 has it’s limits but it depends on what you are doing with it. WLED is doing a lot of stuff in the background (Serve a web page, calculate effects and segments, etc.) which also cost CPU cycles. That means there are limits, according to the WLED wiki they have these suggestions:
- ESP32 can calculate about 65k-85k LEDs per second (that means 1000 LEDs @~70fps, 2000 LEDs @~35fps, 4000 LEDs @~18fps)
But it will really depend on the type of effects you are running. LEDs set to a solid effect or a very simple to compute effect would mean a higher total framerate then if they are all running complex effects in lots of segments.
Ok, lots of numbers, so what would I actually recommend?
- For the limits we are generally talking per channel!
- The limit is because of the ws281x protocol
- A different controller is going to have the same limitations
I generally recommended to run between 500~600LEDs per channel maximum. That will keep framerate above the default framerate of 42 within WLED with a little bit of margin to spare.
If you reach the 600LEDs (generally 10m/32ft) I would recommend cutting the data connection at the 10m point and hooking up the next strip with a separate data wire from a new data ports. Generally running longer data wires such as this should be no problem and using a controller with multiple data ports means you can seamlessly run the effects continuous as if it was a single LED strip over multiple ports!
(Expanding beyond that I’d recommend switching to 12v ws2811 per 3 addressable LED strips which would mean you could run much longer lengths of LED strip before running out of data “oomph”.)
This means the following recommendations:
- Total amount of LEDs for a QuinLED-Dig-Uno with ESP8266 divided over 1 or 2 channels = 500 LEDs
- ESP8266 can’t really handle larger amount of LEDs very well
- Total amount of LEDs for a QuinLED- Dig-Uno with ESP32 divided over 2 channels = 1200 LEDs (600 per channel)
- Total amount of LEDs for a QuinLED-Dig-Quad with ESP32 divided over 4 channels = 2400 LEDs (600 per channel)
Have more questions?
If you have more questions try and take a look around the website, especially in the digitally addressable LED section there are lots of articles which can help you in designing your own LED setup.
A good one would be the power injection livestream where you can learn how to budget power for a total setup but also determine the amount of injection points needed, how much power those will use and how to calculate what cable thickness you are going to need for those!
And you are always welcome on the Discord if you have more specific questions!