HomeProjects/Macropad Controller
Embedded + Desktop

Macropad Controller

A tactile control surface for workflows: 12 macro keys, 4 encoders, and RGB feedback — paired with a desktop app for press/hold macros and per-app volume control.

WIP2025–2026ESP32USB HIDFastLEDPythonGUIEEPROM
Macropad Controller

Gallery

What it is

A programmable macropad with physical controls and real-time RGB feedback. It’s built for fast actions (macros), precise adjustments (encoders), and clear state visibility (LED rings).

Why it exists

It was a new hobby learning about electronics and a wanted a simple macro button for my pc, but one thing led to the other and developed the full PCB for this together with 3d modeling for the case.

How it works

The desktop app assigns press/hold macros and target apps for volume control. The ESP32 executes input logic with serial monitoring and that gets transformed into keyboard inputs, the LED animation is synced to system state of the assigned program's volume percentage..

Key capabilities

Designed around muscle memory: fast macros, precise control, and clear feedback.

Press vs Hold macros
Assign separate actions for tap and hold, with a configurable threshold in milliseconds.
Per-app volume control
Encoders adjust volume for selected programs, and the LED bars reflect the current level.
LED state syncing
RGB strips and encoder rings display color + fill based on system state and app selection.
Persistent settings
Color profiles and device preferences persist across reboots using EEPROM.
Macro recording UI
Record key sequences automatically or enter them manually, then bind to any button.
Profiles
Switch layouts per workflow. Export/import profiles as JSON.
Roadmap
Last updated: Feb 2026
WIP (now)
Macro editor, press/hold mapping, LED syncing, core firmware stability.
Beta
Profiles + export/import, device discovery, per-app volume routing polish.
v1
Installer packaging, cross-platform hotkey backend, full documentation + demo video.
Architecture
ESP32 firmware
  • Encoder + button input scanning
  • Hold threshold + action dispatch
  • FastLED strips + ring feedback
  • EEPROM persistence (colors/settings)
Desktop app
  • Macro recording + manual entry
  • Per-app volume selection + control
  • Profiles (save/load/export JSON)
  • Sync state → LEDs (color + fill)