Train Departure Board
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
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
- 2x 16x32 HUB75 RGB dotmatrix displays
- ESP32 microcontroller - ensure compatibility with your PCB
- PCB - ESP32 i2s Matrix Shield
- 5V, 8A power supply
- 3D printed case
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…