I got some of these addressable LED curtains a while back with the intention of taking them apart and seeing how hackable they are. Turns out the answer is very hackable!
The one I got is 2m x 2m with 400 LEDs - that’s a lot of LEDs!
Looking at the power supply my initial thought was that these were just typical WS2818B addressable LEDs as the power supply was the standard 5V.
However, there’s something pretty interesting about these LEDs. I’m very used to the 3 pin addressable LEDs, you have the two power pins - 5V and GND - and you have the two data pins - Din and Dout.
You typically daisy chain the LEDs together, the Dout from each LED connects to the Din of the next LED.
To get the LEDs to light up you just push all the serial data into one end of the chain of LEDs and then wait for a short delay. Each LED then latches whatever serial data it last saw on it’s Din pin. It’s a pretty simple clever 1 wire serial protocol.
What struck as slightly odd with this LED curtain is that I could only see three wires going down each strand of the curtain. And the bottoms of the strands did not connect to the next strand.
So I could not work out how the LEDs could be chained together. Looking closely all the data pins are connected as a bus, there’s no daisy chaining at all - how could this possibly work?
It turns out that these LEDs are pre-programmed with their position on the string - they receive all the data for all the LEDs, but they know which bit of data is relevant to them. It’s pretty bonkers - I’ve no idea how this is done in the factory where the curtains are constructed, but I assume they get a long string of pre-programmed LEDs with preset lengths and then chop them up for the curtains.
I did find a pretty interesting GitHub issue on the WLEDs project where some people have managed to get pretty nice photos of the LEDs
I managed to extract the control PCBs and it’s pretty simple.
The main brains is an ST17H66B this is a Bluetooth Low Energy system on chip. The antenna for it is the wiggly line on the PCB.
It drives the LEDs via this buffer IC (SN74LVC1G125) which level shifts the output from the MCU’s 3.3V up to 5V.
Interestingly, they’ve got an option for not populating this IC and bypassing it - maybe for smaller curtains it’s not needed.
Looking at the output on the oscilloscope we can see what looks like typical WS218B waveforms.
We have a burst of data - this is the RGB data for the LEDs - followed by a gap - followed by another burst of data. The gap is what tells the LEDs to latch and display the current data.
So, these LED curtains should be easily hackable and we should be able to drive them using the popular WLED firmware.
So I flashed one of my ESP32s and connected up the LED curtain - and it works!
What’s more, we can use WLEDs in 2D grid mode and get all sorts of cool patterns to come out.
All in all a pretty successful hack. There’s a lot more detail in the video - go take a look now!
I thought I saw some of them use four wires, so assumed there was a return path from the bottom of the strand back up to the top of the next strand.
I had also suspected they use standard WS2811 RGBIC strands like https://www.aliexpress.us/item/3256804447608449.html and have a small chip in each tee-junction that sends Din down the strand but strips off the first 480 pulses (8bit/color * 3color/pixel * 20pixel/strand) before sending it over to the next tee. I've been exploring making something that does that using a CMIC or µC.
I just got a few 200-LED fairy strings, and now I'm wondering if I have standard RGBICs or what they're calling CDPs.