Pidio is a Raspberry Pi based wifi radio player featuring a blind-friendly pushbutton user interface. Below is the picture of the user interface.
To understand my thinking regarding this interface you have to know that I created this gadget for the grandmother of my girlfriend who is blind so I specifically designed the user interface to be blind-friendly. That's why I used a small number of tactile buttons with simple functionality.
Pushbutton feature matrix:
|button||short press||long press (at least 2 seconds)|
|button 1 (black)||load preset 1||save current station as preset 1|
|button 2 (black)||load preset 2||save current station as preset 2|
|button 3 (black)||load preset 3||save current station as preset 3|
|button 4 (black)||load preset 4||save current station as preset 4|
|button 5 (black)||load preset 5||save current station as preset 5|
|button 6 (white)||previous station||n/a|
|button 7 (white)||next station||stop / resume playback|
I originally wanted to enable the user to shut down / power up the Pi but considering that the boot time is 93 seconds it would have provided a bad user experience. Also, the Pi only consumes 3W idle, and 3.4W when streaming. The stop / resume playback button is still useful to conserve bandwidth.
Building the hardware
A word of warning: Please do not buy a noname Chinese shit power supply! My first power supply died within weeks. The second didn't provide enough power to drive the wifi dongle. Buy a power supply from a known brand and you'll be fine.
You've already seen the pushbutton user interface. This is the back side:
This circuit is really nothing more than 7 switch circuits (image is courtesy of Adafruit Industries) wired to a protoboard:
I used double sided foam tape to fixate the panel:
Almost assembled unit:
Fully assembled unit:
You can only partially see the Edimax EW-7811UN USB wifi dongle that is understandably a critical piece of this wifi radio.
apt-get install python-dev python-rpi.gpio mpd mpc. After trying to start up
pidio.py from a custom-written init script which failed over and over for some reason I simply included
/root/pidio/pidio.py & into
/etc/rc.local which did the trick.
If you ever decide to improve my work please consider using something other than mpd. Given that it needs to be restarted from time to time its daemon nature is actually a disadvantage. Also, being able to provide the size of the streaming buffer would be vastly usable for poor connections.
Retrieving Hungarian radio stations
- I was looking for Hungarian radio stations. Found and visited http://www.listenlive.eu/hungary.html
stations = $x('//table[@id="thetable3"]/tbody/tr/td/a/@href');
for (i=0; i<results.length; i++) console.log(results[i].value);
- Copy-pasted the output into hungarian-stations-all.m3u
- Ditched all the invalid stations and created hungarian-stations-filtered.m3u