Addressable Christmas Lights 2015

My search for a replacement to the GE G35 lights

Similar projects worth following
GE discontinued the famous G35 hacker friendly addressable RGB led Christmas lights. After buying 7 different brands I found one at home depot that was easily reversed. I planned to run it off of an esp8266, nodemcu wasn't fast enough so it is run off an arduino.

GE discontinued the famous G35 hacker friendly addressable RGB led Christmas lights. After buying 7 different brands I found one at Home Depot that was easily reversed. I planned to run it off of an esp8266, nodemcu wasn't fast enough so it is run off an arduino. The code mainly uses bit shifting and direct port manipulation. I may migrate the code to baremetal atmega328 , but thats when I need the space. At that point it may be a baremetal esp8266.

The code runs currently and changes the lights. They function as shift registers. Each led consumes the last 24 bits of the data for color intensity. Each led has a single byte for R G and B channels. The data has the clock and data combine into one data line. It is in a high z state when no data is sent. It is pulled low as a 0 and pulled high as a 1. The lows seem to effectively make a clock signal.

The issue is that the driving controller in the device runs at ~103.6 volts as positive and ~100 volts as negative. This controller drives two transistors in an odd manner. The wiring is basically cutting the traces to the two transistors, connecting the one labeled Q1 to pin 9 and Q2 to pin 8. The power is then using the same power as the main IC. The lights must not be plugged in when programming or you might end up with a usb cable welded into the port. Line voltage is something to take seriously. I have been using a USB isolator to program it while connected. The eventual goal, after the code is finished, is to use optoisolators on the serial line to isolate the mains voltages. This output/input will be the only external connector on the control box.

The original data was changing between 4, 5 and 6 bit frames. After realizing that each bulb's color was 8 bits I attempted 8 bit frames and it worked. When measuring the data, each data bit is 2us, each rest between bits is 10us and each rest between frames is 25us. it also has 4ms between each data packet. The LEDs don't seem to particular about timing. They are very forgiving. I have not tested the tolerances of their function, but I have added a lot of coding delay at points and they still worked.

The code currently takes in serial commands and modifies an array of values. This seems to be the easiest method longterm. It is fully working, but could use some optimization.


ESP8266 web interface

Eeprom saving so it can start in the last state

Patterns such as chase and fade

Triac for switching female outlet on end

Compatibility with included remote


The arduino project as txt for compatibility reading.

text/plain - 12.94 kB - 12/27/2015 at 04:48



This is the arduino project.

- 12.94 kB - 12/27/2015 at 04:47


  • 1 × Arduino Uno
  • 1 × LTV-814 Opto and Fiber Optic Semiconductors and ICs / Optocouplers and Optoisolators
  • 1 × 1/8" TRS Connector
  • 1 × Home Accents Holiday 1000 050 415 Lights
  • 1 × SMAKN® USB Isolator (Optional)

  • Serial Commands

    TBJR612/27/2015 at 04:46 0 comments

    This is the help screen through the terminal. It has all the commands and examples and explinations of use

    Serial Commands available

    H display this help screen

    Example H

    F Flush serial input buffer

    Example F

    L Load from storage to running array

    Example L _ _ where blanks are the array number

    S Save from running to storage array

    Example S _ _ where blanks are the array number

    O Change one color channel on a bulb

    Example O _ _|_|_ _ _|_ _

    E.G. O|bulb|color|intensity|array O24R25500

    A Change all color channels on a bulb

    Example A _ _|_ _ _|_ _ _|_ _ _|_ _

    E.G. A|bulb|Red|Green|Blue|array A2425525525500


    16 arrays are available with 0 being the current running state.

    Bulbs are zero indexed, with there being 25 bulbs any number over 24 applies to all bulbs

    All integers must have leading zeros.

    Nothing is case sensitive.

    Three digit numbers are bytes and therefore up to 255.


View project log

  • 1
    Step 1

    Remember that this sits at high voltage. Do not connect the Arduino to the computer while lights are plugged in.

    Basically this works by cutting the traces from the MCU and using the arduino in its place.

    D6 needs to be changed to at least a 5V zener diode. This makes the part labeled V+ at about 3.1V. A slightly larger Zener Might be beneficial. V+ connects to the Arduino 5V and GND connects to the arduino GND. The data line connects to the Arduino D9 pin and the clock line connects to the Arduino D8 pin

  • 2
    Step 2

    Serial Optoisolator instructions to follow

View all instructions

Enjoy this project?



Arnold wrote 12/26/2017 at 23:38 point

Just hit Lowe's and Target on 12/26/2017 and found the same lights under different names. Lowe's had them as "Holiday Brilliant 10 Color Changing 25 C9 LED". Target has the as "Philips Pick-a-Color C9". The Philips are about 2x the cost of the Holiday Brilliant. They are the exact same lights with 25 lights and the 5 lines (3 for V+, V-, Data, and 2 passthru 120VAC) coming out of the controller. The only read difference was the Philips had a more "modern" looking RF remote.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates