A PlatformIO + Arduino firmware for the M5Stack Dial (v1.1) — a port of the official M5Dial-UserDemo (originally ESP-IDF) rebuilt on the Arduino framework, with a redesigned cyberpunk UI and a BLE volume controller.
The M5Dial is an ESP32-S3 rotary-encoder device with a 240×240 round display, touchscreen, RTC, buzzer, and a built-in RFID reader.
- BLE Volume Controller — acts as a Bluetooth HID device so the dial controls your computer's master volume. Rotate to adjust, press to mute. Mute-aware: while muted you can keep lowering the level (and drive the host all the way to 0) or rotate up to unmute.
- Stopwatch / Timer / Pomodoro — three time apps. The stopwatch times with centisecond precision, the countdown timer ends with a loud resonant alarm, and the pomodoro tracks focus/break cycles with session dots.
- Brightness Control — adjust and persist screen brightness (saved to NVS, restored on boot).
- More menu — extra apps: LCD test, RTC clock, RFID scanner, WiFi scanner, BLE heart-rate server, temperature demo, and power off.
- Cyberpunk HUD UI — neon gauges, CRT scanlines, 7-segment readouts, and a synthwave boot splash.
| Home Menu | Volume Controller | Brightness |
|---|---|---|
![]() |
![]() |
![]() |
| More Menu | Timer Screen | |
|---|---|---|
![]() |
![]() |
A custom angled desk stand with a pen holder and USB passthrough designed for the M5Dial. Download the print files from Printables:
M5Stack Dial Angled Desk Stand with Pen Holder & USB
| Component | Detail |
|---|---|
| MCU | ESP32-S3 (M5StampS3, 8 MB flash) |
| Display | GC9A01 240×240 round SPI LCD |
| Input | Rotary encoder + push button, FT3267 capacitive touch |
| Extras | PCF8563 RTC, buzzer, WS1850S RFID |
Requires PlatformIO.
# Build
pio run
# Build + flash to a connected M5Dial
pio run --target upload
# View serial output
pio device monitorTo use the BLE Volume Controller, open the app on the dial, then pair with M5Dial Volume from your computer's Bluetooth settings.
src/
├── main.cpp # Arduino setup()/loop() entry point
├── hal/ # Hardware abstraction layer (display, touch, encoder, RTC, buzzer)
└── apps/ # MOONCAKE app framework — launcher + individual apps
Based on M5Stack's M5Dial-UserDemo and the MOONCAKE app framework by Forairaaaaa.






