board/ORIGIN.md

4.3 KiB

WLED is a very good firmware to control LEDs such as the WS2812b. Just get a cheap ESP32 development board, flash WLED using the web installer, and off you got. I did that very often, and for small projects it's fine. But for larger projects with multiple devices, you encounter some limitations:

  • you have to separately take care of the power supply: LED strips can draw a lot of current which the development board cannot handle
  • remote control using ArtNet over WiFi can be problematic: WiFi routers don't all handle broadcast well, WiFi coverage is not always good, WiFi is jittery
  • providing power to multiple device can be a pain: there is not always a power plug nearby

this project tries to solve these issues, and since I designed a board, provide even more features

bus

The first problem is WiFi:

  • ESP32 operate on 2.4 GHz, a crowded spectrum
  • ESP32 board with built-in antenna have poor reception
  • WiFi router don't always handle broadcast well

This make the WiFi a poor interface to remotely control LEDs with multiple WLED (using ArtNet or similar) in a real-time manner (low latency and jitter).

The first solution would be to use Ethernet instead of WiFi. This would keep the networking capability. ESP32 supports this interface, and the WT32-ETH01 makes it available. But to connect multiple devices you need a Ethernet switch, and run wires from this switch to each device (e.g. is a star topology). I wanted to be able to chain the devices, to increase the distance while reducing number of cables and their length.

You could use the KSZ8863 3-port Ethernet PHY. This can act as Ethernet interface for the ESP32, and built-in switch. Now the boards can be chained. There is already schematic available, but the support still is in beta, and the implementation is complex are not inexpensive.

I also thought about CAN bus. This is a very resilient bus, and the ESP32 has an interface for it. But WLED does not support it yet, and the host would need a bridge for it.

Finally I arrived to RS-285. It's another differential protocol, often used in the industry because resilient. And the implementation in WLED is easy because it's just serial. This is when I remembered that DMX512 also uses RS-485. And DMX is the de facto standard in the lighting event world. Thus, interfacing with it will be very easy and there is a lot of software support. The limitation is that it supports only one universe of 512 channels, or 170 RGB LEDs. A solution would be to control modes instead of individual LEDs.

intended use case

The purpose is to provide a simple board able to control LEDs strips. It should be better than general purpose development boards. A built-in voltage converter allows driving an LED strip using regular external power supplies. It is intended for small installations, not requiring more than 5 meters of LED strings per device. This keeps the power supply small. The board is not intended for large LED installation requiring a lot of power.

The board should be cheap enough to be a default choice when creating a small LED installation. The goal is under 10€ per board. This prevents me for using Ethernet network, since the PHY and magnetics are expensive (~ 3€).

It should not require a complex installation. Something like a LAN requiring a permanent switch or router is already too much. The board should be able to work on its own.

It should make it easy to create multi-device installations. This is enabled by the chaining capability. You can connect one device to another, and the job is done. This single link provides power. This allows using a single power supply for the whole installation, just connected to one device in the chain. It should use cheap and common cable for the chain link, such as Ethernet cables.

It should accept common off the shelves power supplies, such as 12-24V 2-4A bricks.

The chain link should also allow synchronising the devices, without requiring a network connection. Ideally it should also provide an interface to reliably remotely control them. For that it uses the DMX512 protocol.