Hooking up multiple serial expander boards

Hello, I wanted to check on a couple of things about the serial expansion board.

  1. Will using more than 1 serial board help frame-rate?
    I understand the data line is saturated with my current config. I have 8 16x16 panels running from 1 serial board. 1 panel of 256 WS2912B LEDs per channel. These panels seem slow when you load up more than about 1000 per PB. Will splitting the panels across two expansion boards improve the frame rate?

  2. Other than setting the address via the jumper, do the boards just get hooked up to the same PB output in parallel? then configured by address in the PB setting. Or do i daisy chain them by using one of the outputs from the board ID0 / Ch0 to drive Board ID1?

  3. what about if i wanted to use multiple expansion boards with the processing plug-in? is that supported would it work? how would that be wired up? the USB serial/TTL leads connected in parallel to both boards - set to different IDs?


Using the default “New Pattern” pattern on a PB3, I get about 30fps driving 2048 pixels spread evenly across 8 channels of an expansion board. As you mentioned, it is pretty much saturating communications.

It’s the speed of the serial communication (200000 bits/sec) to the output expander that’s the limiting factor here, so adding another board to the same serial output won’t change things much.

To get maximum throughput with the Processing library, run each output expander board on its own USB->Serial port, with the number of LEDs roughly equal on each board. The board IDs can all stay at 0. See the “ManyLights2Ports” example for a setup like this. (It’s the first thing you see in the video - 1732 LEDs of various types hooked at random to two expander boards on two serial ports.)

Although I’m still doing new features, and haven’t worked optimization yet, with ExpanderVerse, I’m getting roughly 50 fps from a single expansion board with 1000 LEDs of mixed type attached. And the frame rate stays constant if you add another port driving another 1000-pixel setup.

1 Like

Ah - ok thanks – was hoping the limiting factor was the input io bandwidth on the expander input and there was some magic so the expanders could share the output port based on the IDs.

RE: ‘new pattern’ why that’s such a great benchmark! I see the same with that config so probably not much else to do other than curate the patterns and learn how to optimize.

I’ve got a long way to go to get your solution going, but planning to try. At this point, have really only identified, “processing” is an environment/software framework of some form to go learn more about.

Processing is a java-like language that runs everywhere at this point. p5.js is a javascript port of it (not identical, but similar)

Yep, the theoretical max bandwidth of the expander data stream is currently about 66k pixels/sec. This is slightly higher than the average pixel calculation rate of V3 (varies by complexity of course) of about 48k pixels/sec, so I haven’t prioritized supporting higher data rates.

However, I have verified that the MCU used in the newer models of expander boards could theoretically support twice that, handling up to 4Mbps data or about 132K pixels/sec.

1 Like