LED wireless project - feasible? Has it been done before?

I was thinking for a distributed LED project, like LED Christmas lights over a long run, you can maintain a good framerate of >35 fps as long as you keep it down to about 700 or so LEDs per pin.

I was thinking then that you could have ten little runs of 700 LEDs all controlled each by an ESP32 and each ESP32 syncs its time over wifi and gets the "data" of what to display. So it'd get a color packet and a clock time to start.

Since each receiver would get a packet of about 3K of color data per frame, at 30 frames per second, or 100K per second. That's 10mbit.

Wouldn't that saturate the wifi pretty quick? Seems like 10 of them would be 100mbit and that'd fill up your typical home wifi. Or is my math wrong?

Given Apple can Airplay my 4K laptop to my 4K TV at full speed I should be able to run some Christmas lights. But does it look feasible, and has it been done before?

Thanks,
Dave

The way you propose doesn't sound feasible. For starters you won't get anywhere near good enough synchronisation between the ESP32 devices (each of which would have to handle the full data flow).

And what do you mean with "700 LEDs per pin"? That's gotta be one serious driver you put on that pin! Sounds like a single strand of LEDs to me (a single pin won't be able to do more than that anyway).

With the intelligent 5V RGB LED strips you need up to 60mA per LED, or 42A @5V for 700 LED. Do you have such power supplies, and do you know how to dimension and route the wires that bring 42A to such a LED strip?

For it to work, your going to need to sync the ESP32s to at least within one frame, so 33mS.

Have you been able to do this over WiFi ?

Are you using ws2811 ic or similar? Is that what you mean?

Yes, WS2812B. And no, I'm not POWERING the leds through the circuit.

What I was thinking was a series of 1M strips. Power would be injected at each strip. Data would be controlled by an ESP32 controlling about 1K leds. It can do that at at least 20 frames per second.

The big unknown, as noted, is synchronization. I got an NTP client up and working and can't verify the accuracy but on paper, if you have a local NTP server you can get accuracy as good as one millisecond.

Hi,

I don't think accuracy will be your problem, it will be synchronization.
I would get a four or five ESP32 and try them out, without all the LEDs, to see how well you can sync them over a WiFi network.

You need to do a POC, Proof Of Concept, experiment.

You may need to add a SD card to each with the LED display script on it and just use the WiFi for syncing only.

Tom... :slight_smile:

Assumptions:
1.) Library: FastLED
2.) Initiate all LEDs with a specific color
3.) Shift colors down the strip

Rather than flooding the bandwidth RGB, I would have colors predefined in each ESP; next, I would have a 2-dimensional array in each esp (at minimum, the master) - ledstrip [LEDnum] ; or, one could use JSON; in the slave, use switch to determine the color. Once the master has given the initial color instructions to the slaves, the slaves would perform the sync instructions for shifting the colors down the strip.

leds[xpos+1] = leds[xpos]

Start with the last slave. After each LED in that strip has been shifted, the slave would get the color of the last LED in the previous strip to place in esp slave leds[0]. After performing the last shift of the strip, I would send a byte to the previous strip (via master?) to begin its shift operation of the previous strip.

[EDIT]
In place of ESPs as slaves, I would recommend NRF modules paired with an arduino with a small footprint; use the ESP as a master to control your display.

For synchronisation part, you have to get really clever.

First of all: buffering. Have frames arrive ahead of time. This allows for retransmissions.

Then the actual synchronisation is probably best done wired (I assume the processors are quite close together, as it's a single project). One of the ESP32s acts as the timing master, set a pin to output, use that as a simple clock signal for the others. As you have just a few ESP32s you can easily connect all to the same wire (up to a few meters total wire should be perfectly fine). Those just look at that pin, and on rising (or falling) edge they display the next frame.

Then all you have left is to make sure they're displaying the correct frame, that can be done using e.g. a second line (providing a "start" signal), or by having your clock signal off, sending a "new sequence starting!" kind of command over the WiFi, and then just start when the first clock signal comes in.