Sebastian Staacks Designed a Dynamically Assignable Macro Keyboard with an E Ink Display The macro keyboard consists of eight buttons, an RGB backlit jog wheel, and a Pro Micro. 2 2 I love this. Sebastian Staacks developed a dynamically assignable macro keyboard with an E Ink screen. Generally, the device mimics a regular keyboard, but each button’s meaning is altered depending on the software being controlled. The macro keyboard connects to a PC via USB. Once connected, a PC recognizes it as a regular keyboard. Ahhh… the ease. This macro keyboard features a Waveshare 2.9″ ePaper module, 5V Pro Micro, eight Cherry MX switches, 12 RGB LEDs PL9823-F5, a rotary encoder EC11 and two legs for the press switch, four 10kOhm resistors, two 10nF capacitors, angled pin headers, and the PCB Staacks designed in KiCad. What’s so special about this is that a user can dynamically reassign keys, and the current key assignment is shown on the E Ink screen. For example, the top four keys serve as play, pause, and skip buttons. When pressed, the device sends it over to the PC as if the buttons were pushed on a regular keyboard with multimedia keys. If a user loads Gimp, then their functions work in that program. The device is built around Staack’s PCB, which was designed in KiCad. (📷: Sebastian Staacks) Keystrokes can also be assigned to the big knob on the bottom, which doubles as another button. This feature can control Gimp’s tool size or opacity. Pressing the wheel enables it to function as a ninth button, which can be associated with keypresses. For this project, it triggers a script to change the turning wheel’s function. The wheel can even be switched between a mouse wheel, left/right arrow keys, and volume control. When it’s functioning as volume control, it performs two tasks: it adjusts the volume and triggers a Python script that detects the volume, visualized with the LEDs. So, how does it work? The Pro Micro’s ATmega32U4 supports six USB endpoints. What this means is that a PC can recognize a USB keyboard, mouse, consumer keyboard, and serial interface. The latter allows the keyboard’s function to be dynamically changed. A simple protocol sends short commands to the serial interface that lets the Pro Micro know which keystrokes/mouse movements/media keys should be assigned to each button. A Python script determines which software is active and open and sends a new key assignment to the macro keyboard. More importantly, the Pro Micro acts as a keyboard or mouse without using the Python script. The Python script also sets the content of the E Ink screen. This is because the Pro Micro doesn’t have enough RAM to store the 128×296 screen’s image.