The next major missing piece of Keyglove functionality is wireless support. This involves a battery, charging circuit, and a Bluetooth device. I’ve been working on Bluetooth for a while now, and after the difficulty with Broadcom BCM2042-based modules, I had some very exciting preliminary success with Bluegiga’s WT12 module (as described in this recent post). My rat’s nest of a test hookup demonstrated to me that the WT12 is perfect for the Keyglove, so a breakout board became the next priority.
Because I like learning new things and being able to create stuff that is exactly the way I want it, I decided to build a custom breakout board for the module. I had already ordered this WT12 breakout board from BatchPCB, but it isn’t particularly suited for a solderless breadboard. All of the pins are broken out, but it’s too wide. I really wanted something that would fit like the Teensy++ board does, and alternately something that would provide simple UART access without needing to use all the pins. Rather than wait for something else to become available, I decided to go for it myself to see what I could come up with.
Therefore, a couple of weeks ago I gave myself a crash course in Eagle, which involved a lot of Googling, experimenting, trial and error, and some much-appreciated help from @laen and the Wayne and Layne guys. The result was this design, which I was thoroughly proud of and very excited to send in for fabrication:
The board is about the same width and slightly shorter than the BP20422 board Wayne and Layne created for me. It has all of the pins accessible in standard 0.1″ pitch, and the layout is such that you can even use it on one of the tiny 10×17-pin breadboards (the board’s pin rows are only 14 pins each). It also has a redundant but separate UART header, which breaks out GND, 3V3, RXD, TXD, CTS, and RTS. You can control the whole module with just those pins if you’re using it for HID stuff.
Thanks to the Dorkbot PCB service run by the aforementioned @laen (along with his speedy work and clever panel arrangement), I was able to get the design sent in for production mere hours after finishing it. It showed up as promised—much quicker than my BatchPCB order did, I might add—this past Saturday. I wasted no time at all in mounting the WT12 module on it, which resulted in this beautiful thing:
The WT12 has solder pads only on the bottom surface of the module though, so my prior approach of soldering it on with the tiny tip of my iron didn’t work. I tried instead melting just a bit of solder on each of the SMD pads on the breakout board, then setting the WT12 module on top and heating the whole thing up with a hot-air rework station until the module basically sunk into place. I used more solder than I needed, but it still worked reasonably well for a first attempt at an untested method.
Sadly, I discovered while testing to make sure none of the SMD pads shorted together that there was indeed one short: VCC and GND. Yeah. Oops. It turned out to be completely my fault and baked into the design. I moved the POWER header slightly sideways on the board to make room for a new part, but then didn’t re-run the autorouter or the ERC/DRC tests, which would have caught it. The trace that had gone straight to the GND pin header pad instead went diagonally up to where it had been (read: right under the VCC pin) and then across to the GND pad. There was also another trace that was too close to the RESET button, which I had also moved, and that created another short.
It wasn’t too hard to cut the traces manually in a few places so that I could finish testing the board, and I’m happy to say that the rest of it seems to work great. Soon after I finished the test, I set about making appropriate revisions to the board design so I could put in a new order ASAP, which I finished in plenty of time and got sent in for fabrication as of early this morning. In addition to the bug fixes, I also added a solder jumper for optionally faking RTS/CTS flow control (like on SparkFun’s BlueSMiRF board), and I rearranged the UART header pinout to match the BlueSMiRF’s header. My original arrangement was arbitrary anyway, so I figured, why not make it pin-compatible? This is the new board design, v1.1:
Finally, I paired down the design a bit and left only what was necessary for UART access, which resulted in the following board:
Assuming it works, that’s the one I’m going to use for the Keyglove prototype. It’s about as small and function-oriented as it could possibly be and still be prototype-friendly. I’m really happy with how both designs turned out; I’m working building a complete Eagle library for Bluegiga Bluetooth modules, which will include the WT11, WT12, WT21, WT32, WT41, and not-yet-released BLE112. I never knew how to do PCB design before, but now that I’ve learned the basics, it’s awesome!
While I wait the 12 days until the new revised boards show up, my next task will be to write the controller code to support HID communication via the WT12/Teensy UART connection. I’m going to try to put together a basic modular iWRAP library in the process, for anyone else who wants to use Bluegiga’s modules. I’ll keep you all posted!