I have been using the ErgoDox keyboard for the past two years and was recently in search of a wireless edition. Given that one wasn't commercially available, I set out to build my own. In the process, I designed the case, drew the circuit board, wrote the firmware, and assembled the resulting keyboard. This blog post describes the process and how you can do it too.
Is it possible to make it wireless without needing a controller?
It is definitely possible. I personally didn't really care to do that since I mostly use the keyboard with my desktop. When on the road, a cheap 2600mAh power bank from Micro Center ($2.99 as of writing) should be enough for almost an entire day. If you turn the controller off when not in use, it will obviously last even longer.
In order for the two halves to maintain a consistent state such as the active layer and the active modifiers, you must have one "parent" half and one "child" half. The parent would need to receive data from the child, which is more energy intensive than more power than sending data to a central controller. This obviously results in a shorter battery life. It is possible to lower the power consumption by increasing the Bluetooth connection interval though that will increase the latency. One can theoretically double the battery life by having the two halves periodically swap roles. That introduces its own set of complexities that may or may not be worthwhile.
Why does this not use QMK?
I wanted several features that would have been difficult to implement on top of the QMK framework. In particular, I wanted it to support multiple devices simultaneously and be able to support slightly key mappings on each. Given my familiarity with Go, it made much more sense to use it and implement the firmware from scratch. On the keyboard halves themselves, matrix scanning and debouncing were also very straightforward to implement from scratch. It therefore made very little sense for me to consider QMK.
Is it possible to make the keyboard solar powered?
Even with solar panels, a battery will always be required since the amount of available light fluctuates and the microprocessor needs a consistent source of current. I experimented with a 30mm by 53mm solar panel from AliExpress that can supply up to 30mA. While the solar panel had no issue supplying 30mA in direct sunlight, it supplied very little current in a more common indoor environment. Though 30mA is more than enough to power the microprocessor, it is not enough to trigger the charging integrated circuit and have it charge the battery.
I have been experimenting with several other microprocessors/boards such as the Nordic nRF52840 Dongle that has significantly lower battery consumption. It should be able to reduce the power consumption by 90%, possibly even more. That should more or less get to the point where the battery lasts for a few years, though the battery's self discharge rate will certainly be a factor. ↩