Mon, Dec 1, 2025
I greatly enjoyed Hackaday Supercon again this year after attending for the first time in 2023. Why did I miss last year? I don’t have a good reason, but it’s not happening again!
One of my favorite parts, and probably of many attendees, is the badge hacking. This year’s badge (announcement, GitHub, schematic) was an extra bonus as I love small handheld computers.

I spent a lot of Saturday in and around conference …
Mon, Dec 1, 2025
I greatly enjoyed Hackaday Supercon again this year after attending for the first time in 2023. Why did I miss last year? I don’t have a good reason, but it’s not happening again!
One of my favorite parts, and probably of many attendees, is the badge hacking. This year’s badge (announcement, GitHub, schematic) was an extra bonus as I love small handheld computers.

I spent a lot of Saturday in and around conference sessions thinking about possible hacks. Nothing was really jumping out at me other than maybe a tiny language interpreter, but I didn’t feel like that made for a compelling demo (watch me program on a tiny keyboard!)
When I got up on Sunday, I had a strong idea: using the Shitty Standard Add-On port which is on the front of Supercon badges to add a quick bit of hardware and write a graphical synthesizer keyboard. We’ve got PWM-capable GPIO, we’ve got graphics, we’ve got a keyboard. And serendipitously, the diagonal spacing on the SAO header between GPIO pin 1 and a ground is pretty close to the pin spacing of a simple piezo buzzer with minimal bending.
Thus is born Synthy Add-On.
Here’s my presentation of the hack at the closing session, about eight hours of attempted normal conference attendance after I hatched the idea:
You can also watch the video of everyone’s hacks!
My code is over on GitHub. True to the spirit, it’s pretty hacky, especially the graphics drawing placement, but the core of things, the synthesizing, is pretty simple and clean.
Basically I’m just using pulse width modulation on GPIO pin 1 (which corresponds to the top right pin on the SAO header) to configure and create a square wave. The frequency corresponds exactly to the musical note frequency (since that’s how sound works) and the duty cycle can be used for either a normal 50% square wave — 512 (half of the 10-bit max) corresponds to note on — or by setting it to zero (unlike a frequency of zero, which has unexpected noise) you can get a note off.
I edited things right on the badge using Thonny on my laptop, which bills itself as a “Python IDE for beginners” but I find really nice even for complicated on-device MicroPython work (which this isn’t, really).
A couple other implementation notes:
I grabbed the note frequencies from a standard chart that I found online.
1.
I modeled the keyboard after that of Apple’s GarageBand.
1.
I made a note auto-off of 250ms, but interruptible by continued user action. That way, if you tap a note, it will play for a short time, but if you tap a number of notes in succession, it will switch the pin output to play the new note right away. I do the auto-off by keeping track of when the last note started, then each pass of the main program loop, checking if 250ms have passed yet. 1.
I tested things around the conference using my pocket oscilliscope instead of audio output, which was both fun and, I’m sure, appreciated by those around me trying to get their own work done.
1.
One of the trickier bits was figuring out the API for the LVGL MicroPython bindings. While I appreciate the work put into them, it’s one thing to have docs for the C API, but another entirely to then have to mentally figure out how constants, function names, and other structures have been ported to MicroPython. I’m sure it’s easy for anyone immersed in LVGL already or who knows the library backwards and forwards, but for someone trying to build something new, it’s a lot of work. Some of the links that I found helpful:
- advanced demos on DeepWiki
- these examples, especially lv_canvas.py
- this LVGL forum post
- these canvas examples
Given more time, I would have done more and cooler sound synth such as some of David Johnson-Davies’ projects like his Tiny MIDI Player. I’ve played with some of his ideas before and was greatly inspired by them for my PCB Christmas tree ornament among other projects.
Special thanks also to John Bates from here in Portland who was also down at the conference and who I just knew would have a piezo lying around that I could use (he gave me five, and also had both 3.3V and 5V available).
Lastly, unrelated to my badge, I also gave a seven-minute lightning talk about Catch the Wave! which you can find on my talks page.
Happy hacking!