Synchronized Control of GE Color Effects G-35 LED Light Strings

Jay discovered this blog entry by a fellow Christmas hacker going by “Darco” the other day and pointed me to it. We both felt the potential for hacking this thing together with an Arduino and my Light Sequencer Program, EverSequence, was pretty cool, so we ran over to Costco and bought two strings each. (Unfortunately, one of Jay’s conked out shortly after he plugged it in and then they were sold out – oh well, he can probably get a new one for half the price next season 🙂

Anyway, Darco has reversed engineered the protocol that drives these things and blogged about it.  Another guy, Scott Harris, also ported his Atmel driver code to the Arduino and posted it here.  Well, since I already have my now-much-improved Sequencer driving an Arduino to control the LED’s on my Christmas Light Suit, adding a little support for colors, dimming, and a plugin to control the G35 through an Arduino was not a huge leap.

First, I modified Scott’s code to accept a simple protocol that I will send via USB serial port from the plugin for my Sequencer.  The protocol involves sending 5 bytes in a single command packet to set bulbs at address X to a given intensity:

.XIRGB“, where:
.” is ascii period character,
X is a byte representing the light number to address (between 1 and XMAS_LIGHT_COUNT),
I is a byte representing intensity (usually 0xCC), and
RGB are bytes representing red, green and blue intensity levels (between 0x00 and 0x0F)

So, “2E 00 CC 0F 0F 0F” would turn all bulbs assigned an address of 0x00 bright white.  The Arduino code is here.  As specified by the G35 protocol, at startup the bulbs must each be enumerated consecutively and assigned a bulb address. Normally, Darco and Scott’s code assigns addresseses 1-50, but in my case, I want many bulbs to be addressed by one Sequencer channel, so I modified the code a bit.  I set XMAS_LIGHT_COUNT lower – to 5 in my case – which causes the init routine to use addresses 0x00 through 0x04 and assign the same address to every 5th bulb. This way I reduce the number of commands I have to generate, but can still easily produce chaser patterns or turn all bulbs to a given color level with only 5 packets.  I also set the serial port to a high baud rate, 115200kbps, for lots of throughput.

This protocol is easily tested once you load the code into the Arduino by editing a file using a hex editor to put in a 5 byte packet, then using a terminal program like Hyperterminal to send the file to the Arduino. I cut the middle (data) line coming out of the controller on the G35 string and put a earphone jack inline. Then I connected an earphone plug to ground and Digital-Out-4 on the Ardiuno (which the protocol coverter software uses as the out pin).  That way, I can plug the Arduino in and use it – or revert back to the out-of-the-box controller.

Next, I wanted to take advantage of the dimming abilities. To date, EverSequence only supported on/off, since it was only driving relay boards and simple on/off triacs on my light suit, cape and scepters.

Dimming enhancement to EverSequence spans

Fortunately, I’ve kept the code design on this thing relatively clean (after a couple of refactorings), so enhancements like this are not too overwhelmingly difficult. After an evening or two, I had basic dimming support added, with the ability to set a color, and ramp-up and ramp-down rates settable via sliders.  I wrote a new Sequencer driver plugin to talk to the Arduino running the protocol conversion code. This was quite easy, since I’d already written one to talk to the Arduino for the light suit setup.

The biggest enhancement to the code was ramping up or down (dimming). I did this using two .Net System.Timers that fire at (roughly) 25 millisecond intervals during the ramping periods, sending packets with the corresponding intensities. So, for example, a ramp-up that lasts .4 seconds results in 16 packets being sent, each 1 increment brighter. I had some initial trouble getting it to work, until I realized my stupid mistake – a cut and past error had me using no parity, instead of even.  Also, I found that when I had controls on more than one channel firing, the bytes they each sent were getting jumbled up, resulting in completely wacky behavior. That was easily fixed by synchronizing the serial buffer send code, sendBuf(byte[]).  Once that was done, it pretty much worked like a charm! It’s still a bit glitchy, as others have commented generally regarding the G35, but it works more than well enough to have a lot of fun with.

One more enhancement I want to make to the Sequencer is to support “fading down” to a

Running a chaser pattern

color other than black, permitting a cross-fade from one color to another. After that, I’ll post the latest program, as well as my plugin code. Here is video of EverSequence running a simple pattern and driving the string through an Arduino Uno.

Andy Coulson (aka AustinLightGuy)

This entry was posted in Christmas, Technical. Bookmark the permalink.

24 Responses to Synchronized Control of GE Color Effects G-35 LED Light Strings

  1. Pingback: Behold, the networked christmas light controller in an altoids tin! « adafruit industries blog

  2. JC Molina says:

    Hello! I was looking at your page on the Ge color (LED) lights.. I bought 4 boxes of 50 lights the other day and i wanted to “Hack” the same way you did but I dont have this knowledge of lights and was wondering if you could make a very easy how to video on how to do basic programing! If not can you further help me with my lights! I would be willing to pay for the help!

    Thanks JC

    • I’m putting something together – including a version of my sequencer software that will drive the G35’s via an Arduino. It may not include a video, but I’ll at least have a some pictures and diagrams and links to software. I’ll post it soon in another blog entry.

    • @JC Molina,

      OK, I put together an installable version of my sequencer software and wrote a post about how to connect it to a G-35 string. You can read it here.

      Andy

  3. Stuart BrownBacher says:

    They’re BACK!
    Costco 780780 GE Color Effects® 50 LED Lights String Set $74.99
    I was at the store and bought them at $64.99
    UPC-A CODE 087449720096
    Today is 8/30/2011
    Stu.

  4. lngoodman says:

    Hi

    I just installed these lights, but the short cable to the power supply requires that it be outside (I have a roof line installation). I noticed that the Power supply is connected to the string via a 2 pin connector with a screw down collar. I would like to move those power supplies inside. Do you happen to know where I could buy those connectors, so I can make a low voltage extension cord ?
    Thanks

    Lee

    • Based on the way that connector seems to be molded directly into the case and the plug integrated into the wire, I’d guess that it is proprietary. That said, it is quite similar, though not exactly the same, as the connectors on some rope lights I have. You might want to just splice in an extra length of wire. Keep in mind that low voltage DC does not transmit well over long runs.

  5. Michelle Green says:

    How do you connect two or more sets together??????

  6. Kari Cooper says:

    Has anyone found yard stakes for the G-35’s. I know they make them, you can buy the 16 pack that’s called a pathway set and the stakes are in the box. i just called GE and they do not have the stakes available even thought they sell them as part of a set. If anyone has firgured a way to stake these lights i’d would love to hear about it.

  7. Ryan Arguello says:

    Is there a way to connect multiple ge g35 led strangs together?

    • I’m not sure whether anyone has tried connecting these things end-to-end, like you would traditional Christmas lights. It probably wouldn’t accomplish much if your intent is to just use the out-of-box controller, though. That is because when the string powers up, each bulb is in a mode where it is waiting to be assigned an address. The controller then sends commands out to each bulb, starting a address o and going up to 49 (for a 50 bulb string). The first command, for bulb zero, is sent out and the first bulb on the string receives it and assigns itself address 0. It then passes any command not sent to address zero on down the line. So the next command, for address 1 is forwarded to bulb 1…etc. Since the built-in controller is only designed to control 50 bulbs, I could be wrong, but I would expect that only 50 address commands are sent out at startup, so more bulbs down the line from the 50th would never get any commands. it be possible to tie the ground and data lines together at the front of the string, so that signals from one controller are sent in parallel to multiple strings, but I would worry about the signal level not being sufficient to drive multiple strings like that. Also, it means you’d have to physically position the multiple strings where they all start at the same place.

      • Mario Bica says:

        Thank you this response was helpful as I was wondering the same thing.

      • Xtalker says:

        I connected two sets of 35 with the controller that came with the 35 set. It looks like the controller enumerates 50 bulbs but only uses the first 35. The 15 bulbs from 35 to 50 respond only to commands sent to all lights so all the sequencing functions ignore these. Functions that send the same command to all lights work fine. The interesting thing is that all the bulbs past 50 respond to the commands sent to bulbs 1-35!

  8. eltiburon38 says:

    Super Easy Stake Idea…
    Lowes or HD sells wood stakes. These are the same stakes concrete workers use to build temporary forms. A bundle of 25 will set you back $3.50 or so. You can buy them in one or two foot lengths.
    I bought 3 bundles, used a hot glue gun to attach the butt end or flush mount clips to the stakes.
    The wood stakes will not last forever, but they should last a couple of seasons. And they are VERY sturdy.

  9. Mark Bowie says:

    When I plugged in my 50 ct G35 set this year, the second half of the string is about 1/10 of the brightness of the the first half. The sequencing seems to be working fine, it’s just a brightness issues.
    Any ideas on how to fix this?

  10. Ken Ellis says:

    This reply may be a year late, but here goes: It is likely that there is a poor solder joint on one of the two power leads inside either the last bulb that is lit bright or the first bulb that is lit dim. To fix, first make a 50/50 guess of which of the two bulbs mentioned is the problem. Then use a knife to separate the three wires on the left and right side of the suspect bulb. Strip the insulation off either the 1st or 3rd wire (but not both) on both sides of the suspect bulb. Note that the middle wire is the data wire. Run a jumper wire from the left side to the right side of the bulb (to give a good path for power). Check if that fixed it. If not, do the same for the other wire (1st or 3rd). If that didn’t fix it, do the same for the other suspect bulb. If that didn’t fix it, throw the d__n set out!

  11. JMac says:

    oh my god, I just want all five strings of lights to blink the multi color setting. I turn one on with the remote and the other goes off.

    • Ken Ellis says:

      Greetings JMac: Here is the solution I use for this problem: Try to turn the lights on with the remote. Unplug all the strings that turn on. Try to turn on the remaining strings. They should now light. Now plug back in the strings that you had unplugged. They should now all be synchronized to go on and off together. To synchronize the sequence pattern setting, change the pattern until one or more strings are solid white. Unplug each string that is solid white. Click the remote again until another string is solid white and unplug it. When all have gone to solid white and been unplugged, plug them all back in again. Their pattern on all strings should change in sync (for awhile). The remote works best when it is within 20 feet of the string controller. Occasionally you may have to repeat this procedure.

  12. Ben Russell says:

    Hi , I’m new to all this. But. We really enjoy the G 35’s..We have several on display this season. I had one string stop working all together. Where do I start looking for repair ? I don’t see fuses. is there someone I could send them into for repair. I don’t mind paying for a repair. I think they are off warranty. Thanks

    • Hmm..sounds like either the controler died or the power supply is dead. The two outermost conductors provide the power. Have you tried using the power supply/controller from a working string on the dead one? This would help identify weather the problem is in the string or the controller.

Leave a comment