All posts

Kohlrausch

Building a custom macropad from scratch

I'd been watching a ton of videos about custom macropads for a while, and eventually I just decided to build one myself. Seemed like a fun weekend project. It was not.

The MCU Dilemma

The plan was simple: a compact macropad with mechanical keys, wired over USB. Then I started looking at microcontrollers and fell into a rabbit hole of trade-offs.

I wanted to go wireless at first, so the ESP32-C3 was my pick. Small, cheap, WiFi and Bluetooth built in. Then I found out it doesn't support native USB transmission, which kind of defeats the purpose if you want a wired fallback. So I moved to the ESP32-S3-N16R8. It has native USB and plenty of power. The problem? Too big for the compact form factor I had in mind.

After going back and forth a bunch of times, I landed on the RP2040. It's small, well-documented, has native USB, and there are tons of community resources for keyboard firmware. The obvious downside is no wireless at all. No WiFi, no Bluetooth. But I figured I could always pair it with an ESP32-S3 as an external wireless module later if I really needed it. For now, wired it is.

Going Solo

I hit up three or four friends about collaborating on this, but everyone was busy with their own stuff. After a few weeks of waiting, I just started building it alone. Sometimes you just have to do things yourself.

Schematics and PCB Design

The first real step was drawing up the schematics. I spent about two to three hours on the initial layout, figuring out the key matrix, the RP2040 pinout, reverse-polarity protection diodes, and the USB-C connector. It was my first time designing a PCB from scratch, so there was a lot of double-checking datasheets.

Rough schematic drawing of the Kohlrausch macropad

Fig. 1: Initial rough schematic

Once the schematic was solid, I moved on to the actual PCB layout in EasyEDA Pro. Routing the traces took a bit of patience, especially keeping everything compact while making sure the key matrix traces didn't cross over each other awkwardly.

PCB routing and design in progress

Fig. 2: PCB layout and trace routing in EasyEDA Pro

The Final PCB

After a few iterations and design rule checks, the board came together nicely. The 3D render from EasyEDA Pro looked clean enough that I felt confident sending it out for fabrication.

Final 3D render of the Kohlrausch PCB

Fig. 3: Final 3D render of the PCB

The Enclosure

The housing is just as important as the board itself. I designed a basic enclosure in CAD. Nothing too fancy, just something to hold the PCB and switches in place with a clean look. The mechanical switches and keycaps are from MechKeys, and they fit the design well.

CAD model of the macropad enclosure

Fig. 4: CAD model of the enclosure

Firmware

For the firmware, I went with MicroPython. Wrote a basic key-scanning script and tested it on the ESP32-S3 first to verify everything worked as expected. The key matrix scanning, debounce logic, and USB HID output were all functioning correctly.

The firmware is mostly done at this point. It needs some polishing, better debounce tuning, maybe some macro support, but the core is solid.

What's Next

Work on this is paused for now. Waiting on funds to come in, and work will resume in the last week of October. Here's the plan:

Parts to order: PCB fabrication (from JLCPCB or Robu.in, depending on budget), diodes, and the RP2040 MCU, all from QuartzComponents. The mechanical switches and housing are already here from MechKeys.

Once everything arrives, it's just assembly, flashing the firmware, and testing. Hoping to have a working unit by mid-November.

It's been a solo ride so far. The friend who was originally supposed to help bailed early on, so I've been handling everything myself. Schematics, PCB, firmware, enclosure. It's a lot of work, but honestly, there's something satisfying about building a piece of hardware from nothing but a schematic and a bag of parts.

So yeah, let's see how it goes.

Signing off,
Emtypyie

Back to blog Sep 2026