The premise of this project is simple - my family lives in London, there's a bus route that runs along our road, and we use it a lot to take the kids places.
The reality of using the bus is a little more complex - getting three kids ready to go out, is a nightmare and it's not made any easier by checking a travel app on your phone to see how close the bus is.
I don't think there is much I can do to make the preparation of the children any less manic, but I can certainly do something about the visibility of information about buses, mainly thanks to the excellent open APIs/data provided by Transport For London.
So, armed with their API, a Python 3 interpreter and a Raspberry Pi, I set out to make a little box for the kitchen wall which will show when the next 3 buses are due to arrive outside our house.
The code itself is easy enough to throw together because Python has libraries for everything (it also helps if you don't bother to design a decent architecture!). Requests to fetch the bus data from TfL, json/iso8601 to parse the data, Pillow to render it as an image, and APScheduler to give it a simple run-loop.
The question then becomes, how to display the data. The easiest answer would be a little LCD screen, but that brings with it the downside of having a backlight in the kitchen, which would be ugly and distracting, and it also raises the question of viewing angles. Another answer would be some kind of physical indicator, but that requires skills I don't have time for. Instead, I decided to look for an E-Ink display (think Kindle) - it would let me display simple images without producing light.
The first option I looked at was the PaPiRus, but it's in the window between its crowdfunding drive having finished, and being available to buy. The only other option I could find was the E-Paper HAT, from Percheron Electronics, which also started life as a crowdfunding project, but is actually available to buy.
Unfortunately, these displays are super fragile, which I discovered by destroying the first one, but Neil at Percheron was super helpful and I quickly had a new display and some tips about how to avoid cracking it.
My visualisation of this data isn't going to win any awards for beauty, but it serves its purpose by showing a big number to tell us how many minutes we have, and I managed to minimise the number of times you see the white-black-white refresh cycle of the eInk display with partial screen updates.
Here are some photos of the project in various stages of construction:
|Freshly assembled out of the box|
|The smallest USB WiFi adapter I've ever seen|
|Sadly I had to make some modifications to the |
PiBow case to fit this particular rPi
|Running one of the eInk display test programs|
|This would have been nice, but I cannot have nice font things.|
|PIBUS IS WATCHING YOU|
|Maybe aliens stole the Internet, maybe it's a bus strike.|
It doesn't matter.
|The final design, showing a fallback for when there is data for 0 < x < 3 buses|
|Data for three buses, plenty of time to get ready for the second one!|