
Motivation
Currently I have around 18 WLED controller devices deployed around my apartment, most of them built using a NeoPixel Driver BFF and either the QT Py ESP32 Pico or the QT Py ESP32-C3 (currently the only QT Py boards I've been able to get to work with the standard WLED web firmware installer). The BFF series of boards is designed to be soldered back-to-back with the QT Py, but I often find it challenging to design mounting geometry on 3D printed cases for this configuration. To help fit my specific needs a little better, I decided to manually wire the boards together and build a snap-fit case to hold them. I borrowed the idea (and some of the geometry) for the snap-fit from the QT Py Snap Fit Case learn guide.
Any QT Py board can be used with this design, and you don't even *necessarily* have to use it for a lighting project. I've even used this case/configuration as a small driver for an IOT Relay using an ESP32-S2 QT Py from the signal and ground pins of the JST connector of the NeoPixel driver BFF (be aware though that this signal is shifted to 5V!).
3D Printing
One feature of this case that I like in particular is that it has a small profile and most of the time is not difficult to hide or stash out of the way. Due to its simple external shape, it's also simple to mount onto other surfaces if necessary. I have one that I've adhered a small magnet to using 3M VHB tape and then stuck onto a metal bookshelf. Several others have a small bit of velcro with adhesive backing applied to them. Others, I can just simply hide it behind whatever it's driving, such as an LED matrix.
I used PLA to print these, but if heat is a concern (for example if you plan on driving the board at the full 2 Amps constantly), you might want to use PETG or some other more heat resistant material. I haven't tried this (yet) so there may be some trial and error involved. I rarely drive my boards past 1600 mA (WLED even has a convenient feature to help limit the LED drive current) so this has not been a concern for me personally, but it's worth pointing out.
It's also worth pointing out that the snap-fit for the boards is very tight. I purposefully inset the snap-fit mount into the case a little to reduce the amount of clearance between the USB/JST ports and the outside of the case, to make it easier to plug in chonkier USB-C cable connectors and the JST cable for the LED strip.
Wiring/Assembly
Since we are subverting the design of the BFF by not mounting back-to-back, you'll also need to do some soldering to wire the power and signal pins together on the two boards. You'll need to wire the 5V and GND pins on each board together, and then wire the pin used for the NeoPixel signal on the QT Py to the SIG pin on the BFF. Then you can snap each board into their mount in the case (the USB cutout is smaller than the JST cutout, so make sure to match the QT Py with the correct mount).
I've had the most success inserting the QT Py and BFF boards by inserting the front of the board (the end with either the USB port or the JST port) into the outside grooves first, and then applying direct downward force on each of the back corners of the PCB using my flat nosed pliers or some other small but non-sharp instrument. Be careful! It might take a bit of force to push the PCB in, and you need to be mindful of the wires and delicate components around the edge of the QT Py (not to mention the other delicate components used to do all this: your fingers). If for some reason you need to remove the boards after installing, I've had the most success removing doing so without destroying the case or the board by wedging a flat-head screwdriver between back of the board and the case and gently lifting/rotating to pry the PCB out.







Completed assembly
With everything wired and assembled, you can now plug in your NeoPixel strip via the JST connector, and plug in the USB-C port to power. Install whatever firmware you want to on the QT Py and you should be good to go!
