Customization
The main priority of the final product is giving complete customization over the hardware and software to the user. Not only should they be able to form any physical variation they can think of, but they should also be able to configure the software layer to perform any tasks possible within the computer's limits.
Compatibility
Another important property of the final product is compatibility with a wide variety of devices and operating systems. The microcontroller needs both Bluetooth and USB connections. This allows for connecting to laptops and tablets in addition to just PCs. The software should work the same on Windows, Linux, or MacOS, despite each having its own individual APIs that will need to be considered when programming.
Functionality
The final product needs to be high quality to compete with standard keyboards. The switches themselves should feel and operate like other high-quality keyboard switches, as well as come in the multiple options that standard keyboards do (linear, tactile, clicky, etc.). The sturdiness of the assembled product will be a challenge to achieve, but necessary to ensure the success of the product.
Key Design
The Cherry MX Switch Breakout components allow for custom matrix configuration of key switches. They allow for mechanical switches to be mounted on top and have metal connectors on all 4 sides for customizing the keyboard. In order to make the keys modular and quickly connectable and separable, a 3D printed shell will be made, with metal pin connectors exposed to the outside wall of the shell, and connected to the metal connectors on the inside as opposed to a permanent connection between the breakout switches. Since the main functionality of the units comes from the breakout component and the metal connectors, the switch type can be easily swapped out to create multiple options.
Main Key Design
The Main Key is required for all builds, and contains the microcontroller. The keys previously designed are capable of providing input to any microcontroller. I believe the ESP32S3Mini is a perfect choice for its capabilities and minimal size. It will be located under the breakout component of the main switch within the 3D-printed shell. Subsequent keys that are added will be recognized by the microcontroller through the breakout components matrix design.
Software Design
The software will be written in C, to easily access the OS-specific API. The UI will be done using the libleif library, which is cross-platform and allows you to easily implement modern UIs in C. The UI will display an interactive map of the current keyboard configuration. Clicking on a key will open up an action menu. Here the user will be able to configure a key binding, configure a series of macros to the key, execute commands via that key, launch programs via the key, and call PowerShell or shell scripts. Each of these tasks will be unique to the OS, but the front end will be universal to all OS.