open hardware · open source

An ambient ticker

Rotates stocks, weather, and the clock, then flips to a status sign whenever you need one. Built on an ESP32-S3, set up over Bluetooth from your phone.

The LED Ticker on a desk in its white frame, its red dot-matrix display reading BUSY, connected to an ESP32-S3 board over a white USB-C cable.

/ what it does

One panel. Many modes.

A rotation you set once. A sign or timer overrides it anytime.

Sign mode

Override the rotation with any text. Optional auto-clear timer.

Offline

Countdown timer

A live MM:SS countdown, ending in an animation, then back to ambient.

Offline

Stocks

Live quotes from finnhub.io. Free API key required.

Weather

Current conditions for the places you add. Worldwide, no API key needed.

24-hour clock

Steady HH:MM alone, scrolls when sharing the rotation. NTP-synced.

/ see it work

Phone to desk.

Set the rotation, signs, and timers from your phone.

/ under the hood

How it works.

Custom C++ firmware on an ESP32-S3 with Wi-Fi and Bluetooth.

Dual-core, non-blocking

Core 0 fetches quotes and weather; Core 1 drives the panel. A slow network never stutters the screen.

One protocol, many clients

One documented Bluetooth service, every write gated on a 6-digit PIN. The mobile apps are just clients of it.

Degrades gracefully

No Wi-Fi or API key? It drops into a setup mode. Signs and timers work with no network at all.

One button, two jobs

At boot, the BOOT button is the bootloader strap; at runtime, hold it ten seconds to factory reset.

Direct connections

It talks straight to Finnhub and MET Norway over your Wi-Fi. No server in the middle.

Remembers your setup

Wi-Fi and tickers save to flash; quotes and any active sign live in RAM. Pull the plug and it boots back to your rotation.

Go deeper: Firmware guide Bluetooth protocol

/ make your own

Build one.

Two off-the-shelf modules, a custom PCB, a 3D-printed frame.

Part What
MCU board Freenove ESP32-S3-WROOM (FNK0099) · onboard NeoPixel, native USB-C Buy ↗
Display 4-in-1 MAX7219 LED matrix (FC16 type) any
PCB Custom board carrying both modules · EasyEDA sources, order via JLCPCB Files ↗
Frame 3D-printed frame: top/bottom strips or a single bracket (STLs included) STLs ↗
Cable USB-C for power + flashing any

The PCB is optional. You can wire the matrix straight to the ESP32-S3 with jumper wires.

// then flash it

git clone https://github.com/ssayala/led-ticker
cd led-ticker/firmware
pio run -t upload   // build & flash over USB-C

No toolkit? No problem: flash it using Chrome and USB

3D render of the custom PCB that carries the Freenove module and the MAX7219 matrix header on a single board.
The custom PCB, designed in EasyEDA and fabbed at JLCPCB.