Christmas Light Show 2018



I created a Christmas light show to Clemson's fight song, Tiger Rag.  The lights are set up outside my apartment (190D in University Village) and the show can be started by pressing a button beside the sidewalk.  The song is played through a speaker hidden in the bushes.  


I used a software called xLights which is a free and open-source software specifically made to design and play light shows using addressable lights.  I custom-built a controller using two ESPixelSticks (ESP8266 with some power control hardware), an Arduino, a relay module, and some other hardware.  This custom controller can control 1360 RGB LED lights and 8 AC outlets for standard lights.  For detailed instructions on the AC-control part of the controller, read my blog post here:

This year I sequenced the songs "Tiger Rag" by Clemson University Marching Band and "Hallelujah" by Pentatonix.  I also have a "Standby" sequence where the lights roll through various effects during the night when a song isn't playing.  

Hallelujah by Pentatonix [YouTube]

Controller Assembly and Cost-Effectiveness

You can find a more detailed overview on the controller build here:

The most common controller used for Christmas light shows are the Falcon controllers.  The F16v3 controller can control 1024 pixels per output and has 16 outputs for a grand total of 16,384 pixels. (And more with expansion boards)  It has ethernet ports so you don't have to worry about wifi latency and delay, built-in fuses and power distribution, separate DMX/Renard outputs, and many more features.  The only downside is that the board alone is $200, and that's more than I wanted to invest for my first year where I would only be controlling a few hundred pixels.  

Onto the DIY solution.  I found the ESPixelSticks by ForkInEye that can control 680 pixels each and were just $20 each.  I ordered a 5V 350W MeanWell power supply and enclosure from WiredWatts and laser-cut a backerboard and created my own controller for way less than $200.  I also added functionality to control AC light elements with the same controller, and that added some cost, but in the end I definitely came out on top compared to buying a AC controller and a Falcon and enclosure and power supplies etc.  

Cost Comparison

I was curious about at what point a Falcon controller made more economical sense than my ESPixelStick army solution.  Since the majority of the cost either way is going to be in lights, I included the cost of RGB lights in my calculations.  


The lights that I purchased were 5V 50ct bullets with Paul Zhang connectors from Wired Watts [link] and at the time they were $11.50 each.  I did my calculations at $12 per 50 bullets to account for shipping.  I then made a formula that for every 50 lights would calculate the total cost as [money for lights] + [money for controllers to control that many lights] 

As you can see, the ESPixelSticks are cheaper until around 6,000 lights costing at least $1600 total.  Obviously the Falcon controller has other advantages light the built in fuses/distribution and multiple outputs for less daisy chaining etc.  

If you want to play with the data yourself with your own light cost you can download the sheet using the link on the right.

Falcon Pi Player (FPP) Introduction


One cool feature of xLights is that you can run something on a Raspberry Pi that controls starting/stopping of your light shows and outputting all the data to the lights.  This means that you don’t have to leave a computer on all the time for your show to run.  The important part for me was that the Raspberry Pi has GPIO pins that could be used with a button to trigger the light show starting and stpping. 


To set up Falcon Pi Player, go here to download – make sure you download the version for the Pi and not for beaglebones!!  Then use Etcher or similar to flash the image to the SD card.  Plug in power and an ethernet cord and it should automatically connect to your network. 

There are a few ways to find the IP address of the P.  When it boots up it should use the audio output (line-out jack) to say the address, so you could attach headphones or a speaker to it and just listen for it.  You could also go to your router’s page and look at the list of connected devices under ethernet and find the one titled “FPP” – this is what I did.  If you have an Asus router go to and log in.  Once you get the IP address you can load that up to connect to FPP from anywhere on your network. 


Follow these steps to get started with running your lights through fpp

  1. In xLights, click Tools,  FPP Connect

  2. Put in the IP address and connect to FPP.  Then check both the check boxes ("Upload Controller Configuartion" and "Upload Models") and then send everything to FPP

  3. Go to Content Setup, File Manager on FPP

  4. Go into File Explorer where your sequence is and find the .fseq file.  Drag the .fseq file to the “Drag files here” box on FPP.  Your sequence should appear above.

  5. If you’re using the pushbutton script upload it the same way.

  6. Go under Content Setup and click “Playlists”.   Create a new playlist, and add your sequence to the playlist.  If you want it to play on repeat then put it in the Main section of the playlist.  If you have an intro like “Welcome to the show!  Please turn off your car headlights” then put it in the “Play First” section. Save your playlist

  7. Go under Content Setup and open the Scheduler.  Make a new schedule and set the times for it to turn on and off and on which days of the week.

  8. To test your playlist and sequences, go under Status/Control to Status.  Select a playlist from the dropdown and then click "Start".  It should start playing your playlist and outputting to the lights. 


Push-to-Start with button

Since my show would be outside of my apartment I didn’t want it playing all the time, but I also didn’t want it only playing every 30 minutes or something.  My solution was to set up a button that people can press to start the show, but I also wanted the lights to only constantly be on 5:00pm-11:00pm.  On the surface this seems simple, but I had to do some simple/complicated scripting to accomplish it like I wanted.  The video here and below gives a nice introduction on how to set up a pushbutton with a simple script to start a playlist.  Keep reading to find the complicated script I put together that accomplishes everything I want.  

Summary of the video:

  • Import your sequence to fpp using the file manager

  • Create a playlist with the sequence in it.  For the next steps the playlist will be called "playme"

  • Open a blank notepad file and type the following:​


fpp -P playme​

  • Save it as a .sh file on your computer

  • Go to the file manager in FPP and upload your script file.  Go to the "Scripts" tab and make sure it is there

  • Under Status/Control go to Events

  • Create a new event.  Event ID 1/1, Event name whatever, Effect Sequence NONE, Event Script <The script you uploaded>

  • Go under Input/Output Setup and click GPIO triggers

  • Toggle the pin your button is attached to.  If it will go low when you press the button then put the event on the Falling option, if it is active high then put the event on Rising. 

  • Click the Reboot button by the warning it pops up after you make all the changes

Below is the script that I eventually arrived at.  If someone presses the button during “night” hours it will play Tiger Rag (my Song1) and then go to the standby sequence which loops infinitely.  If the button is pressed while Tiger Rag is playing then it starts my second song, Hallelujah, and then will go to the standby sequence indefinitely.  But if someone presses the button during daytime or very late at night it will play Tiger Rag once and then turn all the lights off.  This allows the button to work at any time of day but the lights don’t have to be on all the time.  Also this script works for playing multiple sequences from a single button.  (Next year I’ll be adding two more buttons, but I’ll probably keep using this script one way or another)

You can find more resources for scripting in FPP here:

For more complicated logic just google “bash script ____” where underscore is what you’re trying to do.  You can test your scripts using the FPP Shell (username fpp password falcon)

The basic commands are as follows.  Pay attention to capitalization!! Capital -P will play a playlist once, lowercase -p will repeat it. 

fpp -v 66                                        Set volume to 66%

fpp -c stop                                    Stop the show immediately

fpp -C stop                                    This might be stop show gracefully

fpp -p thisPlaylistName              Plays thisPlaylistName on repeat (so the intro song plays once, then the Main stuff will be repeated indefinitely. 

fpp -P thisPlaylistName              Plays thisPlaylistName once

eventScript "${MEDIADIR}/scripts/${thisScriptVariable}"                       Runs a script.  In the case on the left it works for if you have your script name saved into a variable somewhere above, like thisScriptVariable=””


I also created a schedule that plays one of my songs from 11:02-11:03pm, which serves to turn off the lights at that time (hoping no one presses the button in those few minutes)

The wiring diagram for the pushbutton is below.  As you can see, you need 3 wires from the Pi to the button – 5V power, Ground, and a data pin for the button.  If you want multiple buttons you just need 1 more wire each if you use the 5V and Ground on each.  Also you’ll need one resistor for the button itself, and my button had a LED light ring around it which required a second resistor.  I used 220 Ω resistors, but anything in the 200-400 range should work. 

Wiring diagram for standard button

I cut a piece of wood at a 30 degree ish angle and then used wood glue to attach the button piece to it (AFTER doing all the wiring).  Then I used a green garden T-stake to put it into the ground at knee height.  I used a laser cutter at school to etch the top of it, but anyone with decent handwriting or painting skills could make something far prettier and just as functional as mine.   

Wiring diagram for LED button

Vendors and Props Galore

There are a variety of places that you can purchase the lights and props used in displays like mine, but there aren’t many places online where you’ll find a nice list of various places.  Here’s the list that I wish I could find a few months ago!

Update:  After writing all the below stuff, here's a list of Vendors I found with some I don't have:

Wired Watts - – This is where I ended up buying my pixels and enclosure and connectors. They have good prices and ship from ...somewhere... in the USA so everything should arrive within a week.

Boscoyo Studio - – a great site for strip/mega tree hardware and coro props for Christmas and other holidays too.  Kinda overpriced for the actual lights though.  Ships from USA but has expensive shipping (Or it might just be that when you buy big coro props the shipping will be expensive due to size)

Holiday Coro - - Has a bit of everything.  Pre-assembled controllers, coro/plastic props, lights, lots of stuff.  I didn't love their prices but they have some good package deals.  

Ray Wu’s Alibaba store - – Ray Wu is someone that has started a business selling Christmas lights related lights and props.  He sells through a store on Alibaba direct from China.  His products are known to be really good quality, the only downside I see is the expensive shipping (which matters less if you’re buying $500+ of stuff in one order, but just starting out I didn’t want to pay $40 shipping on a $80 order) 

Crockett Fantasy of Lights (CFOL) - 

Pixel Controller - - For buying Falcon controllers

Other Useful Hardware and Connectors


Disclaimer:  I love Amazon, so prepare for lots of Amazon links.

Power and Data Pigtail Alternatives

3-Pin Marine Grade - A lot of people (including myself) use these connectors because they're guaranteed to be waterproof and they're cheaper than connectors on most vender sites

2-Pin Marine Grade - - I use these for power injection/distribution because they're half the price of the 3-pin and make it clear that it's for power.  Once I switch to a mix of 5V and 12V props I'll probably pick a different pair of connectors so that I can't accidentally plug 12V into a 5V prop 

Soldering and Crimping

Heat-Shrink Butt Connectors - - These will save you so much time.  You just poke your wire in the end, crimp it with a crimping tool, and then after doing some use a heat gun or lighter to warm the outer plastic and it's immediately heat-shrinked and water tight and strongly connected.  I prefer these over the connectors with solder in them because I can tug on it before heat-shrinking to confirm the connection is solid.  

Solder Butt Connectors - A good alternative to crimp connectors, especially for smaller gauge wires.  

Spade Connectors [18-22AWG] [14-16AWG] - Useful for wiring within your controller from a fuse block or bus bar to power supplies.  Take note of what gauge your terminal block says it needs - I had to make an emergency Lowes run when I found that my 14-16AWG spade connectors wouldn't fit on my bus bar that required 18-22AWG.  


16AWG 4-conductor speaker wire (white 100ft) - - This is what I used for all my data connections this year and everything worked without a problem.  I have <0.5V of voltage drop across 12ft wires.  Since my lights only need 3 wires I just snipped the white conductor, I've also read of people soldering two wires together for ground.  

18AWG 3-conductor speaker wire (white 200ft)  - - I haven't used this, someone let me know if they have because Amazon comments specifically say not to use it for addressible lights, but it's almost half the price of what I used. 

For power distribution - 16AWG direct burial black 2-conductor wire  - - I used this for additional power injection and it worked perfectly.

Individual Rolls of Hookup Wire -

Basically in wire you want pure copper, not copper-clad aluminum (CCA) because CCA doesn't solder as well, carries less current per gauge, and has a tendency to rust compared to copper.  


In-Line Fuses - - Useful to save space in your controller box or when you forget to put fuses in your controller box (me) 

Screw Terminal Block without fuses - Useful for distributing AC power to multiple things

Fuse Terminal Block - Umm I didn't use these so I haven't researched them

1-ft Extension Cords - - If you want to make an AC controller using relays, it's easier to have a bunch of short extension cords poking out than it is to try to modify a power strip. 

Cable Glands - - Make your connections from your controller to the outside world weatherproof!

Note - if you use the Paul Zhang style connectors from Wired Watts, the connections to colors are as follows:

Blue = Ground (-)

Brown = Positive (+)

Yellow/Green = Data

Video Tips


Your video will turn out better if you use the .mp3 song file instead of your camera microphone audio.  Luckily, most video software has a “Synchronize audio” function that will automatically sync up the audio of two files.  The following steps are for doing it in Adobe Premiere Pro, but I know Cyberlink video can do it and has similar steps.

  1. Drag your video file and mp3 file to the timeline area. Generally line them up on top of each other

  2. Select both or all the tracks

  3. Right click and select “Synchronize” or “Synchronize audio”

  4. Just click OK on any dialog box that pops up

  5. Mute your video’s original audio track

  6. Play the video and visually see if it matched it up correctly

  7. Export your video – I usually use h.264 encoding with the YouTube 1080p preset. 

Lastly on the video I set my camera to full manual mode and used 1/30s shutter speed (so that the AC lights didn’t visibly flicker), 1080p 30fps, ISO 800, f/3.5.  Using full manual means that your camera won’t automatically make everything a lot brighter when all your lights turn off and make it dim when they’re all on.  Often you’ll need a dSLR camera or a special app on your phone to set those settings.   


Jacob Thompson

Clemson, SC

© 2020 By Jacob Thompson

Terms of Use and Privacy Policy

  • Facebook Social Icon
  • Instagram Social Icon
This site was designed with the
website builder. Create your website today.
Start Now