ESP32-S3 Smart Macropad for Media, Audio Routing, and Discord Workflows
What It Does • Features • Hardware • Web UI • Quick Start
| Category | Details |
|---|---|
| Core Idea | A customizable desk-side macro controller for creators, streamers, and power users |
| Input | 5 macro keys + rotary encoder with push button |
| Visuals | 128x64 OLED + per-key icons + idle GIF playlist |
| Integration | USB HID keyboard + media keys + F13-F24 for app hotkeys |
| Config | Browser UI with layer naming, key mapping, icon upload, GIF upload, import/export |
RubuPAD is a programmable USB macropad with a browser-based configuration UI and persistent on-device storage.
You can:
- map per-button actions across multiple named layers,
- use dedicated F13-F24 key space for app-specific hotkeys and macros,
- control media playback and system volume,
- trigger Discord actions (mute, deafen, push-to-talk, custom shortcuts),
- upload custom button icons,
- upload idle GIF playlists for OLED playback.
Most PC apps can detect keyboard shortcuts. RubuPAD uses F13-F24 so you get extra non-conflicting function keys that normal keyboards often do not have.
That means you can bind in-app actions directly in OBS, Discord, editors, DAWs, browsers, launchers, and automation tools.
STL file included in this repository: RubuPAD.stl
- 5 programmable keys
- 3 independent, user-named layers
- up to 8 key actions per button
- per-button 32x32 monochrome icons
- rotary encoder for volume + push switch input
- volume up/down OLED animation overlays
- idle GIF playlist (up to 5 slots)
- browser configurator with import/export support
- persistent storage across power cycles
- OLED (SSD1306 I2C): SDA GPIO8, SCL GPIO9
- Buttons: GPIO7, GPIO15, GPIO16, GPIO18, GPIO17
- Rotary encoder: CLK GPIO13, DT GPIO14, SW GPIO6
- Onboard ARGB LED: GPIO48
Note: GPIO8 and GPIO9 are reserved for I2C in this build.
idf.py set-target esp32s3
idf.py build
idf.py -p COM4 flashcd web_ui
npm install
npm run devOpen http://localhost:8080 in Chrome or Edge and connect via Web Serial or visit https://rubupad-studio.vercel.app/
Tip: Keep a dedicated layer for each context (Streaming, Editing, Meetings) and name layers clearly in the web UI for fast switching.
esp32-macropad/
main/ firmware source
web_ui/ browser configurator
managed_components/ ESP-IDF managed dependencies
assets/ project images for README and posts
partitions.csv custom flash partition table (expanded NVS)
README.md primary project documentation




