Ages ago I wrote a post on how to create a physical podcast player (“podcast in a box”) using Radiodan. Since then, we’ve completely rewritten the software, so those instructions can be much improved and simplified. Here’s a revised technique, which will get you as far as reading an RFID card. I might write a part 2, depending on how much time I have.
You’ll need:
- A Pi 3B or 3B+
- An 8GB or larger class 10 microSD card
- A cheapo USB soundcard (e.g.)
- A speaker with a 3.5mm jack
- A power supply for the Pi
- An MFC522 RFID reader
- A laptop and microSD card reader / writer
The idea of Radiodan is that as much as possible happens inside web pages. A server runs on the Pi. One webpage is opened headlessly on the Pi itself (internal.html) – this page will play the audio; another can be opened on another machine to act as a remote control (external.html).
They are connected using websockets, so each can access the same messages – the RFID service talks to the underlying peripheral on the Pi, making the data from the reader available.
Here’s what you need to do:
1. Set up the the Pi as per these instructions (“setting up your Pi”)
You need to burn a microSD card with the latest Raspian with Desktop to act as the Pi’s brain, and the easiest way to do this is with Etcher. Once that’s done, the easiest way to do the rest of the install is over ssh, and the quickest way to get that in place is to edit two files while the card is still in your laptop (I’m assuming a Mac):
Enable ssh by typing:
touch /Volumes/boot/ssh
Add your wifi network to boot by adding a file called
/Volumes/boot/wpa_supplicant.conf
contents: (replace AP_NAME and AP_PASSWORD with your wifi details)
country=GB ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1 network={ ssid="AP_NAME" psk="AP_PASSWORD" key_mgmt=WPA-PSK }
Then eject the card, put the card in the Pi, attach all the peripherals except for the RFID reader and switch it on. While on the same wifi network, you should be able to ssh to it like this:
ssh pi@raspberrypi.local
password: raspberry.
Then install the Radiodan software using the provisioning script like this:
curl https://raw.githubusercontent.com/andrewn/neue-radio/master/deployment/provision | sudo bash
2. Enable SPI on the Pi
Don’t reboot yet; type:
sudo raspi-config
Under interfaces, enable SPI, then shut the Pi down
sudo halt
and unplug it.
3. Test Radiodan and configure it
If all is well and you have connected a speaker via a USB soundcard, you should hear it say “hello” as it boots.
Please note: Radiodan does not work with the default 3.5mm jack on the Pi. We’re not sure yet why. But USB soundcards are very cheap, and work well.
There’s one app available by default for Radiodan on the Pi. To use it,
- Navigate to http://raspberrypi.local/radio
- Use the buttons to play different audio clips. If you can hear things, then it’s all working
shut the Pi down and unplug it from the mains.
4. Connect up the RFID reader to the Pi
Then start the Pi up again by plugging it in.
5. Add the piab app
Dan has made a very fancy mechanism for using Samba to drag and drop apps to the Pi, so that you can develop on your laptop. However, because we’re using RFID (which only works on the Pi), we may as well do everything on there. So, ssh to it again:
ssh pi@raspberrypi.local cd /opt/radiodan/rde/apps/ git clone http://github.com/libbymiller/piab
This is currently a very minimal app, which just allows you to see all websocket messages going by, and doesn’t do anything else yet.
6. Enable the RFID service and piab app in the Radiodan web interface
Go to http://raspberrypi.local:5020
Enable “piab”, clicking ‘update’ beneath it. Enable the RFID service, clicking ‘update’ beneath it. Restart the manager (red button) and then install dependencies (green button), all within the web page.
Reboot the Pi (e.g. ssh in and sudo reboot). This will enable the RFID service.
7. Test the RFID reader
Open http://raspberrypi.local:5000/piab and open developer tools for that page. Place a card on the RFID reader. You should see a json message in the console with the RFID identifier.
The rest is a matter of writing javascript / html code to:
- Associate a podcast feed with an RFID (e.g. a web form in external.html that allows the user to add a podcast feed url)
- Parse the podcast feed when the appropriate card id is detected by the reader
- Find the latest episode and play it using internal.html (see the radio app example for how to play audio)
- Add more fancy options, such as remembering where you were in an episode, stopping when the card is removed etc.
As you develop, you can see the internal page on http://raspberrypi.local:5001 and the external page on http://raspberrypi.local:5000. You can reload the app using the blue button on http://raspberrypi.local:5020.
Many more details about the architecture of Radiodan are available; full installation instructions and instructions for running it on your laptop are here; docs are here; code is in github.