josh.earth
  • Blog
  • Apps
  • Portfolio
  • About
  • Joshternet
  • ← All projects

    LED Matrix Clock & On Air Sign

    A 16×16 LED clock and on-air sign combining embedded hardware, a local web interface, and a 3D-printed diffuser.

    2026 · Embedded Hardware · User Interfaces · 3D Printing · CircuitPython · ESP32 · LED Matrix · Web UI · 3D Printing

    I built this clock and On Air sign from spare parts to let my family know when I am on a video call. It was an exercise in designing the whole experience: an LED pixel display and its hardware to a browser-based control panel and the physical 3d printed enclosure. The full build story and source code cover the hardware and software in more detail.

    The finished LED matrix clock with its 3D-printed diffuser

    Designing for a tiny display

    The device uses a flexible 16×16 RGB LED matrix driven by an ESP32 board running CircuitPython. The display is bright enough to read across a room and can show a clock, timer, and scrolling messages.

    A 16×16 display has no room for menus, so I moved the more complex controls into a webapp served by the device over local WI-FI. Using multicast DNS means the user doesn't need to install any apps or do any setup. Just load ledclock.local in your phone web-browser. The interface controls the device through REST calls, and the response is quick enough to draw in a pixel editor and see the results on the real display almost immediately.

    The clock's browser-based control panel

    From parts to a physical object

    I started with a bare LED matrix, controller board, and some spare USB cables. After getting the pixels working and experimenting with the interface, I tested paper as a diffuser to make the LEDs easier to read. Later designed a stand and curved grid diffuser in OnShape (CAD) and printed it in white PLA, giving the electronics a more finished form.

    The bare matrix and controller during prototyping

    Testing a translucent diffuser over the LED matrix

    The project also let me experiment with using coding agents during development. Short iterations, serial output, and visual feedback let me diagnose hardware and rendering problems very quickly.

    Future refinements include a single power supply, smoother enclosure edges, and a rotary encoder for quick physical controls.