LED strips are objectively pretty neat. They can create just about any color of light, tend to be quite bright, are flexible, can be waterproof, and come in a variety of lengths.
They’ve come down in price quite a bit too – you can get a 5m strip and a power supply online for under $30. Yet, these cheap versions behave very differently from more expensive strips like Adafruit’s Neopixels. What’s the difference?
See related product
How Do LED Light Strips Work?
In a standard LED strip, all the LEDs are connected to the same four busses. If you look closely, you may see “R” “G” and “B” written down the width of the strip, denoting the red, green, and blue busses. Depending on whether the LEDs themselves are common cathode or common anode, the fourth bus will either be power or ground. These busses run the entire length of the LED strip in such a way that the “R” at one end of the strip is always the same as the “R” at the other end. The control box for this type of LED strip is pulsing each color bus at the correct duty cycle to render the desired color. This means that while the strip can still render just about any color, all the LEDs will behave exactly the same as their neighbors.
Arduino LED Strip Controller
In an individually addressable LED strip, the LEDs each have a companion IC to give them independence and intelligence. In most Adafruit Neopixel products, this IC is embedded directly into the LED package. The finished product has the same four-pin package as most RGB LEDs, but instead of RGB+, these four pins are power, ground, data in, and data out. The “data out” feature is what allows the modules to be connected end to end in a strip or ring. The modules communicate using a single wire that is extremely dependent on timing. Real time processors like the Arduino handle this well, while a microprocessor like the core of a Raspberry Pi requires quite a bit of additional programming to accurately drive smart LEDs.
See related product
The single-wire communication method sends commands to as many or as few LEDs in a strip as desired. The processor generates a command like “LEDS 2, 4, and 32 turn red” that gets sent out on the single data line. The first LED sees the message but takes no action because it is LED 1 and simply passes on the message. LED 2 gets the message, turns red, and passes it on. This continues down through all the LEDs, even if there are more than 32 present. This cascade of data is why these strips cannot change color all at once like their static counterparts. The color information must be sent down the chain one pixel at a time, even if the data applies to all the LEDs. While this is not ideal for an application requiring instantaneous color changes, it can be exploited to create beautiful chasing or color morphing effects.
Feeling inspired? Grab an Arduino and some smart LEDs to experiment with individually addressable LEDs, or pick up some standard RGB LEDs and a power supply to create uniform washes of colored light.