Last weekend 5,000 people congregated in a field north of Berlin to camp in a meticulously-organized, hot and dusty wonderland. The optional, yet official, badge for the 2019 Chaos Communication Camp was a bit tardy to proliferate through the masses as the badge team continued assembly while the camp raged around them. But as each badge came to life, the blinkies that blossomed each dusk became even more joyful as thousands strapped on their card10s.
Yet you shouldn’t be fooled, that’s no watch… in fact the timekeeping is a tacked-on afterthought. Sure you wear it on your wrist, but two electrocardiogram (ECG) sensors for monitoring heart health are your first hint at the snoring dragon packed inside this mild-mannered form-factor. The chips in question are the MAX30001 and the MAX86150 (whose primary role is as a pulse sensor but also does ECG). We have high-res ADCs just waiting to be misused and the developers ran with that, reserving some of the extra pins on the USB-C connector for external devices.
There was a 10€ kit on offer that let you solder up some electrode pads (those white circles with gel and a snap for a solid interface with your body’s electrical signals) to a sacrificial USB-C cable. Remember, all an ECG is doing is measuring electrical impulses, and you can choose how to react to them. During the workshop, one of the badge devs placed the pads on his temples and used the card10 badge to sense left/right eye movement. Wicked! But there are a lot more sensors waiting for you on these two little PCBs.
Card10 is made up of two circuit boards separated by standoffs just tall enough to hide the 200 mAh lithium battery between them. The user interface is a color LCD screen, four extremely tiny buttons actuated at 90 degrees off the left and right side of the top PCB, and numerous LEDs — some obvious and some less so.
Hardware on Top of More Hardware
When it comes time to hack on this badge, the hardware is a gift that keeps on giving. Is there an accelerometer? Oh, very much yes — and here’s where it gets crazy. I’ve been playing around with the BHI160 which is both accelerometer and gyroscope, and in looking up the part number while writing I find there also a BMA400 accelerometer that I didn’t know was there. Hey, guess what? There’s also a BME680 for temperature, humidity — ho-hum those are both common — oh yeah it does air pressure and air quality too. What?!? How is there room on the board, much less in the budget for this?
Hey, you know that MAX32666 Cortex-M4F processor running at 96 MHz with 512 kB of RAM at the center of this thing? One core runs all of the critical functions, while the second core handles the MicroPython layer and all of the user code. Oh, and there are eight megabytes of external flash to augment the one megabyte provided by the microcontroller. In keeping with the smartwatch theme, there’s a vibration motor on the board. And along either side of the bottom board are breakout pads meant for adding your own hardware to the watch band using conductive thread.
This is a wolverine in sheep’s clothing, ready to shred badges that mistake this for pedestrian.
Assembly is Both Easier and More Difficult Than You Think
The watch band itself is a surprisingly clever part of the design. Two flexible steel plates span the board between the bottom screws used or the standoffs. They sandwich the soft synthetic watch band, which is the least-dense neoprene I’ve ever encountered. This is great as it never felt hot in the sweltering August sunshine. A simple piece of hook-and-loop fastener — I’d never dare to call this by the brand name Velcro (we already made that dire mistake) — acts as the clasp.
First off, bravo to the packaging team. Everything was in a nice zipper envelope and all of the smallest parts are themselves inside of a tiny paper envelope. There are printed instructions a-la Ikea to help with assembly.
At first glance the kit feels like it will involve a lot of work; it does not. Deciphering the pictograms requires a bit of head-scratching and will have the polarizing effect of either making you feel smart or foolish. If the pictures don’t give you challenge, the very tiny screws certainly will. I was lucky enough to be in the Hardware Hacking village when I put mine together and they had the exotic tiny Torx wrench for the screws.
I’m not complaining… it’s a wrist-mounted ECG, and space matters. The imperceptibly thin double-sided tape for attaching the battery worked great after some fiddly peeling, and my fears of catapulting the tiny screws when flexing those steel watch band clamps were only calmed by knowing extra screws were provided in the kit. The only real head-scratcher for me is why one of the standoffs is nylon while the other three are all brass?
Choose Your Own Bling
When you first turn it on, card10 doesn’t light up the LEDs on top of the board by default. But isn’t that a good thing? When you see the row of eleven RGB LEDs doing something on this watch it’s because the wearer took action to make it so. Yes, the top layer goes to eleven, but there’s more… dig in and you’ll find parts of the board with the CCC rocket logo illuminated by LEDs from the board below. It took me several hours of digging through the documentation before I discovered the design for a side-firing “flashlight” LED. Unfortunately, a layout error means this was never populated, but it would have been so useful at camp as locating your flashlight in a dark tent at 3 AM is a treat. (Who am I kidding, everyone has a cellphone flashlight, but still.)
Who Let the (Micro)Python Out?
I suspect that on my death bed I will still hold a deep love for the C programming language. Don’t get me wrong, I love Python too, but for desktopy/webby things like OAuth and text manipulation. (n embedded platforms, Python feels like using a sonic toothbrush when a hammer is called for.
Thus I’m still undecided upon this. I do think MicroPython is the future for embedded electronics. We will always need embedded engineers, but in the same way that electronic design trended away from analog and toward digital, engineer-focused electronics will trend toward higher level languages and I think Python has already managed to vanquish its challengers.
I struggled with some strange things on this badge. It seems the accel/gyro will sometimes return an empty value — my C sensibilities expect this to be erroneous data and not a showstopper, but Python throws and exception and my code wasn’t ready to catch it. On the other hand, Python provides a live interpreter via the USB-C jack on the badge so you can try out each command and discover problems along the way. It’s also a
printf dream come true to have Python’s uber-powerful
print() statement piped out to
/dev/ttyACM0. My verdict on this is that it’s just different — C would have taken longer to pick up, but much of that time was lost again dealing with MicroPython (which I’m much less familiar with) quirks.
Picking My Jaw Up Off the Floor
Like a fine Scotch, the first sip was not what I was expecting, but over time I became addicted. Documentation for the card10 badge is the best I’ve ever seen (specifically the firmware docs) outside of a major Open Source software project that already has extensive adoption. The sensor array is a dev-board dream come true. There’s even an established app repository in the form of the badge.team hatchery so you can see what tricks your fellow hackers are up to. But most important of all, this thing makes sense attached to your arm rather than as a pendulum around your neck. (Although without a battery-backed RTC the clock does need to be set to the current time via Bluetooth using the smartphone companion app.)
My fear is that five thousand badges made it out into the wild, but few will realize what they have. My plea to all the amazing people at camp: what you’re holding is special and deserves so much more than one weekend of fun… don’t let this get lost in your parts bin! Don’t take my word for it, check out the badge talk from the con to bring you up to speed: