My definitive guide...
Clear all

My definitive guide to DIY Christmas lights with Arduino, Vixen and WS2811 RGB LEDs  


Member Admin
Joined: 1 year ago
Posts: 305
22/12/2019 10:16 pm  

(Currently a work in progress)

My definitive guide to DIY Christmas lights with Arduino, Vixen and WS2811 RGB LEDs


Planning and design

First things first, we want to get a picture of our house, this will allow us to layout a design we are trying to achieve, and using something as simple as Paint we can draw lines where LEDs or props may go.
Be sure to keep an untouched copy of your house, as we can also use this in Vixen Lights to overlay a demo show over (more to come on this topic)

House Small
House Small lines

Once you've drawn out where you would like to have LEDs/lights, the next step is to take physical measurements of each spot, such as gutters, roof lines etc. Where ever you want your lights, this will allow us to plan for LED counts and lengths.

In our outline lighting example, we going to use WS2811 RGB LEDs, these are 12v LEDs and the ones I used were spaced 2.5 inches apart (the description states 2.7-2.9 inch spacing, but we utilize them with 2.5 inch spaced mounting strips.)

500 pack of WS2811 RGB LEDs - 12v

61Xpp Zzs4L. AC SL1000

To mount these LEDs to the house, I used a few items;

PixNode mounting strips with 2.5 inch spacing

767 7

LED Pixel Pliers (these make a world of difference when pushing all of the LEDs into the mounting strips)

31eKxSaL7uL. AC

For mounting them to the house, I used either 3M Command Strips or Eyelet Screws and secured them together with a mix of 4 inch Zip ties and 8 inch Zip ties.
Taking the measurements for each strip of LEDs, measure them out onto the PixNode strips, adjusting where you need to considering the 2.5 inch spacing of the LEDs.

BE SURE to pay attention and mark or label what end of the LED strand is the input, and if you have to join more LEDs together, pay attention to the side that is the input.

For joining LEDs and LED strands to make 1 strip, as well as attaching the water proof connection ends, I used several types and sizes of water proof heat shrink.

2mm 3:1 shrink for small individual wires
8mm 3:1 shrink for medium bundles of wires or connectors
3/8ths inch 3:1 shrink for larger wires and bundles

as well as some water proof butt splice connections

22-16 gauge
16-14 gauge

Lastly, to complete each strand of LEDs I used the following waterproof connections;

BTF Lighting small 3 Pin water proof LED connector

61tNa1eoUgL. AC SL1100

Please bear in mind, this may not be an industry standard for compatibility with other systems or devices, just what I happened to pick at the time when I was setting up my display.

In my setup, I used the female end as the LED input and male end as the LED output, I followed this through all strands, props, extension wires and amps. Doing this simplifies connectivity and keeps things in order.

A few notes on LED strands, mounting and planning out your display;

The WS2811 RBG LEDs work while wired in series, the output of strand 1 goes into strand 2 and so on.
Keeping this into consideration when deciding where the initial input signal will start and how the wiring will go from there.

You want the shortest possible wires and extension cables, I've had success with an initial 20 foot run from the controller to the first strand of LEDs but your results may vary.
Extension cables, or a jumper cable from 1 strand to the next to continue the signal, needs to be very short. I've run into several issues trying to carry the signal too far from the prior set of LEDs.
Though I've had better success with this using these "F-Amps" I found, that boost the LEDs data signal for longer runs.

You want to try and stay around or below 400 LEDs in total per "group". Each group will have their own controller and you want to avoid issues with transfer speeds, or power.

You want to consider power injection. You'll be adding a power feed about every 200 LEDs or so.

In my setup, shown here, I have 3 groups of LEDs to make up my outline, each group contains around 300 LEDs. I feed 12v power into the start and end of each group of strands.

House Small lines colors

Again, take into consideration the flow of data from 1 strand to another as you are making your layout / design.

<picture coming soon>



Outside of the actual lights themselves, you need a controller to tell the LEDs what to do or turn them off and on. A "show player" tells the controller what the lights should do, the controller the spits that out to the LEDs and they light up as desired. There are several options for both Show Players as well as controllers.

For simplicity and cost, I currently use an Arduino for each of my controllers and depending on the job determines what version of Arduino I am using.

Arduino MEGA - Relay / Power plug controller

Arduino Nano - Small groups of LEDs 150 or less

Arduino Uno - Larger groups of LEDs 200-400+ (Largest I've tested is 410)


The reasoning behind the Arduino choices, is primarily the Serial port speeds each could handle. This drastically impacts the performance of the LEDs and your display, too many LEDs on an Arduino with a slow max Serial port speed will not perform well and look fairly bad.

The Arduino MEGA for relay and power plug box controls 32 relays to turn off/on 32 power plugs for old school Christmas light strands. I use the added I/O pins to control these relays.
I've only tested the max Serial port speed of 115,200. But this is fast enough for 32 plugs.

The Arduino Nano, was originally for price and size. I was able to get away with Generic Nano's to run small groups of LEDs 20-100 or so and get decent performance.
The max Serial port speed I've been able to get from the Nano's, including the official Arduino versions, is 115,200. This is fine for a small group of LEDs, but you will get very choppy and slow performance and updates with higher LED counts.

The Arduino UNO R3 is what I'm using for larger groups of LEDs, I've tested up to 410 LEDs in 1 group in my setup, with great success.
The max Serial port speed I've been able to use with these is 921,600, and makes a world of difference in display performance.

The software I use on the Arduino, can be grabbed from out downloads section here

This code should be modified for the desired Serial port connection speed as well as the LED count each controller will be handling, and then flashed to your Arduino of choice.



For the Traditional Christmas light strands that use standard power plugs and just turn off and on, this is where the Arduino MEGA comes into play.
I've coupled the MEGA with 2 16 channel relay banks. The MEGA then turns the relays off and on, that in turn power a bank of standard wall outlets.

2x SaintSmart 16 channel relay modules

IMG 0989
IMG 0990

Wiring the Arduino MEGA consisted of connecting Pins 22 - 53 to each individual relay on the modules. I use the relays to control the hot wire coming into each power outlet, and in turn I ran a common Ground and Neutral wire to each outlet.
In retrospect I could have used 16 outlets for a total of 32 channels, rather than 32 total outlet modules with 2 plugs each.

A quick note around the relay modules and Arduino code, the mechanical relays used in the module as well as the code, do not support dimming.
For dimming support, it would require new code as well as Solid State relays, I plan on looking into this in the future to upgrade my current setup.

Arduino code for the relay modules can be found in our Download section, here




I then tossed together a "make shift" controller board to clean everything up a bit, I used M2.5 screws and standoffs to mount the Arduino devices to the board.

20191118 143854

The USB hub used can be found here

LED Power


For powering my set of RGB LEDs, I try and run power every 200 LEDs or so. Thus for the most past I run power into the start of an LED strand chain, as well as into the end of the LED strand chain. In my experience, for around 400 LEDs or less this seems to be sufficient.

The LEDs used in my setup each use 0.3 Watts, and you will want to size your power supply needs accordingly. It's actually best to stay in the range of 75%-80% utilization or lower on each power supply.

I use sever 12v 40 amp 500 Watt power supplies in my setup;

12v 40 amp PSU

41lOpgJBw L. AC

I utilized terminal blocks off of each power supply to clean things up abit and make connectivity easier.

8-Way Terminal Blocks

61lOGWmb48L. AC SL1001

I'll admit, this may not be the best choice for outdoor Winter wiring, but this is what I use to run power to the LED strands.

18AWG 2 Conductor Jacketed LED Power Wire

20191118 143854

LED Power Supply mounting bracket from my Thingiverse Profile

featured preview PSU bracket v1


Member Admin
Joined: 1 year ago
Posts: 305
22/12/2019 10:35 pm  

<place holder>

New Member
Joined: 1 month ago
Posts: 1
05/05/2020 7:47 am  

hi there 

is there any way to save sequences on a sd card and use them without pc ? 
with xlights or vixen 

Member Admin
Joined: 1 year ago
Posts: 305
05/05/2020 10:55 am  
Posted by: @m-nouroozy

hi there 

is there any way to save sequences on a sd card and use them without pc ? 
with xlights or vixen 

I've written code for the Arduinos before that do static effects. But nothing set to music as the code would be very lengthy and a pain to do.

If you use something like Falcon Pi Player to store and play the shows, you can save them from Vixen and store them on an SD card and play them from a Raspberry Pi