A customizable USB keypad built on the Raspberry Pi Pico with a 128x32 OLED display, a 4x3 matrix of keys, and a control knob. Connect it to your computer and use it to control media, volume, and display custom status information.
- debug, test and clean up the code for both the pico and app
- create the 3D printed case for it (I'm no expert)
A Python GUI for easy configuration:
- gui.py: Main desktop interface with splash management and status controls
- splash_store.py: Save and load your custom splash screen images
- serial_transport.py: Handles USB communication with the device
- bindings.py: Configure which keys do what
- display_rules.py: Define what gets displayed based on system state
The code running on your Pico:
- main.py: Core device loop
- protocol.py: Manages serial communication with your computer
- display_control.py: Controls the SSD1306 OLED display
- inputs.py: Reads button and knob input
- Raspberry Pi Pico (or Pico W clone)
- 128x32 SSD1306 OLED I2C display
- 4x3 keypad matrix
- A control knob
-
Install desktop app dependencies:
pip install -r app/requirements.txt
-
Flash firmware to your Pico:
- Copy all files from the
firmware/folder to your Pico - (Instructions for flashing depend on your Pico setup)
- Copy all files from the
-
Run the desktop app:
python app/main.py
- Open the desktop app
- Go to the Display tab and find the Splash section
- Click Load Saved to load a previous splash, or create a new one
- Click Send on Connect to send your current image to the device
- Click Save Current to save it for future use
Your splash screen is stored as a binary file and automatically sent whenever you connect.
- Connected: Status updates appear instantly on your display
- Idle: If no new status appears for 2 seconds, your splash screen is shown
- Disconnected: The keypad displays the ready message and waits for reconnection
Run the included tests:
python -m app.tests.test_splash_store