Driving 14000 LEDs

Hello!

I’ve been told to post here in order to get help, so here we are.

For the past three years, I have been working on a project that features 14000 LEDs.
They are divided in shorter strips, each portion has it’s own power injection and data line.

In late 2024 I learned about Pixelblaze project, and after struggling with different boards (RPico, Raspberry Pi Zero, ESP32, etc) I finally found the perfect solution for my project.

However, I am still stuck with some setup and even the documentation is not clear to me.
Especially this bit:

I’m confused. It says 6400 pixels per board, but the controller refuses to go over 5000?
Here is my issue: I have one board with one expansion board, but when I setup more than 5000 LEDs, this aera turns red and the animation stops.

Therefore, can a single Pixel blaze v3 drive 14K LEDs with 3 output expanders? (config A)
Or should I run 3 separate boards, one being the main, and each with their own expansion with under 5000 pixels?

Thank you for your time and help :slight_smile:

Sorry for the confusion on this.

tl;dr: For 14K pixels I would go with at least 14 Pixelblazes, handling up to 1000 pixels each, or twice the PB if you want higher frame rates.

Pixelblaze itself is limited to 5000 pixels, but the output expander can be fed data for more when used with other systems. Some people use them with computers or Raspberry Pi as a convenient way to interface with LEDs.

However, in either case you will probably run in to practical limitations that limit the total pixel count per expander.

The more pixels, the longer it takes to render and send an animation frame. The expander can only ingest data at up to 66K pixels/sec, and Pixelblaze can generate around 48K pixels/sec on average. In Pixelblaze, many patterns allocate memory per pixel, and could quickly run out of pattern memory and can’t run with higher pixel counts.

With 5000 pixels on a PB you might get around 10 frames per second (FPS) and for many patterns that would look unacceptable, but it depends on the animation and look you are going for. For slow moving gradient background type installs, 10 FPS might be perfectly fine.

For scaling up to larger installs like this, I would recommend adding more Pixelblazes in a sync group over adding output expanders. Assuming WS2812 data, you will be limited to around 33K pixels/sec per Pixelblaze without an output expander due to the data rate of the LEDs. If around 33 FPS is OK, you could run 1000 pixels per PB, or around 500 if you wanted 66 FPS. With 590 pixels, 56 FPS will look good.

Adding an expander to each could up to double the data rate limit to 66K pixels/sec, but you’d only get that for simpler patterns. On average, PB can generate around 48K pixels/sec depending on pattern complexity. Some render much faster, and some are slower. So on average you would get a marginal benefit going from 33K pixels/sec to 48K, and complex patterns may not see any benefit. So generally I would recommend throwing more PB at it for more consistently higher FPS.

When the leader has a sensor board, up to 10 followers have worked well in testing and are responsive to audio. Without a sensor board I’ve tested 32 followers, and some people have gone slightly higher than that. Your milage may vary based on wifi quality. There is a hard limit of 64 followers/peers, but I’m not aware of anyone testing closer to that number.

Yes to everything @wizard said. Practically speaking, with 3600 LEDs on a single strand, I get 10fps max and with an expander, I would barely get 20fps of wire speed. But truth is that most patterns run at 2 to 10fps due to limitations of the framework, so having faster wire output on a single PB isn’t really useful unless you write a very optimized demo that happens to run at wire speed. None of the 50 or so I tried, run that fast.

Also, as a heads up, using the master/slave config with multiple boards did not work well for me as they were out of sync. It’s fine if you’re running lines of 1D stuff going in different directions but you’ll be disappointed if you wanted synchronized output.