Skip to content

Mostakim52/esp32-macropad

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

RubuPAD

ESP32-S3 Smart Macropad for Media, Audio Routing, and Discord Workflows

ESP32-S3 OLED Web UI

3 Layers 5 Keys F13-F24 GIF Slots Persistent Storage

What It DoesFeaturesHardwareWeb UIQuick Start


Overview At A Glance

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

What RubuPAD Does

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.

Why F13-F24 Matters

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.


Hardware Showcase

RubuPAD assembled macropad

3D Case / STL Renders

STL file included in this repository: RubuPAD.stl

RubuPAD STL render 1 RubuPAD STL render 2

Web Configurator Preview

RubuPAD Web UI screenshot 1 RubuPAD Web UI screenshot 2

Feature Highlights

  • 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

Hardware Pinout

  • 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.


Quick Start

Firmware

idf.py set-target esp32s3
idf.py build
idf.py -p COM4 flash

Web UI

cd web_ui
npm install
npm run dev

Open 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.


Repository Layout

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

About

A smart ESP32-S3 Macropad featuring a WebUI for real-time configuration, F13-F24 mapping, OLED GIF support, and persistent on-device storage.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages