Your stop,
on your shelf.
Live BKK departures for the stops you actually use, on a little screen by the door. One glance tells you when to leave. About €19 in parts. Open firmware, open API.
Connecting to BKK…
Shaped like the thing you're waiting for
The case is a BKK vehicle squashed into a desk toy: one of the blue electric buses or a yellow Ganz tram. The screen slides in between the doors, so departures show up where the windows would be.
The ESP32 and wiring hide inside the body, and the USB cable leaves through the back. The STL files aren't published yet.
How it works
$ cargo install espflash$ espflash write-bin 0x0 homestop.bin1Flash the firmware
One image, one espflash command. The firmware is native Rust on ESP-IDF. Use a data cable: charge-only USB cables can't flash.
2Pick your stops
Add a display in the app, copy its token, then pick its stops on the map. It loops through them in order.
- CONNECTING
3Plug it in
Any 5 V phone charger with 1 A or more, and any cable now that it's flashed. Then connect it to Wi-Fi from your phone, as below.
First boot
No serial console needed.
- On first boot the display starts its own Wi-Fi network called HomeStop, with no password.
- Join it from your phone. The setup page opens.
- Pick your home Wi-Fi, enter its password and paste the display token from Add display.
- It saves, restarts, then shows departures. To run setup again, hold BOOT for 3 seconds.
Parts
| Part | Where | Roughly |
|---|---|---|
| ESP32 boardA classic ESP32 dev board with 4 MB flash. The reference is an ESP32-D0WDQ6 board with a CP2102 USB chip.Typical listing | Typical listing | €6 |
| LCD panel2.4" or 2.8" ILI9341 SPI TFT, 240×320, mounted uprightTypical listing | Typical listing | €8 |
| CablesA USB data cable for flashing and nine jumper wiresTypical listing | Typical listing | €3 |
| PowerA 5 V phone charger, 1 A or more. Laptop ports and thin cables can brown it out when Wi-Fi starts. | A spare | – |
| Capacitor (optional)470 to 1000 µF across 5V and GND, if the board still resets when Wi-Fi starts | If needed | – |
| Case (optional)3D-printed. The STL is not published yet. | Print it | €2 |
| Total | Prices are rough and change often. | ≈ €19 |
Wiring
| Panel | ESP32 GPIO |
|---|---|
| SCK | 18 |
| MOSI (SDI) | 23 |
| MISO (SDO) | 19 |
| CS | 14 |
| DC | 27 |
| RST | 33 |
| Backlight (LED) | 32 |
Plus power and ground. Same pins as an M5Stack.
Prices are rough and change often.
Bring your own hardware
The display token works with anything that speaks HTTPS: an e-ink panel, a Home Assistant sensor, your shell prompt. One call returns every stop on the display with its next four departures, already in BKK's route colours.
It's the same call the reference firmware makes. Every 30 seconds it fetches the board with nothing but its token, checks the certificate against the ESP-IDF CA bundle and sets its clock from serverTime, so it needs no NTP. Each stop stays on screen for 8 seconds.
$ curl -H "Authorization: Bearer $TOKEN" \
"$HOMESTOP_URL/api/v1/display/board"
{
"serverTime": 1792948235,
"stops": [
{
"id": "F01019",
"name": "Astoria",
"departures": [
{
"route": "M2",
"headsign": "Örs vezér tere",
"departureTime": 1792948295,
"live": false,
"canceled": false,
"color": "E41F18",
"textColor": "FFFFFF"
},
{
"route": "M2",
"headsign": "Örs vezér tere",
"departureTime": 1792948595,
"live": false,
"canceled": false,
"color": "E41F18",
"textColor": "FFFFFF"
}
]
}
],
"attribution": "Data: BKK"
}