index
Project · Embedded systems

Bus Wait Display

A small, always-on embedded device that polls ATM Milano's GiroMilano endpoint every five seconds and tells me, right there on my desk, when the next bus is coming.

Board
ESP8266
Display
16×2 I²C LCD
Source
ATM GiroMilano
Refresh
5 s (configurable)
License
CC BY-NC-SA 4.0

Milan's ATM publishes real-time arrivals for every stop. The official app is fine; an LCD on your desk showing the next two buses at a glance is better. No phone to unlock, no app to open, no notification to miss.

What the LCD looks like

How it works

Wiring

LCD VCC3V3 LCD GNDGND LCD SDAD2 LCD SCLD1

The I²C LCD is nominally 5 V, but runs fine at 3.3 V in practice — which is exactly what the ESP8266 hands out on its logic pins, so no level shifter needed.

Dependencies

ESP8266WiFi, ESP8266HTTPClient, WiFiClient, ArduinoJson, LiquidCrystal_I2C.

Build

$ git clone https://github.com/lindaniele/bus-wait-display
$ open main.ino in Arduino IDE
$ set SSID, password, lineCode, stopCode
$ select board: "NodeMCU 1.0 (ESP-12E)"
$ Upload

Five seconds is configurable; I keep it at five because the ATM API is generous and because standing at a bus stop staring at an empty display feels worse than it should.

→ Firmware on GitHub