Main Content

Holiday NeoPixel Display

Create an NeoPixel (WS2812B) matrix and display festive holiday animations.

Overview
This project was a result of wanting to create a large display of NeoPixels to show animations at Christmas. It is smaller but more economical then covering my whole house with lights, while still being attractive and fun.

Step 1: Create the grid
I chose to make a grid 15 pixels wide and 20 pixels high. This resulted in needing 300 NeoPixels. For the density I desired I bought strips that had 30 pixels per meter. This results in needing 10 meters of NeoPixel strips.

To achieve the desired width and height the strips need to be cut in lengths of 20 pixels. Cutting the strips can be done with scissors on the designated joints (three visible copper traces). This also results in having some 10 pixel sections that need to be spliced together. Just put the two strips side by side and solder the pads together. Make sure the positive and negative sides are not crossed!

After getting 15 strips of 20 pixels the strips had to be joined. Use wires long enough to stretch from where one strip physically ends to where the next will begin. You will need to solder 3 wires to two strips for 14 connections. This results in 84 solder joints. It takes a while but is worth it!

Step 2: Hook the grid up to an RP2040 and Power
Hooking the grid to the RP2040 based board is fairly simple. From the data in at the start of your grid solder a wire to an I/O pin on the board. I used a Adafruit QtPy RP2040 and used pin A3.

For power hook the power supply to the 5V and ground pads at the start of your grid. Also hook ground to the RP2040 board. If you want to power the RP2040 from the same power supply hook the 5V up to the appropriate power pin. On the QtPy it is pin labeled 5V.

Note on Power: at full brightness each NeoPixel can draw 80mA. That can result in a peak draw of 24amps! But full brightness is very bright and the code I provide runs at 30%. If you intend to run all 300 at full brightness you will need a supply capable of at least 24 amps, preferably more. You will also want to solder power and ground to a few more locations in the grid as it drops over the length.

Step 3: Load the Code
The RP2040 board will require CircuitPython to run. Please refer to https://circuitpython.org/ for instructions on installing it on your board. The features used for this project exist in the latest nightly build at the time of this writing. The features are all targeted for the 8.0 release. Any release as of 8.0 should be sufficient.

The code consists of the main code.py file that sets up the grid and runs the animations. It depends on the Pyicle library for icicle animations as well as snow.py and sparkle.py helper files that handle animating snow and sparkling “lights”.

The code cycles between three animations:

- Scrolling messages
- Christmas Tree with sparkling lights and falling snow
- Icicles that drip while growing and breaking

The main loop in code.py (at the end of the file) controls the order and timing of the animations.”

Link to article