sPot: Spotify in a 4th-gen iPod (2004)

Full-on Spotify scrolling and streaming via a Raspberry Pi Zero W and the original iPod clickwheel. Bluetooth, WiFi, and haptic feedback!!

Similar projects worth following
My mother-in-law recently gifted me a bag of the family's retired iPods. I had forgotten how good it feels to hold and use one of these things. Naturally, I decided to modify one. I wanted to supply some modern features (streaming, search, Bluetooth audio, etc), while paying homage to the amazing UX that Apple originally released almost 20 years ago.

Fast forward a few months - here's the sPot (ess-pot)! We've got:
* Streaming/Search via Spotify.
* Scratch-built UI, written in Python, based on the OG iPod experience.
* Full control via the original "click wheel".
* Haptic feedback.
* Micro-USB port for charging.
*... Linux, because there's a Raspberry Pi inside.

Hardware overview:

* Power is provided by a standard rechargeable li-ion battery. It's charged through a 500 ma Adafruit USB charger, and boosted to 5V using the Adafruit PowerBoost Basic. Both the Raspberry Pi and the display run on 5V.
* The click wheel connected to the original iPod motherboard via an 8 pin FPC cable. Thanks to this 10-year-old Hackaday article (and accompanying blog post by Jason Garr , I was able to find the pinout. Using an FPC breakout board, I easily connected the click wheel controller's 3.3V, GND, Data, and Clock lines directly to the Raspberry Pi. (More on this in the software overview).
* I used one of the Raspberry Pi's GPIO pins to drive a small DC motor (through a transistor, of course) for haptic feedback. I use quick haptic pulses in place of the iPod's original click sound, which triggers as your finger crosses each of the click wheel's virtual "steps".

* Repurposed the iPod's original lock switch to control the device's power. Conveniently, the PowerBoost module has an "enable" pin that can simply be pulled low to cut all power.

* Connected the display directly to 5V and the Pi's composite video output!


* I installed Raspberry Pi OS Lite as my OS. I figured I'd be conservative by not installing a full desktop environment, not sure if that was actually necessary in retrospect. The Pi Zero is more capable than I originally figured.
* Streaming from Spotify was surprisingly simple. I installed Raspotify, which just runs as a daemon and handles everything once you've authenticated. When it's running, the Pi appears as a "Spotify Connect" device on your account, and you can instruct it to takeover playback via an HTTP request (or using the UI of another authenticated Spotify client!).
* I used the Spotipy Python library to authenticate, search Spotify's catalog, fetch my saved artists/albums/playlists, and send playback commands to Spotify's servers.
* I wrote the UI as a Python application using tkinter. It was honestly pretty great to work with - front-end frameworks are hard to pick up! And this project was the first time I put any real effort into learning (and trying to love) Python. Forgive me, I spend most of my time in JVM-land.
* Referencing Jason Garr's blog post, I wrote a C program to the bitbang the click wheel's serial data into the Pi. I used pigpio to control the GPIO pins. Once I parse out the button presses and finger position, I send the data to the UI application via UDP. Jason - THANK you, wherever you are. This project would have been nothing without the original click wheel, and I would not have been brave enough to try to figure out the pinout myself. I will - hopefully - on future projects.
* ^ I snuck the haptic control into the C program that reads the click wheel. When the user's finger position changes, I quickly pulse the GPIO pin that's hooked up to the haptic motor. This was super easy, but the downside is that the haptics don't sync perfectly with the UI. For example, if you reach the bottom of a list, the haptics will continue even when the scrolling stops. It syncs perfectly while actively scrolling, so I didn't think it was worth changing.
* I use Redis (via Python library) to persist/cache user's Spotify data.
* I use Openbox to host the UI Application, which starts automatically once the PI boots up.
* I use pi-btaudio to get Bluetooth audio out of the Pi.

All of my source code will eventually be available here.

iPod-Spotify client UI running on Desktop
I was able to develop the UI entirely on my MacBook! Only had to optimize a tiny bit when I migrated to the Pi.
Earlier in the build: Haptic motor too big. Battery too small. Sketchy charge/boost module. Tried using a transistor to switch all power, but it kept cutting out.
These screens are adorable. Not bad image for composite input, either!
The "Now Playing" screen

Issues / TODOs:
* At some point the Pi started emitting a high-pitch whine. Big spike at 16khz and a little something at 8khz. What could this be? Doesn't bother me too much...

Read more »

View all 10 components

View all 3 project logs

Enjoy this project?



Benjamin Stallings wrote 11/09/2022 at 16:04 point

Hey all, not sure how many people are keeping up with this project, but I'm interested in making one for myself and noticed a lack of good documentation on the wiring besides the click-wheel. While I wait for parts, I took it upon myself to try and make a wiring diagram for myself and everyone else like me who are new to DIY projects such as this. Again, new to this, so if I made one or more mistakes, let me know and I'm happy to make a revised diagram.

I drew this up in illustrator, so edits are easy. And I can drop the .ai file where data and power wires are separated into separate layers. Makes it a little bit easier in my opinion.

  Are you sure? yes | no

Banks Moore wrote 11/15/2022 at 00:11 point

Hi Benjamin, should you need help let me know!

  Are you sure? yes | no

Guy Dupont wrote 11/20/2022 at 01:09 point

Yeah, admittedly I underestimated the interest in this project initially and so the "documentation" is more "this is what I did" than "this is how to do it." Thanks for this. The one thing I would add (somebody else mentioned this in a comment a while ago) is to add a flyback diode across the two leads of the haptic motor. I didn't do this on my original design and I think it actually caused occasional issues.

  Are you sure? yes | no

Banks Moore wrote 08/21/2022 at 01:47 point

Hi Guy, Just figured I drop you a note that an older version of Raspbian (Legacy Buster) and an older version of Raspotify (14.0) solved all my problems!

Thanks again for creating this satisfying project you've made a retired 70 year old very happy! 😃


Check out issue #66 when you have a chance.

Note: I'm now  using a Zero 2W.

  Are you sure? yes | no

Michael wrote 07/30/2022 at 05:02 point

Hello I've finally got Spot to auto start and a bunch of other problems fixed but when I try to play a song it gives me this error

"playing  spotify:album:6Bp2ojsBc8CtNaYipdxCLt spotify:track:3ZcLmonVVD1MTQtmQb8yf3
error! no devices"

I saw in the Github issue #4 someone had this error but they fixed it so I applied the fix to mine and it didn't do anything. Got a solution or an idea? 

  Are you sure? yes | no

Guy Dupont wrote 04/20/2022 at 22:33 point

I appear to have missed a large number of comments on this project! I apologize, I am not sure how notifications work - I used to get emails for everything. Please reply to me directly if you have questions, but truthfully I have not had much time to move this project forward in the past months.

  Are you sure? yes | no

Michael wrote 09/15/2022 at 18:11 point

Hello I've finally got Spot to auto start and a bunch of other problems fixed but when I try to play a song it gives me this error

"playing  spotify:album:6Bp2ojsBc8CtNaYipdxCLt spotify:track:3ZcLmonVVD1MTQtmQb8yf3
error! no devices"

I saw in the Github issue #4 someone had this error but they fixed it so I applied the fix to mine and it didn't do anything. Got a solution or an idea? 

  Are you sure? yes | no

Sven Svenson wrote 02/25/2022 at 09:40 point

Hey! Been building computers but new to the actual electronics side of things. Definitely can't read any electronic diagrams...! Are there any resistors or whatever between any of the components etc, or given most of it is 5v, is it not necessary? 

  Are you sure? yes | no

yes wrote 02/20/2022 at 13:15 point

help pls did the 64 bit isnt working on the raspberry pi and the raspotify needs 64 bit to work and im stuck please help please

  Are you sure? yes | no

Cole.devries wrote 02/14/2022 at 06:30 point

can you show me the wiring for using the 2 piece 1000 booster basic usb c 


  Are you sure? yes | no

Cole.devries wrote 02/14/2022 at 06:35 point

especially which resistor is r13 to move and to pull to ground

  Are you sure? yes | no

David wrote 07/16/2021 at 23:42 point

Since the 2.5 TFT display is out of stock on Adafruit for the foreseeable future, is there any alternatives or a way to use the ipods original screen instead?

  Are you sure? yes | no

chinmay wrote 07/11/2021 at 10:10 point

Anyone here thinking of modding ipod 3rd gen?

I opened my dead ipod and instantly hit first roadblock, scrollwheel connectors are completely different, can anyone identify what connector this is and is there any breakout and pinout available?

  Are you sure? yes | no

tanagram27 wrote 07/11/2021 at 05:06 point

To people who have made a sPot for themselves, are there any other generations of iPod that seem possible to use.  I am most specifically interested in the 5-7th generation iPods as customizable replacement parts for these generations are usually readily available.

  Are you sure? yes | no

Guy Dupont wrote 07/13/2021 at 03:03 point

I can't say for sure, but I think they're going to be too small for the pi + LCD. If you can figure out how to use the original screen in those, it may be possible.

  Are you sure? yes | no

tanagram27 wrote 07/13/2021 at 05:15 point

So I tried looking it up and found that the 4th gen is likely about .2" thicker than the thick versions of the 5-7th gen.  But out of curiosity, how tight is the fit in the fourth gen, and do you know where it is the tightest?  Because based off of the project pictures it seems like you might be able to slim it down by using a slimmer battery behind the rest of the components and trimming off the now unnecessary ports that are on the raspberry pi. However I'm not sure how much thinner that would actually make the components and if that would allow it to fit in the newer generations.  Thanks so much!

  Are you sure? yes | no

NirGi wrote 04/17/2021 at 18:13 point

I've got a 5mm(H) x 34mm(W) x 50mm(L) li-ion battery. Do you think it'll fit well inside the iPod?

What was your battery size?

  Are you sure? yes | no

nassafellow wrote 03/25/2021 at 09:17 point

Guy could you please update the components list and schematics for the new build please?  I am merging your design with Ricardo's build and I am stuck on the internals.  


  Are you sure? yes | no

jamietchisholm wrote 03/22/2021 at 00:02 point

Here's my openbox screenshots! thank you!

  Are you sure? yes | no

jamietchisholm wrote 03/21/2021 at 23:59 point

Hi guys! So I'm stuck on openbox. When I turn the PI on i can see it in my spotify devices. Can't connect to it. Bellow I'll add Openbox windows. Xinitric, autostart, openbox environment, and raspotify. When I log into the pi through VNC I see a blank screen and my cursor is an "X".. I assume this means that raspotify is trying to open.. 

Any help would be greatly appreciated! I'm so close! Would love to see someone else's openbox settings. Thank you Guy and everyone involved! This is so awesome. :)

  Are you sure? yes | no

Junaldinho wrote 03/21/2021 at 22:24 point

Hi Guys,

Ive been at this project for weeks, I have never coded before so this is all new to me.

I am stuck on step 9, for some reason I can't get Openbox to open up to be able to input the code and move onto the next step.

when I input - exec openbox-session - it doesn't do anything.

Any help would be much appreciated. (or a step by step guide at this point its been weeks)



  Are you sure? yes | no

nassafellow wrote 03/21/2021 at 21:18 point

Please could you decline my request to join the team I am new here and I don't know how this site works.  I thought it would simply provide me with more information, so sorry please forgive me!

  Are you sure? yes | no

nassafellow wrote 03/21/2021 at 21:16 point

I would like to introduce myself to everyone here saying I am a science teacher (chemistry specialist) who has been asked to teach electronics.  I want to do something to inspire my students.  I have a very basic knowledge of the theory of electronics and I am still learning that.  I know pretty much nothing about the practical aspects, although I have every practical resource available to me and an entire lab at my disposal.  I desperately need to and want to learn.  I know nothing whatsoever about coding but I've got a computer science teacher who may be open to helping me.  I also have access to chemicals and an expensive 3D printer.

Three questions - I'm unsure if this issue is resolved yet.  1) Is the issue where we can't put in numbers into search solved yet?  2) Do you have to open the ipod up again if you want to change the wifi network?  If not I'm thinking I might have to ask a computer science teacher to take a look at the coding.

  Are you sure? yes | no

jamietchisholm wrote 03/19/2021 at 23:33 point

Hi guys! I'm stuck on step 3 with installing "dependencies". I type in the command and get a message saying "Could not open requirements files: [errno 2] No such file or directory: requirments.txt'

Forgive me if this is a simple fix! Also, I couldn't figure out how to access the PI through OpenBoc so I used VNC Viewer and can access the PI's interface there.

I assume I'm getting this error because I have the GitHub folder in the wrong spot? I'm not sure how to utilize that folder into the PI.  Every command before step 3 worked great!

Thank you guys so much for the support! Looking forward to this project :)

  Are you sure? yes | no

sebakitzing wrote 03/20/2021 at 13:17 point

@jamietchisholm go to the github issue #22. I explain that part there

  Are you sure? yes | no

chonnymon wrote 03/19/2021 at 21:46 point

Thanks again for sharing this project.

I finally finished mine tonight! thanks to everyone who has posted on the GitHub especially @Guy Dupont  & @Ricardo Sappia.

My biggest headache was getting everything to fit in and then getting the iPod closed back up. I found that if it was too tight the iPod buttons would be really 'stiff'

I ended up replacing the boost module and charger for the combined unit from adafruit and hard-wiring the battery to the charger to save a little bit of space.

If it helps anyone i 3d printed a mount for the 2" adafruit display you can use the original iPod screws and holes.

here mine

and screen mount

  Are you sure? yes | no

Guy Dupont wrote 03/19/2021 at 22:06 point

Looks awesome!!! I'm loving hearing about folks' alterations.

  Are you sure? yes | no

thatturkeyistaken wrote 05/28/2021 at 02:34 point

hey, you think you could share the software as a whole? I'm having problems coding and it would probably be easier to just use someone else's and configure it to work for me

  Are you sure? yes | no

Fernando wrote 03/18/2021 at 22:02 point

Love this project!! I already have the same iPod on my desk just collecting dust hahahah. I have a question does someone know if I could use this power booster that I found in aliexpress?? (,searchweb201602_,searchweb201603_).

Any answer is well recived, thanks!

Regards from Chile!

  Are you sure? yes | no

Ricardo Sappia wrote 03/19/2021 at 08:44 point

en principio si, por  lado de la corriente no deberia ser problema porque el total de los módulos consume aproximadamente un promedio de 275mA, pero te faltarían algunas funciones en caso de que quieras apagar el iPod desde la raspberry, por ejemplo, el pin de EN. Por otro lado,  este módulo solo hace de powerboost pero no carga la bateria, para eso deberias agregar otro modulo mas. 

  Are you sure? yes | no

sebakitzing wrote 03/20/2021 at 13:21 point

@Ricardo Sappia tu ya lo hiciste funcionar? Yo tengo todo listo, cargo al frontend, pero corté el cable del clickwheel asique estoy esperando para ver si me funciona esa parte del programa

  Are you sure? yes | no

Ricardo Sappia wrote 03/20/2021 at 13:35 point

@sebakitzing  si! lo tebgo andando y cerrado ya, escribi un tutorial del hardware tambien!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates