Train Departure Board

Project preview

I built a departure board to find my quickest public transport to the city. This was a fun side project to learn about dotmatrix displays and microcontrollers. The panels are connected to a single ESP32 microcontroller via a custom PCB which drives everything.

The microcontroller connects over wifi to a local server which streams bitmap data to the displays, turning them into a full colour dot matrix monitor.

Features

  • A 2 panel dotmatrix display to show the next bus, train times
  • Shows the next bus and train times in real time (including capacity)
  • Shows the current time and weather
  • Shows the latest arrivals at Leeds Bradford Airport

Tech

Architecture

Frontend

  • PIXI.js to render the dotmatrix display to a headless canvas.
  • Allows for easy UI development and testing via a web browser.

Backend

  • Simple Node.js server to poll data from transport APIs
  • Streams transport and weather data to the frontend via websockets
  • Streams compressed bitmap data to the dotmatrix display via websockets
  • Dumb ESP32 websocket clinet to recieve bitmap data and display it

Hardware

Outcome

Works well day to day but has a few issues:

  • The 3D printed case reduces wifi signal significantly to the ESP32, so I had to move it closer to my router
  • Due to the architecture, I have to run a headless browser on my homelab to display the UI, which is a bit of a hack
    • I still stand that streaming bitmap data works better than driving from the ESP32 to give more flexibility…