Assembly Plan / Prep
While waiting on the components to arrive from overseas, I made a cheatsheet for assembling my board. I saw someone else do this for use when assembling diy ANDnXOR DC24 Bender badge's and found it to be helpful.
Most of the components came from LCSC but some that weren't available there came from Digikey. I've had the brass tube in stock for a while but I ordered that through Amazon a few months back when I started experimenting with it.
The assembly for these badges was inspired by watching dr_n0pesl3d's twitch streams where they used a hot air rework tool to solder components one at a time. I had never seen this before and didn't recognize it as a possibility. I thought you only re-worked previously soldered components, or used an oven the reflow everything on the board at once. This concept of using the hot-air tool to assemble boards one component at a time wasn't a concept that existed in my head previously. Placing the solder paste with the syringe for each individual component is probably my least favorite part of this process as I'm inaccurate and wasteful.
Moment of Truth - Plugging in USB.
After I got all the components on the first board I wasn't really sure how to go about testing it before plugging it in and taking it for a spin. I ended up visually inspecting all IC's and the USB connector for any bridges/shorts. After cleaning those up I used the breakout pins and a multimeter to test neighboring pins on the EPS32 to double check for bridges/shorts. Once I was semi-confident that nothing was going to be destroyed when I applied power, I plugged it in.
I could not believe that it didn't go up in a puff of smoke as soon as it was plugged in.
What Works What Doesn't
I had a bit of troubleshooting to do as nothing really happened when I plugged in my board aside from the power indicator LED lighting up (which was still sort of cool cause I've never powered anything through USB before). It turned out both the CP2102 and ESP32 hadn't completely/correctly reflowed. I ended up having to hand solder all 5 of the v2.2 badges I made because I couldn't get them to completely reflow correctly using the hot air tool I have. I assume I'm not heating up both the pixel badge board and the ESP32 WROOM board in close enough synchronicity to correctly reflow it. I've gotten a handle on the CP2102's QFN package now, but it was the most difficult chip I've soldered in my electronics career thus far.
Indescribable Feeling of Uploading something directly through a USB Port
After I got the ESP32 and CP2102 installed correctly, I plugged in the badge via USB and checked out the list of USB devices on my computer. Seeing the a UART chip by Silicon Labs listed in my list of USB devices gave me a rush of excitement that I don't feel often. I know it's probably trivial to most people more heavily involved with the hardware world, but this felt like unlocking a door that l've been stuck behind for a while. It make's me feel like I might be capable of designing and manufacturing actual electronics.
One of the major components to check was the LiPo battery charging circuit. When a LiPo is plugged in and charging, there is an extremely quiet and high pitched whining/screeching/hissing sound that emanates from the board. I can't tell if it's the actual battery or some of the components on the board making the noise. This is the scariest part of the build for me because I copied the schematic, don't understand it electrically, and now have a potential problem to figure out. I double checked the schematic and components and I don't think I did anything wrong. I let the battery charge (outside) for 3/4 hours and it never exploded or caught on fire, nor did the battery start to expand or anything like that. So for now, I think it's safe, but not 100% finished.
Auto-program circuit broken (Good Thing I have Buttons)
Another part of the circuitry that needed troubleshooting was the circuit that is supposed to automatically put the ESP32 into boot loader mode so you can upload code to it without the need to press any buttons or jumper anything. It doesn't work. Luckily, I copied the buttons from the schematic that allow me to get it into boot-loader mode manually. When I double checked my schematic that I copied from the Hornbill dev board, I realized I didn't connect the RTS pin within the auto-programming circuit to IO13 on the ESP32. I tried making this connection with a bodge wire on the board and tested the auto-program circuit again and it seems like it got one step further, but still didn't successfully get into boot-loader mode. I only know that it progressed a little because all the neopixels turn bright white on the breadboard version of this badge when the auto-upload works. When I added the bodge wire, the neopixels turn white when I go to upload, but the connection is never completed. I'll be sure to figure this out before the next version of the board.
Daisy Chaining Details
Daisy-chainability was one of the main features I wanted to implement and I'm glad to report to that it works! Right now, each badge has an output with 3.3v, GND and DOUT for the Neopixel chain. The inputs however only take in GND and DIN. I was unsure of how to handle taking in power from an external source and it's one of the major items on my to-do list. I also have to think about this badge running at 3.3v and the conflicts that will arise when trying to interact with other strands of ws2812s that are running at 5v. I think I can figure this out though. Currently, you have to physically flip a switch to dictate whether the on-board neopixels listen to data coming from the esp32 internally, or from an external source. I'm unsure if there's a more elegant solution.
7 out of 10 Touch Inputs Aint Bad
All the brass tubes are connected to T0-T9, the touch inputs on the ESP32. 7 out of 10 work nearly flawlessly and give me plenty of 'buttons' to manipulate the badge with. The 3 touch pins that aren't working are also shared by other parts of the circuitry as designed and I'm unsure if I'll be able to get all 10 working. This isn't as high a priority item for me to take care of but I still want to investigate the possibility of using all 10 touch inputs.
- Fix auto-programming circuit
- Use additional ESP32 pin for external pixel data so onboard pixels can be independently controlled.
- Research using all 10 touch inputs.
- Confirm battery charging safety. Potentially move away from LiPo with JST to rechargeable coin-cell.
- Research bluetooth for wireless primary/secondary "color infections"
- Research power input detection management. (Maybe logic level shifter as well for 5v/3.3v)
- Custom lanyard art
- Hackaday Supercon
Streaming / Sharing
I really enjoy watching the twitch streams of others working on electronic projects so I'm trying to start to do that. Here's an archive of a stream I did where I babble about the pixel badge in general for probably too long. Here's a link to my twitch where I'll be streaming more work/progress on these badges and my other projects.