Close
0%
0%

SmallOLED - Retro Arcade Clocks & Live PC Stats

Nine retro games reimagined as animated clocks on a 128x64 OLED, driven by an ESP32-C3. Doubles as a live PC stats display.

Public Chat
Similar projects worth following
0 followers
SmallOLED is a small WiFi desk display built on an ESP32-C3 and a 128x64 monochrome OLED. When your PC is off, it turns into an arcade-themed clock: Mario bumps the digits with his head, Space Invaders shoot them apart, Pac-Man eats them, a Nokia snake hunts their leftover pellets, Tetris rebuilds them block by block, an Asteroids ship blasts them into vector shards, the Chrome dino's pterodactyl carries them away, and TRON light cycles retrace them.

Every sprite is procedural 1-bit pixel art drawn into a 1 KB framebuffer - no bitmaps and no game ROMs, just fillRect, drawPixel and drawLine, the same way we squeezed graphics out of early home computers.

When the PC is on, the same screen shows live CPU/GPU temperatures, loads, fans and network stats, or an audio spectrum visualizer. Everything is configured from a built-in web page and flashed from a browser. Fully open source.

Code, web flasher and PCB files: github.com/Keralots/SmallOLED-PCMonitor

THE IDEA
I wanted a tiny desk gadget that would earn its place even when the PC is switched off. A clock was the obvious answer, but a plain clock is boring. So every minute change became a small game event, played out on a 128x64 1-bit screen, the kind of resolution that 80s handhelds and early home computers had to live with.

THE CONSTRAINT IS THE FUN PART
- 128x64 pixels, 1 bit per pixel: the whole frame is 1024 bytes
- No sprite sheets and no bitmaps: every character is drawn procedurally from rectangles, pixels and lines
- The Asteroids clock is pure vector: drawLine only, delta-time physics, screen wrap
- The frame is pushed over I2C at about 35 fps, so the animation has to work within that budget
- Idle animations run all minute long, and at second :56 the "event" starts, so the new digit lands on time

THE CLOCKS
- Mario: Mario walks in and jumps to bump each changed digit. Optional idle encounters: he stomps Goombas and fireballs Spinies between minutes
- Space Invaders: an invader patrols, then lasers the changed digit, which explodes with gravity-driven debris
- Arkanoid: Breakout-style ball physics knock digits out and rebuild them
- Pac-Man: digits are made of pellets, and Pac-Man eats them before the new digit bounces in
- Snake: a Nokia-style snake roams around the digits. Changed digits crumble into food that it hunts down
- Tetris: block-grid digits are rebuilt with drop-in slabs or falling dots, and tetrominoes tumble in the background
- Asteroids: the wireframe ship drifts with inertia and splits rocks, then shoots digits into spinning line shards
- Dino Runner: the Chrome T-Rex jumps cacti, and a pterodactyl snatches the old digit while the new one drops in
- TRON: two light cycles duel with trails, and one retraces the new digit stroke by stroke
- Plus Standard, Large and a Cycle All mode

HARDWARE
- ESP32-C3 (SuperMini module, or my own 27x27 mm carrier PCB)
- 0.96" SSD1306, 1.3" SH1106 or 1.54" CH1116 128x64 I2C OLED
- Optional TTP223 touch button: tap to switch modes or cycle clocks, hold to dim an LED night light
- 3D-printed case with Space Invaders and Pac-Man ghost inlays

WHEN THE PC IS ON
A companion app (Windows/Linux) reads sensors from LibreHardwareMonitor and streams them over UDP. You pick which metrics to show, with labels, progress bars and layout set from the web UI. It can also stream audio for a spectrum or oscilloscope visualizer. When the PC shuts down, the device falls back to the clock by itself, using NTP time with automatic DST.

SOFTWARE
- Firmware: C++ / PlatformIO, Adafruit GFX
- Web config page served by the device itself, plus JSON export/import and OTA updates
- HTTP API for Home Assistant / Node-RED (switch clock style, dim, force a mode)
- Browser flasher: no toolchain needed, just Chrome or Edge over USB

LINKS
Source: https://github.com/Keralots/SmallOLED-PCMonitor
Web flasher: https://smalloled.stolaris.dev/
Video:

  • 1 × ESP32-C3 SuperMini main MCU, WiFi, runs all clocks and the web config page
  • 1 × 128x64 I2C OLED display 0.96" SSD1306, 1.3" SH1106 or 1.54" CH1116
  • 1 × SmallOLED carrier PCB (27x27 mm, 2-layer) optional, replaces hand wiring; gerbers on PCBWay Shared Projects
  • 1 × Carrier SMT parts AO3400A, 18R, 100R, 10k - factory assembled
  • 1 × TTP223 capacitive touch module optional, mode switching and LED dimming

View all 9 components

  • 1
    Assembly video using custom PCB
  • 2
    Assembly video using custom led driver

View all instructions

Enjoy this project?

Share

Discussions

Does this project spark your interest?

Become a member to follow this project and never miss any updates