ESP32 WLED Driver Board With USB Type-C Power Delivery | Voltlog #419

Same as most people these days I do have a couple of LED tapes in my apartment to provide some ambient or work area illumination. The ones I have are warm white 12V tapes and they’re typically controlled via some sort of touch dimmer which again is a pretty typical low cost commercially available solution.

But given how the rest of my lights are fully dimmable and integrated into HomeAssistant for remote control I started thinking how I could do that for the LED tapes as well. And I think you know where this is going, yup, I’ve designed my own LED driver board, this is it, based on an ESP32 and WLED compatible but more on that in a second.

First let me mention the list of requirements that I had, before I started designing this.

My number #1 requirement was to get rid of the typical LED tape frame style power supply units which are generally big and bulky, pretty noisy in terms of electro-magnetic radiation. I have plans for installing some small lengths of LED tape and there is no point in having like a 20W power supply if I’m only going to need something like 10W at most. So I figured why not design this LED driver board to take in USB Type-C power supply input, with power delivery support. This way I could power it from one of these usb-c wall adapters. Simple, clean and reliable if used with a high quality adapter. In addition to that, I would argue that it’s safer too when used with a high quality adapter because you no longer have to deal with mains wiring.

Number #2 requirement was to have an ESP32 in there so that I could integrate this into my smart home management system. Having an ESP32 will give me plenty of processing power to run either Tasmota or ESPHome or even better WLED which specializes on LED driving capability.

Number #3 requirement was the ability to drive both digital LED tape like SK6812 or WS2812 type and analog type LED tape which you have to PWM on individual channels. I wanted up to 4 analog channels so that I could drive an RGBW tape and at least 2 digital channels but I ended up wiring 4 digital channels because I had more available pins.

Number #4 requirement was to have the whole system small so that it could be put in a small enclosure, maybe even enclosed into a wall distribution box. 

Now considering these requirements one by one, I’ve successfully implemented 1 to 3, not so much on #4, because the whole system is not as small as I would have liked it to be. When fitted inside the enclosure it measures roughly 90*70*30mm and ideally I would have like it to be half of this size, something like 90*30*30mm would have been great but I just couldn’t fit everything in that size unless I was going to do a double sided assembly which I tend to avoid because it significantly raises prototyping and manufacturing costs.

So let me start with presenting some of the technical specs that I have on this driver board:

  • USB Type-C power input with power delivery, based on this dip switch selection, it will negotiate for 5V or 12V. For safety purposes I have also added a manual jumper that needs to be manually selected to route the resulting voltage rail to the 5V side or to the 12V side because I figured there might be edge cases where the user has a 5V led tape connected and then accidentally requests 12V with the dip switch which would result in 12V being applied to the tape.
  • We have a secondary power input via screw terminal for those that do not want to use USB Type-C.
  • We have 4 mosfets with PWM for driving RGBW 12V LED tapes.
  • We have 4 digital LED channels, these are properly connected via a high-speed buffer line driver that also level shifts the signals to 5V.
  • We have an I2S microphone which WLED supports by default for sound reactive lighting.
  • We have an integrated IR receiver which once again WLED support by default for remote control.
  • We have a touch input GPIO where you could connect some improvised touch sensing point if you would like to implement touch control.
  • With some of the remaining available GPIO I’ve created this I2C standard 0.1 inch header so that you may for example connect additional stuff, like a temperature/humidity sensor.