/Engineering
Christmas Light Show 2021
Overview
2020 - The first year I had a notable number of visitors to the light show. We had at least one car watching the show for the majority of the nights it was on, sometimes with as many as four cars at once! This year I added the two items in the upstairs windows, a wreath and a snowflake spinner. My dad and I also added the house outline on the lower level gutters, some column matrices by the front door, a "singing" elf, and a "Senior 2020" sign.
2019: I started the light display at my apartment, and then moved it to my parents house after finals week for Christmas break. My proudest addition was a custom 425-pixel Clemson Tiger Paw that is a more than 3' in diameter. I designed it myself and cut it on the makerspace's laser cutters, and then my dad made a frame for it. I also added the "Mega Tree", which is a 10' tall tree with 16 strands of 80 lights each at 1" spacing with a star on top.
2018: My first year of the show, I created a Christmas light show to Clemson's fight song, Tiger Rag. The lights were set up outside my apartment and could be started by pressing a button beside the sidewalk, then the song was played through a speaker hidden in the bushes. I also had a "Standby" sequence where the lights roll through various effects during the night when a song isn't playing.
The extent of my 2018 show included two small mini-trees, one large mini-tree, 6 small arches, and a custom laser-cut stocking decoration.
I didn't want to go all-in on a full blown Falcon controller yet, so 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: https://www.jacobathompson.com/single-post/2018/10/25/Christmas-Lights
Christmas Light Show 2020
Christmas Light Show 2019
Christmas Light Show 2018
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 FPP-v2.4-Pi.zip – 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 Pi. 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 router.asus.com 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
-
In xLights, click Tools, FPP Connect
-
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
-
Go to Content Setup, File Manager on FPP
-
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.
-
If you’re using the pushbutton script upload it the same way.
-
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
-
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.
-
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:
#!/bin/sh
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: https://github.com/FalconChristmas/fpp-scripts
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=”PlayTheSong.sh”
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
Wiring diagram for LED 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.
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.
-
Drag your video file and mp3 file to the timeline area. Generally line them up on top of each other
-
Select both or all the tracks
-
Right click and select “Synchronize” or “Synchronize audio”
-
Just click OK on any dialog box that pops up
-
Mute your video’s original audio track
-
Play the video and visually see if it matched it up correctly
-
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.