Native embedded interface
AMOLED Dashboard
The same useful glance, reimagined in color: seven full-screen widgets on a 2.16-inch ESP32 display.

3 / 7 widgets
The next workout, mileage, and a weekly target.
Display visualization
480 × 480 canvas
Seven full-screen widgets
66 bridge checks passed
Three-minute source polling
01 / Scope
What I owned
Interface design, native C++ firmware, display integration, data transport, clock persistence, and commissioning.
Problem
Carry the useful parts of the wide e-paper dashboard onto a small square screen without shrinking every widget into something too small to read.
Built
Built seven native LVGL views for clock, weather, Runna, training, the NYC Marathon, time progress, and Claude usage. Each fills the 480 × 480 canvas, with its own color hierarchy and recognizable service artwork.
Outcome
A commissioned ESP32-C6 dashboard with a rotating widget carousel, saved Wi-Fi reconnect and live updates on the current LAN, a verified USB data path, and clock restoration from the onboard RTC after a restart.
Engineering constraints
The conditions that
shaped the system.
A 2.16-inch square canvas needs one clear focal point at a time, rather than a compressed copy of the wide e-paper layout.
The ESP32-C6 memory budget rules out treating the display like a desktop browser; draw buffers and capture transport must stay bounded.
Unavailable measurements must stay unknown, and cached personal summaries must remain visibly stale rather than appearing current.
Private feeds require the Mac bridge to remain awake and reachable. Battery runtime, the office network, and physical touch gestures remain unverified.
02 / Key decisions
Tradeoffs made explicit
One widget at a time
A carousel gives every widget the full screen. Large figures, short supporting labels, and a consistent footer carry the hierarchy across all seven views.
Color with a purpose
Weather, training, race day, and tool usage each have a distinct palette. Official brand artwork adds recognition while the current measurement stays the visual focus.
Honest data states
The firmware and bridge preserve the difference between live, cached, and unknown data. A missing value is shown as a dash; a confirmed zero is still a real measurement.
Verify the transport
USB acknowledgments, local HTTP updates, saved Wi-Fi reconnect, and RTC restoration were checked on the connected device. Private feeds still depend on the reachable Mac bridge.
03 / Under the surface
Architecture
- ESP-IDF C++ firmware with LVGL rendering, a CO5300 QSPI display, and CST9220 touch-controller initialization
- Two 24-line RGB565 draw buffers keep rendering within the microcontroller memory budget
- An allowlisted JSON summary bridge supplies time, weather, training, fundraising, and usage states over USB and local HTTP
- UTC is saved to the PCF85063 RTC; startup rejects an uninitialized clock or oscillator-stop flag
Validation
- All seven native display-draw captures were reconstructed from the connected board on September 29, 2026
- 66 focused bridge checks passed, covering unknown values, confirmed zero, stale caches, date boundaries, private-source refresh, and reconnect behavior
- Two complete five-source polling cycles were observed at 179.95–180.34-second intervals
- On-device horizontal transitions produced 13 frames over 498–516 milliseconds at brightness 100
- Saved Wi-Fi reconnect, live updates on the current LAN, USB acknowledgments, and RTC clock restoration after a restart were verified
- C++
- ESP-IDF
- ESP32-C6
- LVGL 9
- QSPI
- Python
- USB Serial/JTAG
- Wi-Fi
- HTTP
- RTC
04 / Result
The native interface was flashed to the connected board and all seven display-draw captures were checked. The website tour runs the same UI design with curated example data; it is a visualization, not a photograph or live device feed.
Explore the seven screensEVIDENCE & BOUNDARIES
What this work demonstrates.
On September 29, 2026, all seven live native display-draw captures were checked on the connected ESP32-C6 board and 66 focused bridge checks passed. Saved Wi-Fi reconnect, live updates on the current LAN, USB acknowledgments, and RTC clock restoration after a restart were verified. Two five-source polling cycles took 179.95–180.34 seconds; horizontal transitions produced 13 frames over 498–516 milliseconds at brightness 100.
Shrink the whole dashboard, or give each widget the screen?
- Decision
- Use seven full-screen views with a shared carousel, clear visual hierarchy, and explicit data freshness.
- Tradeoff
- Only one widget is visible at a time. Rotation and manual navigation trade simultaneous overview for figures that remain readable on a small display.
Scope & limitations
The website images are rendered by the actual LVGL UI with curated example data, inside a device visualization. They are not photographs, live readings, or the private device cache. Draw captures do not establish optical display quality. Private feeds require the Mac bridge to remain awake and reachable. Battery runtime, the office network, and physical swipe/tap behavior remain unverified.
- Waveshare board documentation
Display, processor, touch controller, RTC, power-management hardware, and board interfaces.
- Waveshare board support
Official display and peripheral examples used as the starting point for the native firmware.