← Build Log

Pico OLED Hardware Monitor

Status: in-progress
Raspberry Pi Pico WMicroPythonSSD1306 OLEDFlaskUbuntu VM

What It Is

A physical hardware monitor built from a Raspberry Pi Pico W and a 0.96” SSD1306 OLED display. It sits next to the TrueNAS server and shows live system metrics at a glance — no need to SSH in or open a browser.

How It Works

The Pico W connects over Wi-Fi to a Flask telemetry bridge running on an Ubuntu VM on the TrueNAS server. The Flask app exposes a JSON endpoint with system metrics. The Pico polls this endpoint and renders the data on the OLED.

Metrics displayed:

  • CPU usage (%)
  • RAM usage (%)
  • CPU temperature
  • Storage usage
  • Backup status (last snapshot age)
  • System uptime

The EBUSY Problem

Early on, the Pico would crash with EBUSY errors — the I2C bus getting locked up when the display update overlapped with a new data fetch. The fix was dual-speed polling:

  • Fast loop (5 seconds): Refresh the OLED display with cached data, cycle through metric screens
  • Slow loop (60 seconds): Fetch fresh data from the Flask API

This keeps the display responsive without hammering the network or I2C bus. The OLED cycles through screens smoothly while data updates happen in the background.

Current State

The monitor is working and has been running reliably. The display cycles through metrics and the Flask bridge stays stable.

What’s next:

  • 3D-printed or laser-cut enclosure
  • Power via USB from the server (auto-start on boot)
  • Add network throughput metrics