In the past I’ve worked with bluetooth and serial remote control of LEDs and I cobbled together a system to control LEDs with UDP packets at some point, but I never landed on anything I really liked or found useful for more than just a rough test. I’ve known of DMX\Artnet for some time but never understood it or cared enough to implement it. Well I finally dug deep enough to get an ESP8266 controlled by QLC+ and it’s pretty sweet. I’m not a huge fan of DMX512 from an structure standpoint- 512 bytes per universe and channel\address offsets and all this are just archaic nonsense, but it is pretty simple and ubiquitous so it probably makes more sense than the wacky bespoke UDP nonsense I was cooking up. I also looked at MQTT and it’s probably superior, but it doesn’t seem as universal for lights as DMX\Art-Net.

First test, manual control and a test sequence.

I had to edit a bit to handle channel\address offsets I can send commands in the same DMX ‘universe’. I’m not sure if it’s best practice to make each light its own universe, but I thought using one made more sense for my needs. I’m still a little rough on how the Art-Net nets, subnets, universe, kilouniverses or whatever are supposed to be structured, but I’m thinking that only matters when you’re controlling a lot more lights than I ever intend to.

This next video is 3 lights, each with an WS2812B 8LED ring on top and some kind of LED on the bottom, left to right they have a 3-UVLED WS2811 PCB, a 3-WhiteLED WS2811 PCB, and a WS2812B UV LED.

Longer sequence with three separate lights.

And for some reason here’s a picture of one of the tubes right after putting the silicone in. Silicone this thick is relatively forgiving with small bubbles, as you can see from this image the initial ‘pour’ left some ugly voids but after about a week of curing they disappeared completely.

“Silicone is optically compassionate but tactilely sociopathic.” -Banksy’s neighbor’s friend from the hardware store.

I’m using this Arduino library – https://github.com/rstephan/ArtnetWifi. At some point I’ll write a DMX client sketch that includes codes for running onboard FX modes, but for now I’m just using individual RGB channels.

Part of the problem I ran into controlling LEDs with WiFi was lack of a suitably convenient board. Most of the cheap ESP8266 boards run at 3.3V and I’m too lazy to add a level shifter to every build. Some board\LED combos will still work at 3.3V but it was too inconsistent. I found some 5V ESP32 boards that worked but they were less cheap and I didn’t like how hot they seemed to get just driving a strip of LEDs. Also had trouble with some of my goto libraries working on ESP32.

I did find these ESP-01s RGB modules and they work pretty well, but they only break out one pin so I can’t drive APA102 or add a button or anything.

Bottom left is ESP-01s RGB with a 12LED ring. Bottom right is the ESP-01 TX\RX adapter. Above that is a MicroUSB power PCB. Top right to left are ESP8266 and programmer with boot switch.

I’ve also been sitting on a half-dozen of these ESP-01 TX\RX adapter modules that I originally got to add WiFi capability to a Nano. But I never got the AT mode to communicate with the Nano, and it’s kind of dumb anyway since the ESP is a perfectly capable microcontroller, the Nano just adds 5V and more IO pins, but I was only using 1 or 2 pins, and I could get 5V IO a dozen other ways.

Basic setup using the TX\RX module. TX(PIN1)>WS2812B CAPTOUCH>RX(PIN3)

Not sure why it took me literally years to realize this, but those modules also make the ESP8266 into a perfect WiFI LED driver board. It takes 5V and gives the ESP 3.3V, and the the TX\RX lines are already level shifted to 5V. You just have to add a line in the setup() function to define the TX\RX lines as GPIO:

pinMode(1, FUNCTION_3); //GPIO 1 (TX) swap the pin to a GPIO.

pinMode(3, FUNCTION_3); //GPIO 3 (RX) swap the pin to a GPIO.

Add a little MicroUSB connector and you’ve got a cheap ESP8266 LED controller with 2 IO pins. It’s a little annoying to code because you can’t just leave it plugged in to the USB and keep uploading new sketches like you can with a Nano or something. But I just have 2 ESPs and work with the protoboard plugged into a USB battery and the USB-ESP programmer to the PC and just keep swapping the ESPs back and forth. Alternatively for some things you can write code on another board like a NodeMCU or Lolin32 and just upload it to the ESP8266 when it’s good to go. I have a lazily iterative process so it’s easier for me if I can just change, upload, change, upload, etc, with as little delay as possible. It’d probably be better if I just thought things through more, but if I did that I probably wouldn’t be doing any of this in the first place.

So anyway with that rig, the ArtnetWiFi library, and a tutorial on QLC+ I quickly achieved my dream of finally becoming a a lighting designer for a portable micro airshow. Now I am content… but only just now… yeah it’s over, I’m not content anymore so I guess I’ll get back to tooling around and messing with stuff.