I wanted a real, physical volume knob for my computer, the satisfying kind you can grab and spin without hunting for a slider. The M5Stack Dial (an ESP32-S3 rotary encoder with a 240×240 round display) was the perfect canvas, so I built M5Dial Toolkit: a from-scratch PlatformIO + Arduino firmware with a redesigned cyberpunk HUD and a stack of genuinely useful apps.
It started as a port of M5Stack's official ESP-IDF demo, but I rebuilt it on the Arduino framework, swapped in a NimBLE-based HID stack, and gave the whole thing a neon synthwave makeover, glowing gauges, CRT scanlines, 7-segment readouts, and a boot splash to match.
- 🔊 BLE Volume Controller: The dial pairs as a Bluetooth HID device and controls your computer's master volume. Rotate to adjust, press to mute. It's mute-aware: while muted you can keep lowering the level (or drive the host all the way to zero), and rotating up unmutes.
- ⏱️ Timer, Stopwatch & Pomodoro: Cyberpunk-styled time tools, including a pomodoro with focus/break cycles and a loud resonant end alarm.
- 💡 Brightness Control: Adjustable screen brightness, persisted to NVS and restored on boot.
- 🧰 More Menu: Extra utilities: LCD test, RTC clock, RFID scanner, WiFi scanner, BLE heart-rate server, and a temperature demo.
No extra wiring required, everything runs on the stock M5Stack Dial v1.1.
3D printed standTo make it a permanent desk fixture, I designed an angled desk stand with a pen holder and USB passthrough. Print files are free on Printables:👉 https://www.printables.com/model/1758751-m5stack-dial-angled-desk-stand-with-pen-holder-usb
Build & flashRequires PlatformIO:
pio run # build
pio run --target upload # flash to a connected M5Dial
pio device monitor # serial outputThen open the Volume app on the dial and pair with M5Dial Volume from your computer's Bluetooth settings.
How it's built- Framework: PlatformIO + Arduino (ESP32-S3)
- Graphics: LovyanGFX, drawing to an off-screen sprite canvas for tear-free updates
- BLE: NimBLE-Arduino + ESP32 BLE Keyboard for HID media keys
- App architecture: the MOONCAKE app framework, each feature is a self-contained app with a clean
onCreate / onRunning / onDestroylifecycle
- Source code:https://github.com/haydn9000/m5stack-dial-toolkit
- 3D stand:https://www.printables.com/model/1758751-m5stack-dial-angled-desk-stand-with-pen-holder-usb
Based on M5Stack's M5Dial-UserDemo and the MOONCAKE app framework by Forairaaaaa.






Comments