Real-time PC hardware monitoring on a WT32-SC01 ESP32 touchscreen display. An open-source alternative to AIDA64 sensor panels — using LibreHardwareMonitor, Python and a 480×320 TFT with touch navigation.
Monitor your CPU temperature, GPU load, RAM usage, disk health, network speed and fan RPM in real time on a standalone ESP32 touchscreen. Connects via USB serial to any Windows PC running LibreHardwareMonitor.
Perfect for: PC enthusiasts, overclockers, streamers, workstation monitoring, homelab dashboards, and anyone who wants a dedicated hardware stats display.
Most PC hardware monitoring solutions either require a second monitor or rely on expensive proprietary sensor panels. This project turns a cheap (~$15) WT32-SC01 ESP32 board into a fully featured system monitor — no WiFi needed, just USB.
- CPU Monitoring: Load (%), temperature, clock speed, power, voltage, history graph, per-core display
- GPU Monitoring: Load (%), temperature, VRAM, core/mem clock, power, hot spot, fan RPM, history graph
- RAM Monitoring: Usage (%), used/total/free in GB, visual block, history graph
- Storage Monitoring: Total capacity across all drives (TB), per-drive details with size and temperature
- Network Monitoring: Download/upload speed (KB/s, MB/s, GB/s), active adapter auto-detection, auto-scaled history graphs
- Fan Speed Display: System fans (motherboard) + GPU fan with RPM bars
- Disk Temperature Display: Color-coded per drive (green/yellow/red)
- Touch Navigation: Tap any area for a detail view, back button top-left — 7 detail screens + 5 advanced detail screens
- Advanced View: "..." button opens advanced monitoring with motherboard voltages, die temps, D3D loads, DIMM temps, disk I/O throughput
- Anti-Flicker Rendering: Direct LCD updates without full-screen redraws
- Auto-Reconnect: Detects USB connection loss (5s timeout), Python script survives port changes
- Color-Coded Temperatures: Green (<60°C) → Yellow (60–80°C) → Red (>80°C)
- Standby Clock Screen: When disconnected, displays time, date and disconnect duration — minimalist Apple-style design with dimmed brightness
- Time Sync: PC sends Unix timestamp + timezone offset, ESP32 keeps the clock running independently
Windows PC WT32-SC01 (ESP32)
┌────────────────┐ USB Serial ┌────────────────────┐
│ LibreHardware │ 115200 Baud │ │
│ Monitor │──── JSON/line ──→ │ 480×320 TFT │
│ (HTTP :8085) │ 2× per sec │ Touch Dashboard │
│ │ │ │
│ pc_monitor.py │ │ LovyanGFX + │
│ (Python 3) │ │ ArduinoJson v7 │
└────────────────┘ └────────────────────┘
| Component | Details |
|---|---|
| Board | WT32-SC01 (ESP32-D0WD, 4 MB Flash, 320 KB RAM) |
| Display | ST7796S 480×320 TFT (SPI) |
| Touch | FT5x06 capacitive (I2C) |
| Connection | USB (CP210x / CH340) |
| PSRAM | Not available — rendering directly to LCD |
# PlatformIO CLI
pio run -t upload# Start LibreHardwareMonitor as administrator, enable web server
# Install Python dependencies
cd windows
pip install -r requirements.txt
# Start the script
python pc_monitor.pyDetailed instructions: docs/SETUP.md
┌───────────────────────┬───────────────────────┐
│ CPU Ryzen 9 9950X │ GPU RTX 5090 │
│ ▓▓▓▓▓▓▓▓▓▓▓▓▓░░ 45% │ ▓▓▓▓▓▓▓░░░░░░░░ 30% │
│ 62°C 5800 MHz 170 W │ 48°C 16384/32768 MB │
│ [History graph 60s] │ [History graph 60s] │
├───────────────────────┴───────────────────────┤
│ RAM ▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░░ 58% 74/128 GB │
├───────────────────────────────────────────────┤
│ DSK ▓▓▓▓▓▓▓▓▓▓▓▓▓▓▓░░░░ 72% 5.8/8.0 TB │
├───────────────────────────────────────────────┤
│ NET DL: 12.5 MB/s UL: 4.2 MB/s │
├───────────────────────────────────────────────┤
│ FAN1: 1100 RPM FAN2: 850 RPM │
│ 990PRO 35°C T700 38°C │
│ T500 32°C SN850X 36°C │
└───────────────────────────────────────────────┘
┌───────────────────────────────────────────────┐
│ │
│ 20:32 │
│ │
│ Do, 12. Maerz 2026 │
│ │
│ │
│ ... 5 min │
└───────────────────────────────────────────────┘
| Tap Area | Opens Detail View |
|---|---|
| CPU (top-left) | CPU Detail |
| GPU (top-right) | GPU Detail |
| RAM row | RAM Detail |
| DSK row | Disk Detail |
| NET row | Network Detail |
| Bottom-left (Fans) | Fan Detail |
| Bottom-right (Disk Temps) | Disk Detail |
| "..." button (bottom-right) | Advanced Main |
| Tap Area | Opens Detail View |
|---|---|
| Motherboard section | Motherboard Detail |
| CPU Internals section | CPU Advanced Detail |
| RAM / DIMM section | RAM Advanced Detail |
| Disk I/O section | Disk I/O Detail |
| GPU section | GPU Advanced Detail |
| MAIN button (top-right) | Back to Main Screen |
wt32-hw-monitor/
├── platformio.ini PlatformIO configuration
├── partitions.csv ESP32 partition table
├── src/
│ ├── main.cpp Setup + loop, serial receive
│ ├── display.cpp Dashboard rendering (LovyanGFX)
│ ├── display.h Data structures, screen states
│ ├── parser.cpp JSON parsing (ArduinoJson v7)
│ ├── parser.h Parser interface
│ └── config.h Pins, colors, layout constants
├── windows/
│ ├── pc_monitor.py Python: LHM HTTP → serial JSON
│ ├── start_monitor.bat Autostart script (console)
│ ├── start_hidden.pyw Hidden background launcher (no window)
│ ├── requirements.txt Python dependencies
│ └── README.md Windows setup guide
├── docs/
│ ├── PROTOCOL.md Serial protocol documentation
│ ├── SETUP.md Detailed installation guide
│ └── TROUBLESHOOTING.md Troubleshooting guide
├── CHANGELOG.md Version history
├── LICENSE MIT License
└── README.md This file
| Area | Technology |
|---|---|
| ESP32 Framework | Arduino (via PlatformIO) |
| Display | LovyanGFX (direct LCD drawing, no sprite buffer) |
| JSON Parser | ArduinoJson v7 |
| Touch | FT5x06 via LovyanGFX (400 ms debounce) |
| Windows | Python 3 + LibreHardwareMonitor (open source) |
| Protocol | Compact JSON over USB serial, 115200 baud, 2 Hz |
ESP32 hardware monitor, WT32-SC01, PC system monitor, CPU temperature display, GPU monitoring, LibreHardwareMonitor, PlatformIO, touchscreen dashboard, real-time system stats, Arduino ESP32, serial hardware monitor, AIDA64 alternative, sensor panel DIY
MIT — see LICENSE
Found this useful? Give it a star and share it with the PC modding community!