The day has finally come. I was able to finally create the firmware for my waka keyboard. Safe to say I’m pretty happy about it. I think the hardest part for me was realizing that I could have done it much sooner and could have finished the build last week rather than having to wait this long.

I hesitated.

Mostly because it is a new thing for me and I’m not used to it yet. The really good part here though is that I am learning a little more on how hardware and firmware sort of work together. Took me a little bit to get a slight understanding how all the pins were being used. I say pins because the pillbug I used was a drop in replacement for the blackpill dev board.

I know there is still quite a bit that I need to read about and better understand but the nice part is that once I get the correct key mapping in place I won’t have to worry too much after because it’s all setup. That and once get it all working the way I would like it really will be easier for me to practice touch typing and not have to think about where a specific key is located. It really will take some getting used to since I got really comfortable and familiar with a keyboard that has the keys bunched together. The waka is an ortholinear keyboard and has some space in between the keys in the middle.

All this to really say that when I was making the firmware I sort of had to learn how the hardware worked a little bit. I had to look at two different repositories in order to get things up and running and to be honest it was really cool to see it all running once I got it all done. I did make a public repo as well because I know there will be at least one other person looking to get their keyboard working.

Which one?

What I used for my keyboard was ZMK. Or rather that is what I used in order to make the firmware. The really cool part was that I didn’t really need to do a lot for this to work. I wound up using a total of five files which was great. The required files and one more. I followed a YouTube video while trying to better understand how the firmware works. The nice part being I was able to learn along the way.

The thing too is that I’ll be able to help others along their path as well when it comes to making their firmware. The one thing I do want to do though is maybe make a guide for that since some of the documentation on the site may be a little weird for some. I know I had some issues understanding how things worked. The other thing too is that the method I wound up going with uses GitHub Actions; now don’t get me wrong I like using that but I would prefer to be able to run things locally as well rather than having to push things remotely and wait. I would rather wait locally.

As for the files. I’m sure there are some people who are probably wondering what ones are needed, as I mentioned earlier, it is four required ones.

Files used

  • Kconfig.defconfig
  • Kconfig.shield
  • {keyboard}.keymap
  • {keyboard}.overlay

Crazy but that’s all it was. I did have to include one more because I was using an encoder and that was a {keyboard}.conf file.

I know you are probably thinking or even wondering what they all do and to be honest once I wrote them out it was somewhat intuitive and it was funny how it didn’t quite click right away.

My understanding of files

The first two Kconfig files define the board and what will be shown when you connect either via USB or Bluetooth. The keymap is pretty self explanatory but there was a bit of nuance in that you have to add in a few lines depending on what you would like the keyboard to do. Things like encoders, LEDs, or even if you have a display. That’s also part of the reason the conf file was added in order to tell the build process to include the correct files for that support.

The overlay was a bit of a weird one for me because this was where I had to do a bit of searching. I had to look up how the pins, the rows and columns were setup which to be honest was great because it gave me a much better understanding of how to code for hardware.

I say that because I know down the line I want to create a random macro pad or small keyboard just to tinker with. I like messing with hardware more and more too. When I can solder something or wire it up it makes me happy; even just taking things apart is fun for me.

I think the next thing I’ll be doing is probably creating a quick guide on how I really did things and what steps I took with screenshots too. I know on the MechWild discord there are some people who could also benefit from it.