
What Controls Permanent Christmas Lights? The Microcontroller Explained
By Jolly Raleigh · September 17, 2026
TL;DR: The "controller" on a permanent lighting system is a small computer called a microcontroller. It connects to your Wi-Fi, listens to the app on your phone, and sends a fast stream of instructions down the data wire to every light. The most common chip is the ESP32. It runs on 3.3 volts, and the lights want a 5-volt signal, so a good controller adds a "level shifter" to boost the signal. That one part is the difference between rock-solid lights and random flicker.
When you tap "red and green" in the app, something has to turn that tap into a message every single light can understand. That something is the controller. This post explains what is inside it, what it is doing 30 times a second, and why the cheap version flickers.
What a microcontroller is
A microcontroller is a computer on a single chip. It has a processor, a little memory, and a bunch of pins it can switch on and off very fast. It does not run Windows or apps. It runs one program, over and over, forever.
For lights, that program does three things:
- Talk to your Wi-Fi so your phone can reach it.
- Figure out what color every light should be right now.
- Send those colors down the data wire in the exact format the lights expect.
The workhorse chip in most modern lighting controllers is the ESP32, made by Espressif. It has built-in Wi-Fi, it is fast enough to run thousands of lights, and it costs a few dollars. Its older sibling, the ESP8266, is still around but slower.

How the controller talks to the lights
Addressable lights use a one-wire language. There is no clock wire, so timing is everything. A "one" is a pulse of a certain width. A "zero" is a shorter pulse. The whole thing runs at about 800,000 bits per second.
Each light needs 24 bits (8 bits each for red, green, and blue). At 800,000 bits per second, that is 30 microseconds per light. For a roofline with 500 lights, one full update takes 15 milliseconds. That is fast enough to refresh the whole roof more than 60 times a second, which is why animations look smooth.
The ESP32 has a hardware feature called RMT (remote control transceiver) that generates these pulses with about 50-nanosecond accuracy without the processor babysitting it, according to this ESP32 RMT tutorial. The original ESP32 has 8 RMT channels, so one chip can drive up to 8 separate light runs at the same time, per ESPHome's ESP32 RMT LED strip documentation. That is how one controller in the garage can run the front roofline, the back roofline, and the porch as separate zones.
The 3.3-volt problem
Here is the part most people never hear about.
The ESP32 runs on 3.3 volts, so its data pin swings between 0 and 3.3 volts. The lights, though, were designed for 5-volt logic. Their chips expect a "high" signal to be at least about 70 percent of their supply voltage. On a 5-volt chip, that is about 3.5 volts, per this WS2812B interfacing guide.
So the controller sends 3.3 volts, and the light wants at least 3.5. It is a coin flip. On a short wire, on a warm day, with a strip that is a little forgiving, it works. Add a few feet of wire, or use a 12-volt strip with stricter chips, and you get flicker, wrong colors, or nothing at all.
We hit this on our own bench. A 12-volt strip, grounds tied correctly, driven straight from an ESP32 pin, would light up and then flicker a dim blue. The signal was simply too weak for it to read.
The fix: a level shifter
A level shifter is a small chip that takes a 3.3-volt signal in and puts a clean 5-volt signal out. The common part is the 74AHCT125, which Adafruit sells for a couple of dollars specifically for this job. The 74HCT245 does the same thing with more channels.
Wiring is simple. The chip gets 5 volts and ground. The ESP32 data pin goes into one input. The matching output goes to the lights. That is it.
One warning: avoid the tiny "bidirectional" level-shifter boards sold for sensors (the ones with two rows of pins and a few transistors). They are too slow for 800,000 bits per second and will make the flicker worse, not better.
There is also a hobby trick. Cut a single 5-volt pixel off a spare strip, power it from 5 volts right next to the controller, and run the controller's data into it. That pixel reads the weak 3.3-volt signal fine and then re-sends a full 5-volt copy to the rest of the run. You tell the software to skip that first pixel. It works, but it is a hack. A level shifter is the real answer.
What a professional controller adds
A bare ESP32 board is a fun project. A controller built for a roof adds:
- A level shifter on every output, so the signal is clean before it leaves the box.
- Fuses on the power side, so a shorted wire blows a fuse instead of starting a fire.
- Screw terminals instead of breadboard pins, so the wires stay put through a Raleigh summer.
- A weatherproof enclosure, or a spot in the garage.
- A power supply matched to the lights, usually 12 or 24 volts for roofline runs. See 5V vs 12V vs 24V.
The brand-name permanent lighting companies all ship something like this. Some use their own custom boards; the job is the same. Our permanent RGB lighting installs include the controller, the power, and the app setup, so you never think about any of this.
Wi-Fi: the part that usually goes wrong
The controller needs 2.4 GHz Wi-Fi. Most home routers broadcast both 2.4 GHz and 5 GHz. The ESP32 only speaks 2.4 GHz. If your router hides the 2.4 GHz network or the garage is a dead zone, the app will not connect. A cheap Wi-Fi extender near the controller fixes it.
Once connected, most systems also let you set schedules right on the controller. Sunset on, 11 p.m. off, every day, even if your phone is off. The controller does not need your phone once it knows the schedule.
Frequently asked questions
What controller do permanent Christmas lights use?
Most use a small Wi-Fi microcontroller, very often based on the ESP32 chip, with a built-in level shifter and fuses. It sits inside the house or garage and connects to the lights with a low-voltage cable.
Can I use an Arduino for permanent lights?
You can drive addressable lights from an Arduino, but a classic Arduino has no Wi-Fi and much less memory. For an app-controlled roofline, an ESP32 is the better fit.
How many lights can one controller run?
Thousands. A single ESP32 output can update about 33,000 lights per second, so 1,000 lights on one output still refreshes about 30 times a second. Spread the lights across several outputs and the number goes up.
Why does my controller work with 5V lights but not 12V lights?
Twelve-volt strips are often stricter about the data signal. A 3.3-volt controller signal that a 5-volt strip tolerates may be too weak for a 12-volt strip. Add a level shifter. And make sure the controller's ground and the 12-volt supply's ground are connected. See how permanent Christmas lights are wired.