Building a split mechanical keyboard with a Raspberry Pi Zero controller

Looking to build their own ergonomic mechanical split keyboard, Gosse Adema turned to the Raspberry Pi Zero W for help.

So long, dear friend

Gosse has been happily using a Microsoft Natural Elite keyboard for years. You know the sort, they look like this:

Twenty years down the line, the keyboard has seen better days and, when looking for a replacement, Gosse decided to make their own.

This is my the first mechanical keyboard project. And this will be for daily usage. Although the possibilities are almost endless, I limit myself to the basic functionality: An ergonomic keyboard with mouse functions.

Starting from scratch

While searching for new switched, Gosse came across a low-profile Cherry MX that would allow for a thinner keyboard. And what’s the best device to use when trying to keep the profile of your project as thin as possible? Well, hello there, Raspberry Pi Zero W, aren’t you looking rather svelte today.

After deciding to use a Raspberry Pi as the keyboard controller over other common devices, Gosse took inspiration from an Adafruit tutorial on turning Raspberry Pi into a USB gadget, and from “the usbarmory Github page of Chris Kuethe”, which describes how to create a USB gadget with a keyboard.

Build your own

There is a lot *A LOT* of information on how Gosse built the keyboard on Instructables and, if we try to go into any detail here, our word count is going to be in the thousands. So, let’s just say this: the project uses some 3D printing, some Python code, and some ingenuity to create a lovely-looking final keyboard. If you want to make your own, Gosse has provided absolutely all the information you need to do so. So check it out, and be sure to give Gosse some love via the comments section on Instructables.

Mechanical keyboards

Also, if you’re unsure of how a mechanical keyboard differs from other keyboards, we made this handy video for you all!


Chris avatar

There are no Zero Ws stock in UK retailers – has production of these stopped?

Liz Upton avatar

They’re out of stock because sales figures keep going up – they’re very popular. We keep increasing production, but there’s a significant lag (and now a significant backlog). We’re trying our best! Production hasn’t been affected by Covid 9. We’ll let you know here if that does happen, but for now we’re doing everything we can to stop that from being the case while keeping our staff and our friends at Sony, who manufacture them, safe.

chris avatar

Thanks Liz, great to hear that you’re still making them.. am keeping eyes peeled at your various uk distributors

Dan avatar

Surely a zero would be overkill.
There are much smaller arduino based controllers that can do the job at least as well, with a plethora of libraries for configuring anything you can imagine (see QMK).
Does he take advantage of the pi in any way?

Nice clean design though :-)

Gary avatar

Sometimes the reason to do something is to demonstrate that it can be done. Plus the zero is pretty inexpensive. Not knocking using a micro-controller, but sometimes doing it the way everyone else does it is boring.

Hugo Hu avatar

I agree. Besides, the raspberry pi is more user friendly, and wallet friendly. Rpi 0 W for 10, 40 pins, or arduino uno for at least 12$, less pins, much less processing speed, ram, etc? Further, the raspberry pi is capable of more extensions(much more flexible) than the arduino. There are different uses for both.

BlastFX avatar

This isn’t a job for an UNO, this is a job for a Pro Mini. And unless you insist on sponsoring the Arduino project by buying the original, you can get an unbranded one for $1.50.
I fully agree with Dan – this is a prime example of what should have been an Arduino project. Not only is the Pi wasteful (both in terms of hardware cost and energy consumption), it is actually objectively worse for this application. A keyboard should be a real time system. You can do real time on an Arduino, you can not do real time on the Pi because the Linux kernel is not real time. If the guy at least used a kennel module, it would be somewhat decent, but he’s using python. With all the context switching required for all the components involved to work together and with Linux task scheduler’s relatively low time granularity, both input lag and jitter will be significantly worse than they would have been with an Arduino.
I’m a big proponent of using the right tool for the job and a Raspberry Pi is definitely not the right tool for this job.

BlastFX avatar

*Micro, not Pro Mini. (Micro has a built-in native USB support.) Sorry got them mixed up.

Comments are closed