I’m a big fan of the Stranger Things series and I can’t wait for the next season. If you haven’t seen the show, in season 1 two characters communicate across different dimensions using Christmas lights with letters written underneath them.
I built a replica of this a year ago, but with the upcoming release of season 4, it’s time to build a bigger and better version. These lights can be hung up on your wall, and can let friends, family, and even strangers communicate with you.
What You’ll Need For This Project
- Raspberry Pi 4 or Raspberry Pi 3
- USB power adapter for Raspberry Pi
- 8 GB (or larger) microSD card with Raspberry Pi OS. See our list of best microSD cards for Raspberry Pi.
- Two strands of 12v WS2811 LEDs (one strand will work, but two looks better for letter spacing)
- A 12 volt power supply (any standard 12v power supply will work)
- Jumper cables
- Wire strippers
- Solder or wire nuts
- A black and white printer and paper
- Push pins
How to build the Stranger Things Christmas Lights with Raspberry Pi
Before you get started, make sure that you have your Raspberry Pi OS set up. If you haven’t done this before, see our article on how to set up a Raspberry Pi for the first time or how to do a headless Raspberry Pi install (without the keyboard and screen).
1. Install git, which will allow us to clone the code from github.com
sudo apt-get update && sudo apt-get install -y git
2. Clone the repository and descend into the directory created.
git clone https://github.com/rydercalmdown/stranger_things_lights.git cd stranger_things_lights
3. Run the installation command to install all necessary base and python components.
4. Connect both WS2811 strands together using their attached connectors. You can use 1 strand, but I’ve found two look better for letter spacing.
5. Connect GPIO pin 18 on the pi to the data pin of the WS2811 strand.
6. Wire the 12v of the WS2811 strand to the positive end of a 12 volt power supply. I used wire nuts to attach mine together.
7. Wire the ground of the WS2811 strand to the negative end of the 12 volt power supply, and also a jumper cable with a female end.
8. Connect that jumper cable to a ground pin on the Raspberry Pi.
9. Pin the WS2811 strands up on a wall using push pins (or another method you prefer).
10. Print out each letter of the alphabet from a text editor to your desired size.
11. Cut out and attach the letters under LEDs of your choice.
12. Back on the Raspberry Pi, open the worker/app.py file with a text editor of your choice.
# in the stranger_things_lights directory nano worker/app.py
13. Edit the mapping dictionary so your pins match the letters. Pins are zero-indexed, so the very first pin on your strand will be 0, and the very last will be 99 (if you have only 1 strand it will be 49). If you have the letter “A” under the last LED, assign it 99 (49 for only 1 strand of LEDs).
14. Start the server component. It will start running on port 5000 in the background. I originally designed the server to be run separately for security, since I allow public messages from the internet, but if you’re using it for yourself you can run both on the pi.
15. Start your worker component to receive messages from the server.
16. Plug in your 12v power supply. This is separate from the Raspberry Pi’s USB power supply.
17. Visit your Pi’s IP address and port from anywhere on the network. In my network, I put this in my browser:
18. Submit a message to the server. You should see it shortly appear letter by letter on the lights after a brief display of flashing lights to get your attention.
You have the option of exposing this service to the internet so friends and family can send messages. Keep in mind that any time you open ports on your router or firewall there is an inherent risk - so it’s recommended you do this only temporarily.
Depending on your router or modem-router combo, you might have an option to port forward. If that’s the case, you can forward port 80 on your router to the Raspberry Pi’s IP address, and port 8000. This means that any browser that types in your home IP address (http://10.0.0.0/ as an example) will be forwarded to the running server on your Pi, where they can submit messages.
For more advanced users, you could also consider setting up a cloud-based reverse proxy with TLS termination, but to share with friends and family, the above should be sufficient.