Skip to content

Technical Advices

Jean-Baptiste Le Coz edited this page Oct 29, 2023 · 5 revisions

Pixels

INFO : 288 pixels is an upper limit : big assembly, just a few bitmap in the 3Mb flash and Neopixels are too slow for 288 pixels.

Bigger is better, but not always :

  • Size : More pixels means a longer assembly and an assembly too long is painful to transport and to use. I use a 2m assembly and i find it already too big...

  • Power : More pixels means more amps and more amps means a big battery. With my 120 pixels assembly and an USB power bank, it will shut down if i power all the led at full brightness...

  • Weight : Not the weight of the assembly, but the weight of the bitmap that grows pixels square. So with too many pixels, the storage (3Mb) and the processing power of the ESP8266 will suffer...

In my opinion, the best assembly measure 1 m to 2 m. So with 144 pixels/m, it will be between 144 pixels and 288 pixels with an ideal of 200 pixels (1.4 m long).

Delay

INFO : I call delay the time in ms between the render of two consecutive line of the bitmap.

The "ideal delay" only depend on the density of your LED strip (30, 60 or 144 pixels per meter) and your speed. You can have a 3 m long assembly or a 1 m long, it's the same "ideal delay" as long as the LED strip have the same density and you keep the same speed.

I will consider a standard walking speed at 4 km/h = 1.11... m/s.

  • 30 pixels/m : You need to anime (30 pixels/m) * (1.11... m/s) = 33.33... pixels/s. So the "ideal delay" would be (1000 ms) / (33.33... pixels/s) = 30 ms/pixel

  • 60 pixels/m : You need to anime (60 pixels/m) * (1.11... m/s) = 66.66... pixels/s. So the "ideal delay" would be (1000 ms) / (66.66... pixels/s) = 15 ms/pixel

  • 144 pixels/m : You need to anime (144 pixels/m) * (1.11... m/s) = 129.6 pixels/s. So the "ideal delay" would be (1000 ms) / (129.6 pixels/s)= 7.7 ms/pixel

Those "ideal delay" are good starting value to find your own "ideal delay".

Performance

INFO : I call performance fastest time in ms the bitmap can be render and precision the strict timing between the render of two consecutive line of the bitmap.

I try my best to keep the best performance and precision while adding lot of feature for a small ESP8266. The library NeoPixelBus was a game changer with good performance and an inbuilt animator for precision.

I have run some test for a bitmap of 200 x 356 pixels at full speed on an ESP8266 at 160Mhz :

  • Dotstarts(APA102) :
Horizontal Cut Off Horizontal Cut Off No Horizontal cut
Vertical Cut Off 464 ms 466 ms 460 ms
Vertical Cut Color 465 ms 467 ms 459 ms
No Vertical cut 586 ms 588 ms 578 ms

(588 ms) / (356 pixels) = 1.65... ms/pixel.

Conclusion : ImagePainting is fast and precise even with 144 pixels/m that require an "ideal delay" of 7 ms/pixel. 200 pixels is easily handle with Dotstarts.

  • Neopixels(WS2812) :
Horizontal Cut Off Horizontal Cut Off No Horizontal cut
Vertical Cut Off 2375 ms 2375 ms 2376 ms
Vertical Cut Color 2375 ms 2375 ms 2376 ms
No Vertical cut 2376 ms 2376 ms 2376 ms

(2376 ms) / (356 pixels) = 6,67 ms/pixel.

Conclusion : ImagePainting is just fast enough with 144 pixels/m that require an "ideal delay" of 7 ms/pixel and the precision may suffer. 200 pixels is the upper limit with Neopixels.