Software apps and online services
Hand tools and fabrication machines
The Cassette Pi is a self-contained real-time notification scroller, all housed neatly inside a transparent cassette tape. A Raspberry Pi Zero is sandwiched between the two tape reels, retrieving all manner of Internet of Things notifications from the fabulous IFTTT (If This, Then That) service, delivered almost instantly to the Pi via an Adafruit.IO feed and a Python script. The whole cassette vibrates to alert you to the incoming notification, and the text is then scrolled clearly across a Pimoroni 11x7 LED display.
Everything is powered by a 150mAh LiPo battery, connected to the Pi via a LiPo Shim - also within the cassette is an Adafruit Micro Lipo so when the battery runs low it can be plugged directly into a Micro USB power source to grab some juice.
The most fun part is that thanks to some trimming of the Pi itself, the cassette can still fit inside any vintage tape player, turning that old ornament into a functional and classy Internet of Things device.
The Cassette Pi is perfect for use as a conference badge too, dangling from a lanyard and scrolling your name or a custom message.
In case you can't see the embedded video you can find it at https://youtu.be/kgY40e9mi8w- it's well worth a look to see this little scroller in action!
I was inspired to build the Cassette Pi by the "Clear Tech" trend of the 80s and 90s, when devices started to be released in see-through versions, with all the components on show. I was also fascinated to see if it was possible to fit a whole self-contained Pi project inside a cassette tape, making a tactile and useful device that would still fit inside old tape machines.
The starting point was the set of components for the power, using a LiPo battery, LiPo Shim and Micro Lipo, connected up via a DPDT (Double Pole Double Throw) slide switch - I used a similar setup in the Flirt Pi Radio project and it's proved to be a reliable combination. The switch toggles between two states, alternately connecting the tiny battery either to the Pi or to the Micro USB charger, ideal for such a small project.
Next came the display - I used a Pimoroni 11x7 LED display because it's so thin and light, making it perfect for this build. It's also conveniently the same size as a cassette tape "window", which really attracted me to it. Lastly I grabbed a half-dozen tiny 3v vibrator units from eBay, to add in some haptic feedback. Gathering all the parts was straightforward, now all I had to do was fit them inside the tape!
I began by laying out the power components inside a dismantled cassette tape, measuring & routing the cables between them so that they'd be exactly the right length without blocking the cassette reels or bunching up too thickly, The inside of a cassette is only about 4-5mm so this took a lot of trial and error!
The Micro LiPo and LiPo shim boards came complete with 2-pin JST connectors but these were way too thick to fit inside, and had to be filed down to half their height - handily though both boards had their battery connectors broken out to solder points so I was able to wire them up to one another directly.
Next I carefully soldered in the Pi itself, linking it to the LiPo Shim and adding in cables for the display. Lastly I soldered in the little vibrator unit to the GPIO.
Fitting the Pi Zero between the cassette reels was a no-brainer, there was literally nowhere else it could go and still leave enough space. After a while though I realised this was going to cause a problem. Although the Pi fitted in fine, just peeping out about 1mm from the top and not obscuring the reel holes, I hadn't considered that tape players stick thin metal spikes through the cassette, to help guide the tape. As it stood these spikes would poke directly into the Pi board, making it impossible to fit inside an old player.
Looking for solutions online I came across some fantastic x-ray pictures of the Pi Zero by flickr user UltraPurple (Giles Read) - close inspection of the image suggested I could possibly get away with nibbling away some of the board, making enough room for the pesky spikes and still leaving the Pi operationally intact. I agonised over doing this as I really didn't want to destroy the Pi, but took a deep breath, a drill and a small file and set to work. I was able to cut away the two bottom corners of the board quite easily, and was so relieved when the Pi booted up afterwards.
Despite having chopped down most of the components to make them fit, trimming was also needed inside the cassette body to allow them to actually fit inside. I destroyed about a half-dozen old tapes experimenting with different tools and techniques for this operation, but still approached the final "clean" version very nervously. By now I was down to my last see-through tape (bought pristine and unopened from a charity shop) and wanted to keep it as scratch-free as possible.
To achieve this I stuck stickers over the vulnerable parts and used the bench-press holder for my rotary tool so I'd have better control over it. It probably took around 2 hours to carefully nibble away the tiny bits of plastic, but I managed not to scratch it up too much.
Next I held the individual circuit boards in place, marking with a fine CD pen where each soldered joint would go. The solder only stuck out the back of the board about 1mm but even this was enough to make the assembly too thick, so each soldered cable had to have a hole precisely drilled to accommodate it.This was extremely fiddly but had an unexpected bonus - with everything being so tight the soldered parts in their holes actually held the components in place, meaning they didn't need to be glued or bolted.
The Cassette Pi script retrieves the notification text from an Adafruit.io feed, checking it every few seconds for new content. This feed is populated by the IFTTT (IF This, Then That) service, which grabs data from multiple online services.
Using an Adafruit.io feed to retrieve data is perfect for this kind of application - if you've not tried it yet you can create a free account at https://io.adafruit.com/ - you'll receive a Key and Username as part of this process, both of which are used in the Cassette Pi script, which is derived from the many Adafruit Python Examples . This script and many of the examples need you to have a Adafruit.io feed set up in advance, and they have an excellent guide to the process.
Once your feed is set up, you can install the adafruit.io modules on your Raspberry Pi by simply typing...
pip3 install adafruit-io
..into a terminal window. With these modules installed you can now use Python to easily retrieve data from a feed, as well as send data to it from your Pi, for example to populate an Adafruit.io dashboard.
With the feed up & running you'll want to connect it to IFTTT, so that you can pass data to it from other online services. Log in to IFTTT (signing up is free) and search for Adafruit in the Services menu. Follow the steps to link your account. Now you can create Applets to grab data from online services and pass it to your Pi!
All of the individual data connections for this project are configured on the IFTTT website, using the following services:
- Android Device - for battery notifications and alerts from specific apps, such as when the Amazon app says a parcel is nearby.
- WebHooks - for incoming alerts from other IoT devices, such as motion detected by our MotionEye cameras or YouTube subscriber numbers fed from the E-Ink YouTube Counter.
- Twitter - to display tweets from specific accounts, such as @Raspberry_Pi, @GuardianNews and @FactSoup.
- RSS Feeds - to alert me when new podcast episodes are available.
- Weather Underground - great for changing weather conditions, temperature and ice alerts.
- Google Assistant - useful for dictating voice messages to be converted to text and scrolled by the tape.
The above are just a small sample of the services that can be added to IFTTT as the "IF This" portion of the link, with all of them funnelling data to the "Then That" side, which is linked to the Adafruit.io feed. The best part of this is that the text can be customised, so for example when the Weather Underground service says my local wind speed is above 40mph the text that's passed to Adafruit and scrolled is "Hey it's a bit blowy out there".
The script I used is available on GitHub, and could easily be adapted to work with different LED / LCD displays.
The final assembly of the project went really well - until I tried to put the two halves of the cassette together. Although all of the components had been well trimmed, there were too many cables competing for the same few mm of space, and I didn't want to risk squishing them too hard. I had no option in the end but to de-solder the Micro LiPo board, re-soldering it to the switch with longer cables that could be routed away from the others. At this point I'd done so much trimming, snipping and filing that I was seriously doubting whether it would ever work. I'd even had to carefully chop 1mm off the switch housing and another 2mm of metal off the Pi's Micro USB port to make them fit.
The worst part was I wasn't able to test it as I went along, as the display couldn't be soldered on until everything else was put together. Shaving down and fitting the original plastic reels was a really fun part towards the end of the build, though this in itself took a fiddly couple of hours with small files and snippers.
At last everything was sitting comfortably, with all the components literally held in place by each other, and I stuck the display to the tape before soldering it, effectively sealing the whole thing shut. It was an incredibly nervous minute waiting for it to boot up for the first time, but sure enough it sprang into life, to enormous relief.
Sometimes projects can feel a bit like "work", but this one was just fun all the way, I've never enjoyed making anything so much, and I'm so pleased with the final result. Something about the really tiny measurements really floated my boat, along with the ever-present question of whether it was even possible to fit everything in.
Cassette tapes and the Raspberry Pi are two of my favourite things in the world, so it's no surprise I love this project so much. I can vividly remember my first ever computing lesson in primary school, with the teacher loading up a program from a cassette tape onto the BBC micro. The kid next to me and I joked at the time that maybe if you accidentally loaded up an audio tape you'd see the singers appear on screen - I can still see us laughing hard now at how ridiculous an idea that was. Somehow not that many years later you can now fit an entire computer inside one of those tapes, with immeasurably greater capability.
Still however much I like this project, my inner troll is saying "It's not bad, looks nice but it'd be much cooler if it played music" - let's just say I'm not done with hacking cassettes yet.
Thanks for reading!
My other Old Tech, New Spec projects are all on Hackster at https://www.hackster.io/martin-mander/projects