Hacked LED Christmas Lights

[Robert] wanted more out of his GE Color Effects G-35 LED Christmas lights. He reverse engineered and then hacked the protocol the lights use to communicate so that he can control each bulb. A 26-bit frame contains a 6-bit address, an 8-bit brightness value, and a 12-bit color value. The daisy chain topology of the data bus allows for modular bulbs with addresses enumerated during the startup of the string of lights. With this information, a 5 volt capable microcontroller is able to control a whole string of these lights with a refresh rate of up to 24Hz. In this case, [Robert] used an ATtiny13A microcontroller to control the string of lights. You can see a video of them in action after the break.

Also taken apart and analyzed, were the wireless transmitter and receiver that came with the lights, revealing a cheap ISM band receiver and transmitter module pair. Perhaps they will be useful for another project. We look forward to seeing people put these hacked lights to use throughout the year.

[via Make]


35 thoughts on “Hacked LED Christmas Lights

  1. Would this be a decent project to do when starting to learn the Arduino? I’m not very good with programming it yet and this looks to be along the lines of what I’d want to accomplish with it right now.

    I don’t know how to address each bulb is the only problem. :/

  2. Darc’s effort occurred in parallel with some people over on DIYC (linked above). None of the people involved were aware of each other except the two on DIYC prior to Darc’s post. I think a while bunch of people attacked these strands at the same time. They were a juicy target.

    CPN (cost per node) is reasonably decent, the only better CPN I’ve seen for strands (as opposed to “centralized dimming” approaches using a PCA9635 or similar central dimming IC for multiple RGB nodes) is for Asian imports of WS2801-based nodes from Aliexpress. (Difficult and may get seized by customs).

    However these particular strands have some annoying issues, namely the fact that adjusting the brightness more than one step at a time causes them to glitch. :(

    So it’s good availability with OK cost for individually addressable RGB strands ($60/50 nodes at Costco, $78/50 nodes at Lowes, sold out in many places already), but with some technical limitations.

  3. @CGross – check out the guys article, it explains addressing each bulb pretty well. If I did it, I’d use a Basic Stamp II that I have laying around, but I suppose any microcontroller would work well… Crap, a PLC would even work, never see those used on Hackaday.

    Maybe someone knows, but after reading Darc’s article, do you have to write your own custom protocol or is there a way to use a serial signal? I’d rather not reinvent the wheel.

  4. Nice work!

    Their implementation sounds extremely similar to the open-source RGB LED platform (Das Blinkenlichten – http://tim.cexx.org/?p=453 ) I released a few years ago, right down to the self-clocking one-wire protocol, start/end conditions, address grouping, etc. Blinkenlichten is GPL’ed and <$1USD/node from readily available parts, but of course, that doesn't count your time to assemble it.

    Looks like they went for a 24- vs. a 16-bit frame, and higher color resolution ;-) (I limited my project to a more modest 729 colors to make it fast/simple enough to implement on a 34-cent PIC10 without glitches, but it is pretty smooth in practice.) Any idea what chip/core they are using in each LED node?

  5. “If you plan to control the string using a … 3.3-volt microcontroller), be aware of the voltage difference. I haven’t tried driving the data line at 3.3 volts, but I wouldn’t be surprised if it had some problems, especially with the last few lights in the string.”

    Since each ‘bulb’ has a micro in it, taking the data line in as digital and repeating the signal on its output, each bulb would essentially act as a data repeater.

    I would guess they draw the power from the +5V line somehow to retransmit the output, so it would only be 3.3V until the first bulb.

    Theoretically, you could splice several of these strings together. If you’re making your own controller, there’s no reason you can’t address up to 64 lights per string.

  6. He says the bulbs only honor addresses up to 42.

    As for 3v3, if that’s a problem (which it probably isn’t) just invert the drive signal and use a NPN transistor with pullup resistor to drive the string.

    This is an awesome find for animated displays of a certain type. I’m about to go shopping.

  7. Trebu – from the sounds of it, these strands are already sold out at Costco, and at my local Lowes (More expensive – $78 instead of $60 for a 50-count strand) the 50-count globes are gone too. I bought one set but had to return it due to a defect.

    My guess is the 36-count icicle strands will be gone before Lowes discounts them. (The 36-count icicles are the same price as the 50-count G-35s – $78)

    Caleb Craft – The bliptronics strips do indeed have a lower CPN and more flexibility, however it’s basically bare emitters on a strip. These include faceted covers to make them appear like Chrstmas lights.

    I’ve seen individually addressable RGB strands from aliexpress for as low as 50-60 cents/node plus shipping, however that is for unknown quality and the shipping can get nasty.

    jcprojects – The timing of these is such that you would not be able to use a serial port directly. You could, however, feed serial data into a microcontroller which can drive this custom protocol.

    Do note that if you read through the threads, these strands appear to have a pretty nasty limitation – they glitch if you try to change brightness in more than single increment/decrement amounts. This’ll kill your refresh rate if you want to independently fade nodes.

  8. Can someone describe the “glitch”?

    I can’t imagine it being so bad that you can’t generate a given random setting for all 50 lights within one or two seconds, if not less.

    Regardless, migrating toward a given setting might be a nice effect.


    1. I assume you mean DMX, in which case the answer is yes, but you’ll need something in-line to do the conversion. I have had DMX working on PIC 16F628, but any device with a 9 bit compatible USART should work. There is some example code online that works with MikroElektronika’s MikroC compiler, which I used to put my DMX project together.

  9. Oh boy, I can’t even spell… Sorry all… Attention those who approve these posts, please delete the previous post. I don’t want to publicly what an idiot I am. I will repost next with proper spelling… Thanks


  10. Hello, I am not a programmer or a real tech savvy type. I do have 6 strands of these GE lights and I’d like to know if there is a dummy guide how to repogram these. Or if someone would be willing to put something together that I could just plug/splice/etc into my lights. Any ideas?

    Thanks for any help.


    1. I gave up on finding the GE lights. Instead I opted for these:
      I have not gotten around to it yet, but they should be controllable from an Arduino:
      I suspect the GE light to be somewhat similar. Well, not in protocol but probably in a general sense.

      From what I recall, the GE lights were a bit difficult to gradually change. But here are the hackaday.com articles on people hacking them. Surely one of them has enough detail for you to get started:




  11. We have three sets of GE Color Effects LED Christmas lights that have been spliced together. They work fine until you unplug them from the power source and the plug them back in. After that, one section won’t light up. In other to make it work again we have to unsplice then resplice them to get the back working. We are using 16-14 gauge insulated disconnect pairs to ‘splice’ them. Any suggestions would be great.
    Thanks, Amy

  12. (I’m thinking not many people follow these old threads as this one is from an article HAD published a year ago. It might be better to start a new thread in the HAD forums under something like “help me hardware”.)

    Regardless, when you say “splice” are you actually connecting the power and data lines from one string to the next? I’m not sure that will work. People have said these bulbs come up (power up) w/no addresses. And that the first thing the controller does is to enumerate the bulbs. If the controller thinks there are only 50 bulbs then why would it send out more than 50 enumeration commands?

    These comments are based on this article:

    -good luck

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.