Software Engineer
Working with multiple computers at my desk, I wanted a way to seamlessly switch between them without constantly reaching behind monitors or fumbling with separate switches. I designed this under-desk control panel to act as a centralized KVM (Keyboard, Video, Mouse) hub with controls for additional peripherals.
The panel manages dual HDMI switches, a USB hub switch for shared peripherals, speaker channel routing between computers, and MOSFET-controlled USB power for accessories like an audio mixer and a meeting countdown sign.
The user-facing module houses the ESP32-C3 microcontroller and all input/output controls. A 0.96" OLED screen displays the current state of connected peripherals. Latching switches control the HDMI sources, while a momentary button toggles the USB hub between computers. Toggle switches route left and right speaker channels, and a rotary encoder provides additional input for menu navigation and settings.
The firmware is written in Rust using a
no_std environment with the esp-hal crate
and Embassy async
framework. The control panel also integrates with a companion
Meeting Sign project via manual bit-banged UART for timer control.
View the full source code and technical documentation on
GitHub.
Located behind the desk, this module houses the custom distribution PCB I designed that connects to all the peripherals. The front and back modules communicate via CAT5 ethernet cables, which provide a standardized connection with plenty of conductors for power, ground, and signal lines. This modular design streamlined installation and maintenance.
The simple custom PCB handles signal distribution and power switching. I used P-Channel MOSFETs (IRLML6402) to control USB power, with gate resistors and pull-ups to ensure safe behavior during MCU boot. Voltage dividers step down 5V signals to 3.3V for the ESP32 GPIO pins to monitor USB hub state:
I designed both enclosures in CAD, optimizing for under-desk mounting with all inputs and outputs oriented on the same side. I also designed the front module to allow mounting my existing standing desk control panel. Explore the CAD models below: