
Built a fully wireless, standalone dual-display K8s metric monitor using ESP32-C3 & Rust
Hey everyone,
I had some spare parts lying around and decided to build a standalone dual-gauge metric monitor for my personal Kubernetes cluster (specifically tracking CPU and memory on my two worker nodes).
Unlike my previous display setups that required an intermediary server to scrape and push frames, this device is completely standalone: the ESP32-C3 scrapes Prometheus endpoints directly over Wi-Fi and renders the UI itself.
The Build Overview
- MCU: ESP32-C3 Super Mini
- Displays: Dual GC9A01 240x240 circular LCDs
- PCB & Enclosure: Designed the custom PCB in KiCad and coded the parametric case in OpenSCAD.
- Firmware: Written in Rust using AI coding agents (Zed + Cursor)
- Power: Upgraded to an internal Li-ion battery + charging module for a completely wire-free desk setup.
The Fun Challenges (Troubleshooting)
- Font Porting: Initially prototyped the UI on macOS with TTF fonts, which the AI agent quickly helped convert to lightweight bitmap fonts for the ESP32 environment.
- SRAM Constraints & AI Over-Optimization: The ESP32-C3 has 400KB of SRAM. Between HTTPS overhead for Prometheus scraping and display buffers (taking ~120KB), the AI agent panicked and "over-optimized" by quartering the buffer and drawing in 4 passes, which caused terrible screen flickering. Since the MCU isn't running heavy background tasks, I dialed it back to render one full display buffer at a time, completely fixing the flicker.
- Case Iteration & Wireless Mod: My initial 3D print sizing was slightly off, allowing only the front panel to fit. Seeing the extra space needed, I iterated the design to pack a Li-ion cell, a charge/discharge protection board, and a power switch inside, turning it into a truly wireless desktop gauge.
Everything is open source. If you're interested in the code, KiCad schematics, or 3D models, feel free to check out the repo below:
- Github : https://github.com/suapapa/metric-gauge
- Youtube : https://youtu.be/ck8P2s1PN7U?si=lgz8Yw5uzvvvdpSD
Let me know what you think or if you have any questions about the Rust on ESP32 setup!