RGB LED strips: an overview

An addressable RGB LED strip is like a one pixel high color screen. You can do awesome things with them: crazy lighting effects, information displays and even low resolution video. There are many different types of RGB LED strips on the market. Here is an overview of addressable led strips I evaluated for Stripe. I’ll tell you a bit about different controller chips, electrical specifications and software libraries to help you make a choice.

LPD8806 RGB LED strip hooked up to Arduino

LPD8806 addressable RGB LED strip hooked up to an Arduino

What is an addressable RGB LED strip?

An addressable RGB LED strip is a long flexible strand of LEDs each of which can be individually set to a certain color (hence: addressable). By varying the level of red, green and blue (RGB) per LED many color combinations can be made. The chips between the LEDs listen to commands from a controller. This can be an Arduino or other microcontroller or a controller specifically designed for LED strips.

The strips come in various configurations. Some run on 12V, others on 5V. Some are splittable every two LEDs, others every three. There are different levels of waterproofing (for outdoor or underwater use) and a varying number of LEDs per meter. The list below is grouped by controller chip.


Most addressable LED strips you find in stores will be based on the HL-1606 chip. They are cheap and ubiquitous. Every HL1606 chip controls two RGB LEDs, so most of these strips will run on 5V and be splittable every 2 LEDs. Good news so far.

HL1606 demo by majorgray3. Nice colors, but no smooth fading or transitions.

For the bad news I only have to quote two fellow bloggers: “I swear the HL in hl1606 stands for hell” (waitingforbigo.com) and “My experiences with the HL1606 are awful” (Marcus from Interactive Matter). Although an Arduino library for the HL1606 is available it is a pain to use. Hooking it up requires four lines. The chip is very simple: it offers only two brightness levels. If you want fading or color mixing, you will have to do it in software.

  • Easily available: you can probably buy HL1606 LED strips in a store near you
  • The HL1606 chip has low power consumption
  • ‘Dumb’ hardware: you’ll have to program some smart software to get the strip to do what you want


The WS2801 is a “3-Channel Constant Current LED Driver With Programmable PWM Outputs”. It allows you to adjust the brightness of every LED in 256 steps using PWM. A WS2801 chip controls three channels, so you need one chip for every RGB LED. Theoretically this means the WS2801 strips can be cut next to every LED, but I haven’t seen any strips where this is the case. The chip runs on 3.3-5.5V.

Strips based on the WS2801 are available at SparkFun where they cost $45 for a meter at the time of writing.

  • Smart controller with easy control scheme
  • 8 bits, 256 levels per channel, 16.7 million colors total
  • English datasheet available
  • Expensive


The LPD8806 is a lot like the WS2801 with the following differences: it works from 2.7V up and has six channels allowing it to control two RGB LEDs. The downside is that it only does 7 bit PWM, making 127 brightness levels per LED for up to 21 bit color (2 million colors). There are no English datasheets available and the protocol description is not open. Luckily the folks at Adafruit reverse engineered the protocol and released a LPD8806 Arduino library.

LPD8806 set to white

It costs $35 per meter at Adafruit.

  • Easy to interface: one data and one clock line
  • Only a tiny bit more expensive than HL1606 strips
  • No English datasheet available
  • No protocol specification available: the code library has been reverse engineered so the implementation is probably not optimal


The three LED strip controllers listed above are the ones you will most easily find. In the future we might see LED strips using controllers from Texas Instruments, NXP or Macroblock providing more brightness levels, lower power consumption and other features. For now, I’ve chosen to use the LPD8806 strips for Stripe as they provide a nice balance between features and cost.

Liked this post? Follow @studiomenting on Twitter.

18 Responses to “RGB LED strips: an overview”

  1. Daniel Garcia

    Check out the library in my website above – it lets you switch between different chipsets by just changing an option – then you can worry about writing your high level led code without worrying (too much) about chipset specifics.

    I accidentally broke ws2801 support in my last update, I should have a new update soon that fixes that and adds support for a few more chipsets as well (tm1804 and D7001, most likely).

    The library, fairly efficiently, handles the PWM for you for the hl1606, so you can get multiple color levels with it. For 40 leds, I get somewhere between 24-36 color levels using ~75% of the CPU time to manage the color. Obviously, using something like the ws2801 or the LPD8806 would give you more cpu for what you want to do.

    Also – something to be careful about with ws2801 strips (though, not the ones from spark fun). Some places will put 1 ws2801 per -3- rgb leds. I got a roll of leds and was disappointed to discover that my led ‘pixels’ actually involved 3 rgb leds, not 1 rgb led.

    Anyway – good luck with this project! It reminds me that I have an led clock project that I should get back to at some point :)



  2. David

    Thanks Daniel. I actually came across your library when researching which strip to choose. The abstraction layer provided by libraries like yours make it easy to pick different strip types. It also makes them a lot easier to use.

  3. LeoneLabs

    Great writeup and a valuable comparison. How bout one another one the pixel strands?… Total Control Lighting, Adafruit, Bliptronics, etc…

  4. ethan

    the WS2801 has a few technical shortcomings in comparison but is very available, common, supported, etc and will remove the guess-work for you if you’re working on something where that’s important. In brief comparison you’ll have to run a WS2801 at less than a quarter the refresh rate of a LPD8806 (2Mhz vs 8Mhz, plus a 500uS latch time on the WS2801) but it does full 24-bit color instead of the LPD8806′s 21-bit. I recently bought WS2801 from http://www.bestlightingbuy.com/ws2801-addressable-rgb-led-strip.html for only 129 buck per reel.

  5. Tony McFall

    I just ordered a 30m lpd8806 strip from a China manufacturer. I was pleasantly surprised at the results. These are the exact same strips found on Adafruit for less than 1/2 of the cost.The company I ordered from is http://www.gree-leds.com/.

  6. Tom Sepe

    Is there a source to get the bare LPD8806 chip?

    I’d like to build a custom RGD led addressable strip

  7. Owen DeLong

    You can get the bare LPD8806 chips from http://www.gree-leds.com as well as the strips. They appear to be the OEM for the LPD8806 chips and the 5050 LEDs used in the strips as well as the source virtually everyone else buys these strips from.

    They are willing to sell in small quantities, though you have to jump through some hoops and pay them via either Western Union or Bank Transfer. If you use Bank Transfer, they expect you to pay not only your own fees, but their bank fees, too, so be prepared for that. (I went with WU so only one side fees, but still added $25 to the tab). They take payment in USD, so at least you don’t have to worry about conversion loss to RMB.

    I haven’t received my order yet, but I don’t expect it for a few weeks yet. So far, they have been very responsive and quite pleasant to deal with.

    I’m also asking them if they will make the protocol and datasheet available in English.

  8. Kai Henzler

    I have a WS2801 as well as a LPD8806 at home (each 1m long)
    Is it possible to chain those two strips together or will i run into problems if I do so?

  9. David

    @Kai: chaining the two is not possible because the protocols are different.

  10. deere

    I got some rgb led strips off ebay and I now have two 16.5 foot strips running together with a amplifier in between the two strips but the first two foot on the first strip is a different color than the end on the first strip and the second strip of 16.5 foot is totally different than the first strip altogether how can I fix this????

  11. Jduffy

    Just a quick note to anyone trying to use 8806 LEDs without the prebuilt libraries, since I couldn’t find anything on this while I was trying to use them.
    It acts much like a shift register, shift in at least 8 bits worth of 0s, then, shift each color, in GRB order, out, starting with the nearest LED, to the farthest. Each color is 8 bits, but the first bit is ALWAYS a 1, (this indicates to the controller that it is a color, not a “reset” byte).
    For example, to set 4 LEDs, one to white, two to black, the third to blue, and the fourth to green, send this:
    0xFF,0xFF,0xFF,//first LED to white
    0×80,0×80,0×80,//second to black
    0×80,0×80,0xFF,//third to blue
    0xFF,0×80,0×80 //fourth to green (remember, it goes G,R,B)

Leave a Reply