3 min read
DIY Tube Lights for $35

I was searching for different methods of LED strip diffusion with visual examples. I was looking to work with addressable RGB LED strips but using the bare and blinding LEDs was not going to look good. I found this video by Wittech which shows a unique and cheap way to accomplish this on a large tube. In the video, wax paper is rolled up into a plastic fluorescent tube guard to make a diffuser for the entire LED strip.

Now I could move on with starting my project!

For this first prototype of Beacon, I will use the wax paper and plastic tube guards to make the core of the light fixture. I added a 3d printed base so that the tubes would stand upright. My plan for this project is to make an affordable and configurable design of a spectacular LED light tube. The final design would have interchangeable 3D printed parts to mount the light in different places, and would controllable through multiple methods (USB serial, Network/UDP and even Home Assistant which syncs to Apple HomeKit)

To experiment with software, I needed a basic version of the hardware. You can see that hardware in the video overview


To get the basic connections working I followed this tutorial from Chris Maher

Using an ESP32 Wi-Fi microcontroller as the brain, and an open source firmware called WLED, I was able to control the lights from my phone. I prefer using Apple HomeKit to control my smart home devices. I set up the Home Assistant (an open source home control software) integrations for both Apple HomeKit and WLED. Then I connected them together using a Group ‘helper’ in Home Assistant. Each tube light now appears as a normal color changing bulb alongside my other lights! Of course you can set these to any of the preloaded effects in the WLED web interface as well.

A missing piece of the software puzzle so far is real time control. These are individually addressable LEDs after all. It would be awesome to control them in real time wirelessly to do all sorts of lights shows and custom effects. After a bit of diffing I found this GitHub issue made to the WLED repository.

It includes a UDP control function example written in Python. This function contacts the WLED controller from its IP address and updates the pixels color and brightness. For mor information on why this works, check out the WLED documentation for the UDP interface.

Here’s a list of materials I used for this first version of the lights:

LED strip:


Power supply: https://www.amazon.com/dp/B078RXZM4C?psc=1&ref=ppx_yo2ov_dt_b_product_details

Connectors: https://www.amazon.com/dp/B06XGYXVXR?psc=1&ref=ppx_yo2ov_dt_b_product_details

ESP-32 (you can get cheaper ones but these worked for me): https://www.amazon.com/dp/B0B19KRPRC?psc=1&ref=ppx_yo2ov_dt_b_product_details

Tube guard: https://www.lowes.com/pd/Lithonia-Lighting-12-Pack-FLUORESCENT-BULB-GUARD-Clear-Bulb-Guard/1000398801