The question I ask every morning is whether to leave now or in ten minutes. The answer depends on things the timetable doesn’t tell you: is the train delayed, is it cancelled, and — the one that really matters — is it running short-formed? Five cars instead of ten means standing room only, and I’d rather know before I leave the house.
So I built a tiny departure board and stuck it under my monitor.
The hardware
Same Waveshare ESP32-S3 board as the macropad, in another very small 3D-printed enclosure — printed on my Creality Ender-3 V3 KE. Next to the screen there’s an RGB LED with a diffuser: a disk of 0.5mm plasticard, about 2cm across, sitting over the LED. One LED, one piece of plastic, and the light comes out remarkably even — no hotspots. It’s soldered together with a back cover, and the whole thing is mounted under my desk screen with double-sided tape. USB powered, Wi-Fi connected, no battery.
The architecture
Same philosophy as the Portal dashboard: keep the ESP32 dumb. A Node-RED instance on the Raspberry Pi pulls departure data from Darwin (National Rail’s real-time feed), filters it, and pushes updates to the ESP32 over MQTT. The ESP32 knows nothing about trains — it just renders what it’s told. All the API wrangling, the station filtering, the “which platform do I care about” logic lives on the Pi where it’s easy to change.
The screen shows the next three departures from my platform, drawn with LVGL. Departures in the opposite direction get filtered out on the Pi — I don’t need to see trains I’m never catching.
The light
The RGB LED shows the status of the next train only: green for on time, yellow for delayed, red for cancelled. It’s the thing I actually look at. The screen has the detail; the light has the verdict. From across the room I can tell whether to grab my bag or make another coffee.
It’s a small thing, but it’s changed my mornings. The information was always out there — Darwin publishes all of it. It just wasn’t on my desk until now.
As an Amazon Associate, Headless Diaries earns from qualifying purchases made through links on this page.