Art Deco Jukebox

This project is for a Raspberry Pi (RPi) based music player. The case design pays homage to the 'tombstone' radios of the 1930s & 1940s and the classic jukeboxes of the 1950s. The LED 'pipes' replicate the bubble pipes on the old jukeboxes. The semi-circular widow near the top was designed to be an infinity mirror. The TFT LCD display shows the name of the band/artist, album and song title that is currently playing as well as CPU temperature and the music source. Music files are primarly sourced from a Network Attached Storage (NAS) device. Alternate sources of music files are a USB Flash drive or the boot SD card. Either an IR or Bluetooth (Classic or BLE) remote is used to control the jukebox. A bare minimum of remote control functions are available; volume up/own, pause/play, skip, rewind, mute & power on/off. One of my design goals was to have a music player that does not require any input from the user. Music is selected randomly by artist (band/group).
The LED animations are dynamic. A static picture does not do them justice. I am unable to provide a video. In order to share a video of this device's LED animations I would need original music created by me. I am not a musician, I have no original music to play. You do not want to hear me try to sing.
I appologize in advance as I tend to be 'wordy'. Also, I am not a Raspberry Pi, Linux or Python Guru.
Features of the Art Deco Jukebox are;
- Addressable LEDs are used to replace the ‘bubble tubes’ used by Wurlitzer. This allows for a wide range of animations to be displayed.
- A TFT LCD is used to display information about the RPi CPU temperature, the currently playing music as well as the music source; NAS (Network Attached Storage), USB or SD card.
- The top chamber forms an infinity mirror.
- Bluetooth (Classic or BLE) and IR remotes are supported for simple control of the jukebox.
- WiFi is used to obtain music from a local NAS device.
- A stereo audio DAC HAT is used to provide quality music reproduction.
- Flexible case design to accommodate various combinations of RPi and DAC boards.
- The case was designed to accommodate any Raspberry Pi ‘Zero’ or ‘B’ series board.
- The case allows for RPi Zero boards to be mounted in two places so that Zero series or ‘B’ series DAC boards can be used.
- An optional MSGEQ7 audio spectrum analyzer can be added to make the LEDs dance to the music. The addition of the MSGEQ7 allows for the LEDs to become used as a ‘color organ‘.
- The RPi or an optional Raspberry Pi Pico can be used to drive the addressable LEDs.
- If not using an RPi Pico then an ADS1115 ADC board is used to interface to the MSGEQ7.
- All plastic case parts are 3D printed.
This project does not have a built-in power amplifier. It will not drive speakers directly. It is intended to be used with either a home stereo system or with a set of powered computer speakers. The exception here is that some DAC boards for the RPi do have built-in amplifiers. One of the boards I purchased has a low wattage amplifier and came with a pair of small speakers. There are some, more expensive DAC boards, that have high power amplifiers built-in. These are meant to drive speakers directly. Most RPi DAC boards have a pair of standard RCA jacks for connection to a stereo system and a headphone jack. The headphone jack may have a low wattage amplifier intended to drive a set of headphones. The choice of DAC, amplifier combination is entirely up to you, your ears and your wallet.
Most music player software written for the Raspberry Pi (RPi) are aimed at using Internet radio, podcasts or music services like Spotify, Tidal or Pandora. These programs typically use playlists and a web interface for control. This project does not do any of those things.
There are several LED animations used by the Jukebox. Some animations get data from the MSGEQ7 and use the data to to make some of the LED sub-strips act as color organs,ie they change color based on the music. LED animations automatically change when a new song is selected. Some animations will change color periodically.
All the files (3D printed parts, software, video and assembly instructions) for this project are available here; https://github.com/BigjBehr/JukeBox
Supplies
To make this project, you will need the following tools;
- Access to a 3D printer with a print bed of at least 200x150mm and a height (z axis) of at least 80mm.
- White filament, for the LED 'pipes'.
- Clear filament, for the top chamber window.
- Various colored filaments for printing the remaing case parts.
- #1 Philips head screwdriver or what ever your screws use..
- Diagonal wire cutters.
- Needle nose pliers.
- Wire strippers.
- Sharp hobby knife.
- Soldering iron and 'no clean', lead free solder. Solder that is not marked 'no clean' contains a corrosive flux that over time will degrade your solder joints.
- 22awg, stranded hookup wire in red, orange and black. Power wires should be 22awg.
- 24awg stranded hookup wire in assorted colors. Used for all non-power connections.
- 22awg, solid hookup wire. Four small pieces are required to make the power distrbution blocks.
- Some skills with hand tools.
- Lots of patience.
Optional Tools:
- M2.5 Tap with Tap handle.
- 3/16 Spin Tight (hex nut driver, for tightening standoffs).
- Crimper for DuPont crimps.
- Dupont style female crimp pins.
- Soldering Iron and solder with ‘No Clean’ flux.
- Hot glue gun and a hot glue stick or super glue or 5 minute epoxy.
- Only needed to finish wood filled filament
- Tac Cloth.
- Gel Stain.
- 1 inch foam brush.
- Water based, Clear Polycoat. I used a clear gloss. Some people prefer a clear matte finish. I used water based because it does not smell and is easier to cleanup with just soap & water.
Or
- Dupont style female-to-female jumper wires in assorted colors.
Electronic Parts List:
- One Raspberry Pi, either a Zero 2 W or ‘B’ series board. Exception is RPi5B is not supported, RPi Zero 2 W is the preferred board.
- One 2.4 inch, SPI, 320 X 240, TFT LCD using an ILI9341 driver.
- One TTP223 Touch Switch board.
- One meter string of SK6812 side emitting, addressable LEDs with a pitch of 60 LEDs per meter. 58 LEDs are used.
- A string of thirteen WS2812B LEDs from a string with a pitch of 60 LEDs per meter.
- A stereo audio DAC HAT, Zero series or ‘B’ series with a GPIO pass through header.
- A micro SD card setup with Raspian Bullseye Lite.
- One barrel style power socket.
- One 4 amp, 5V power brick with mating barrel jack. If a RPi4B is used then a 27W PD power brick (for RPi5B) with a USB-C connector can be used and the barrel jack can be eliminated.
- Air Mouse BLE 5.2 Remote or similar Bluetooth remote or an IR remote.
Optional Electronic Parts List:
- Either an RPi Pico (any model) or ADS1115 ADC board.
- MSGEQ7 audio spectrum analyzer board.
- 38KHz IR Receiver VS1838B or similar (only if using IR remote).
- A 38KHz IR remote.
Passive Parts:
- 22awg stranded hookup wire in Red, Black and Orange. These are power wires and should be a heaver gauge than the signal wires.
- 24awg stranded hookup wire in various colors.
- 22awg solid hookup wire
- A dual row, 40 pin (two rows of twenty) DuPont style connector shell and appropriate female crimps.
- A single row, 10 pin DuPont style connector shell and appropriate female crimps.
- If using a Pico add a second, single row, 10 pin DuPont style connector shell and appropriate female crimps.
- A single row, 14 pin DuPont style connector shell and appropriate female crimps.
- One single row, 3 pin DuPont style connector shell and appropriate female crimps. Add another if using an IR remote.
- A single row, 5 pin DuPont style connector shell and appropriate female crimps.
- A dual row, 20 pin (two rows of ten) DuPont style header (male pins).
- Seven, 2 pin DuPont style connector shells and appropriate female crimps. If not using a Pico then add three more. If using IR and no Pico and not using a DAC board with an IR receiver mount’s power then add one.
- One, three pin male header (to replace phone jack on the MSGEQ7 board).
- One, three pin, right angle male header (for TTP223 board).
- Two, twenty pin male headers (for Pico). Only the first ten pins on each side of the Pico are used. You could use two, ten pin headers instead. If using ten pin headers then solder to the pins closest to the USB connector end of the board. The headers should be on the top (component) side of the Pico.
- One peel-and-stick aluminum heatsink, 14mm X 14mm X 6mm.
Optional Passive Parts:
- One four wire, panel mount USB-A type socket.
- One, male, micro USB connector.
Mechanical Parts:
- Fifteen Decorative Brass #2 X ¼ inch self-tapping screws for use on the outside of the case.
- Twenty Two M2 X 5mm self-tapping screws for use on the inside of the case and the back panel. Can also be used in place of the #2 brass screws.
- M2.5 X 11mm threaded standoffs. If you use a RPi5B then you will need different length M2.5 standoffs. The lengths will vary depending on your RPi5B board stack.
- Four M2.5 X 5mm machine screws. 5mm is the minimum length required. Any length up to 8mm will work. Keep in mind that these are fine threads, so longer screws will take more turns to tighten in tight places. Shorter screws are your friend.
- Four M2 X 5mm self tapping screws (only needed if using an RPi Pico).
- Either a 4 inch square plastic mirror, cut to fit or a piece of ‘one way mirror film’ approximately 55 X 90mm (used to make a mirror on the mirror holder).
- A piece of ‘one way mirror film’ approximately 80 X 55mm (used to make a one-way-mirror for the top chamber window).
- A small piece of double sided foam tape approximately 10 X 10mm (used to hold the TTP223 touch switch board in place).
- Four peel ‘n’ stick rubber feet.
The parts list calls out for the use of DuPont style connector shells with crimp pins. All DuPont connectors have a pitch of 0.1 inch (2.54mm). If you do not have the tools or skills required to crimp your own wires then you can either buy a bunch of pre-made DuPont female-to-female jumpers or simply solder the wires to the boards (not recommended). If you buy the jumpers and the shells, it is easy to remove the one pin shell and insert the crimp into a larger, multi pin shell. For power wires for the LED strips, a red and a black jumper can be cut in half to provide a set of power wires for two LED strips. It is easy enough to do all the wiring using single jumpers. The problem with this approach is that if you need to remove or replace a board, you have to remove and replace all the wires and get them back on the correct pins. Using the multi pin shells insures that the wires are allways on the correct pins.
If stacking a ‘B’ series DAC on an RPi Zero series board, you will need two M2.5 X 5mm machine screws and two M2.5 square or hex nuts or two 3D printed 1.6mm spacers to account for the thickness of the RPi board. The screws are used in the two front holes of the RPi Zero board. The nuts or spacers are screwed on to the threaded parts of two of the standoffs. The nuts or spacers are there to level out the ‘B’ series DAC HAT.
A word of caution. I purchased several MSGEQ7 board kits from Aliexpress for about $8.00 each. Every single one came with a bad MSGEQ7 chip. I ended up buying good chips from Digikey to replace the bad ones.
I found several vendors selling MSGEQ7 boards. Most of the sites were selling the same board as I bought, as a kit or all assembled. The prices varied wildly. The MSGEQ7 board comes with a 1/8 inch phone jack for audio input. The case does not have enough space to use a phone plug. I modified the MSGEQ7 board by soldering a three pin header on top of or in place of the phone jack.
USB jacks on your computer will not supply enough power to run the Jukebox with all of the addressable LEDs present. Use the barrel style Power socket with a +5VDC power supply capable of at least 4 Amps (20W). The 27W PD supplies sold for use with a RPi5 work very well. However, you will need some way to convert USB-C to micro USB (these are readily available from Amazon and others). You could use a USB-C panel mount socket to replace the barrel jack style power socket.
M2 X 5mm screws are almost the same size as #2 X 1/4 inch screws. They may be used in place of each other.
Software Tools:
- Putty or a similar program. Used to SSH into headless Raspberry Pi system.
- https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html
- WinSCP or similar program. Used to transfer files to/from the Raspberry Pi.
- https://winscp.net/eng/download.php
- Microsoft’s Visual Studio Code. Used for programming the Pico.
- https://code.visualstudio.com/Download
- A plain text editor. PsPad is my plain text editor of choice for use with Windows. Notepad will do.
- https://www.pspad.com/en/download.htm
- OpenSCAD. Free to use CAD package. Used to design all the 3D printed parts of this project. Only required if you need to modify an existing 3D printed part.
- https://openscad.org/
- Raspberry Pi Imager. Used for making bootable SD cards for RPis.
- https://raspberrytips.com/raspberry-pi-imager-guide/
- SD Card Formatter. Used to erase & reformat SD cards.
- https://www.sdcard.org/downloads/formatter/
- https://www.sdcard.org/pdf/SD_CardFormatterUserManualEN.pdf
These are the software tools that I used during development. If your development station uses MAC OS or Linux then the utilities that you use may have a different name, but should provide the same basic operations as the ones I used with Windows. All the utilities that I used are free to download and use.
RPi Pico vs ADS1115:
The RPi Zero 2 W is capable of running the LED animations and playing music at the same time. However, the RPi Zero 2 W does not have a built-in ADC. Therefore, an external ADC is required to collect data from the MSGEQ7. I chose the ADS1115 I2C ADC.
The alternative is to use an RPi Pico to drive the LEDs. The Pico has a built-in ADC, so if you use a Pico then the ADS1115 is not needed. Currently the code for the Pico has more LED animations than the code that drives the LEDs from the RPi.
Why use a Pico?
Two reasons, the first is cost. A first generation (RP2040 based) Pico costs $5.00. An ADS1115 board will cost anywhere from $2.00 to $8.00 depending on where you buy it. The second reason is performance. The Pico drives the LEDs at 100FPS (Frames per Second). The WS2812B driver used by the RPi currently has a frame rate of 6.6FPS.
Mirrors:
The top chamber of the JukeBox can be assembled with mirrors to create an infinity mirror. With an infinity mirror, one row of LEDs will look like many rows of LEDs.
The mirror holder has two sides. One side has ridges that are used to accurately place a cut-to-size, peel-n-stick plastic mirror. If you 3D print the mirror holder on a smooth build plate then you can put one-way mirror film on the smooth side. Then using a sharp hobby knife, trim off the excess film. This is the easiest way to get the back mirror for the top chamber. However, it does not make the best mirror.
I bought a package of 4 X 4 inch peel-n-stick plastic mirrors from Amazon. I cut one mirror down to 49X89mm. Then stuck it to the mirror holder, using the ridges to position the mirror properly. I then trimmed the parts of the mirror that extend outside the mirror holder. I used the angled sides of the mirror holder as cutting guides. I originally tried to use a glass mirror. However, I could not cut the glass without shattering it or injuring myself. For these reasons I do not recommend using a glass mirror.
Glass mirrors reflect the most light, plastic mirrors are close to glass mirrors. Mirrors made with the ‘one way mirror film’ are not as reflective, but will work here.
Greater reflectivity results in a better looking infinity mirror (greater depth).
Why use ‘no clean’ flux?
The normal rosin core solder that is recommended for electronic soldering will ‘rot’ the copper wires over time. This is due to the corrosive nature of the flux. To prevent your solder joints from ‘rotting’, use ‘no clean’ solder. The ‘no clean’ flux does not cause the same ‘rot’. If you do use standard rosin core solder you should clean off the excess flux after soldering. This can be done with household cleaning products, water and an old toothbrush. Do not power up what was just washed until it is completely dry.
Post Printing Finishing for Wood Filled Filament:
Skip this if you did not use a wood filled filament to 3D print the case.
The gel stain, sandpaper, tack cloth, brush and polycoat are only needed if you use a wood filled filament and you wish to stain it. If you buy a spray on polycoat then the brush is not needed.
Oil based polycoat, varnish or shellac can be used. Check on a test piece first as some oil based finishes can eat the plastic.
I wanted my prototypes to look like they have a wooden case. I 3D Printed the prototypes using a wood filled PLA (Geeetech Black Walnut filled PLA, ~$22.00 for a 1Kg spool, you can get 4 or 5 cases from this sppool). After printing I lightly sanded the sides of the case with 220-320 grit sandpaper. Sand only along the layer lines, do not sand across the layer lines or on the front. I then used the tac cloth to clean up the sanding dust. I used a gel stain to stain the case a dark color (dark cherry). When the stain dried, I was impressed with how wood-like the case looked. Once stained, the micro scratches made by the sandpaper along with the layer lines gave the piece the look of wood grain. I did not sand the front of the case as I printed on a textured build plate and did not want to ruin the texture of the case front. I did stain the case front to match the sides. When staining, make sure to stain the inside edges of the LCD cutout and along the edge of the backside of the case. You do not need to stain the inside of the case as it is never visible. Allow the stain to dry over night. I threaded a twist tie through a couple of the cooling vents on the bottom of the case. This allowed me to hang the case by the twist tie while the stain dried. I found that if I screwed the mirror holder in place, I could hold on to the mirror holder while staining the case or applying the polycoat. This allowed me to stain every surface of the case in one pass.
I used a gel stain because I tried to use a penetrating stain on a test piece and found that the penetrating stain did not penetrate the wood filled plastic. Gel stains do not require penetration into the wood fibers, so they work great here. Very easy to apply and wipe off.
FYI, you can purchase a 2oz bottle of gel stain for less than a dollar from Hobby Lobby. The catch is they do not have many colors to choose from.
Remote Control:
The Raspberry Pis with onboard WiFi also support Bluetooth. I bought two Bluetooth remotes from Aliexpress for around $3.00 each. One is BLE (Bluetooth Low Energy) and the other is Bluetooth Classic. Both remotes can also be used as IR remotes. Once they are paired with a Raspberry Pi, they stop sending IR commands. I chose these remotes because they were inexpensive and had all the buttons I required and a few extra. Both remotes also support a ‘mouse mode’ whereby they will send motion data in place of button data when in ‘mouse mode’. This functionality is not required nor used.
If you choose to use an IR remote then you will need to add an IR receiver. Most IR remotes work with a 38KHz carrier frequency. Make sure that the IR receiver you use matches the carrier frequency of the remote you plan on using.
There are three versions of the Grill Insert, one without an IR receiver, one for a plain IR receiver and one for an IR receiver with a Faraday cage. Choose the Grill Insert that matches your IR receiver or modify the existing Grill Insert to accommodate the IR receiver you bought.
The default is to use a ‘HID_Remote01’ Bluetooth remote. Each remote requires a key translation table to translate the key codes from the remote into the standardized key codes required by the Raspberry Pi. Edit jukebox.cfg and change “HID_Remote01.txt” to your translation file name. Three sample files have been provided, one for each of the Bluetooth remotes and one for a Bluetooth remote using IR mode. The files are in JSON format. Edit the file to change the key codes from the remote to match the key codes from your remote. You can extend the file to include more keys. Just be aware that the Python script only has handlers for Power, Volume up/down, Pause/Play, Skip, Rewind and Mute (same as Pause). The Python script parses all fifteen keys on the Bluetooth remote and provides empty handlers for each unused key. Currently the Up Arrow key will change the LED animation and the Right Arrow key will toggle the LEDs on/off. These key assignments may change.
The 3D Printed Parts




You will need;
- One Case Shell, selected to match the RPi board being used.
- One Back Panel, selected to match the RPi board and the DAC HAT being used.
- One Double LED Cover, printed in white filament.
- One Double LED Cover Stripe.
- One Single LED Cover, printed in white filament.
- One Grill Insert, selected to match the IR receiver being used or no IR receiver.
- One Top Chamber Window, printed with clear filament.
- One Top Chamber.
- One Mirror holder.
- Four Double LED Cover Clamps.
- Two Top Double LED Cover Clamps.
- Optional, one Circle Guide.
- Optional, one Burnishing Tool.
The Circle Guide & Burnishing Tool are used to help afix the one-way mirror film onto the Top Chamber Window.
There is a PDF that provides 3D printing tips for all of the 3D printed parts, detailed assembly instructions, pictures and more. It can be found here; https://github.com/BigjBehr/JukeBox
There is also a zip file with STLs for all of the 3D printed parts, a few 3mf files for printing sets of clamps and various Grill Inserts (text, no text). There are multiple case varients, one for each type of RPi board and an extra for the RPiZ2W that has a place for an external USB-A, panel mount socket. There are also multiple Back Panel STLs. These are for different combinations of RPi board and DAC board. Each Back Panel board also has a unique 'xxx-text.stl' file. The 'xxx-text.stl' files are merged, in the slicer, with the matching Back Panel STL file to add contrasting, embedded text. Your slicer and 3D printer must support multi color 3D printing to do this.
The Electronics
This project uses a Raspberry Pi SBC running Bullseye as the main processor. Raspberry Pi's are made in four distinct form factors (please forgive me if I talk like an engineer, I am one); Compute module, 'A' series, 'B' series and 'Z' series. This project was designed to use either a 'B' series or a 'Z' series board. To clarify, their are variations of the case design to mount a Raspberry Pi Zero 2 W (RPiZ2W) or a Raspberry Pi 3B, 4B or 5B. However, at the time of writing this, I cannot reccomend that you use an RPi5B. Two reasons, the first is that the RPi5B uses Bookworm. The second reason is that in the RPi5B the GPIO was moved from the CPU to the Southbridge chip. This broke all existing Python GPIO libraries. Some replacement GPIO libraries were released that allow for simple GPIO interactions. However, higher level libraries, like TFT drivers, have not been upgraded. Bookworm requires that third party Python libraries be installed to a Python Virtual Environment and that the PVE be activated prior to being used. I have tried to get this to work and failed. I can get the libraries installed OK, the issue seems to be getting the PVE activated when attempting to auto run on boot up. Someone who is a Raspian/Linux/Python expert would know how to make it work. Unfortunately, that is not me. No such issues exist with Bullseye.
The RPiZ2W running 64bit Bullseye is my RPi of choice for this project. All of the development was done using the RPiZ2W. I have an RPi2B, RPi4B and an RPi5B. All of the 3D printed case variations for mounting various RPis has been validated to fit properly using the afore mentioned boards. I do not reccomend using any of the following boards; RPiZ, RPiZW, RPi2B and the original Raspberry Pi. All these boards are single core and do not have built-in WiFi nor Bluetooth.
You need to first decide which RPi varient you wish to use. That decision will drive which case varient to 3D print.
Next you need to pick an audio DAC HAT to use. There are too many to list here. Just keep this in mind, the TFT LCD needs to connect with the GPIO header on the RPi. Therefore, any audio DAC board that mounts on top of the GPIO header has to provide a pass through GPIO header or some other access to the GPIO of the RPi. Audio Dac HATs are designed to be the same size as an RPiZ2W or fit on to a 'B' series RPi. It is possible to use an RPiZ2W with a 'B' series HAT. You will lose accress to the HDMI & USB sockets. A panel mounted USB-A socket can be used to provde access to the RPiZ2W's USB socket. If a 'Z' series HAT is used then the RPiZ2W can be mounted flush with the back panel to allow access to the HDMI & USB sockets. A 'Z' series HAT mounted on a 'B' series RPi has its own unique set of issues. Good luck with that combination. There are some small audio DAC boards that are not designed to be mounted on the GPIO header of an RPi. These boards can be used. You will need to add some wires to the RPi's GPIO header and figure out some way to hold the board in place. If your prefered audio DAC HAT does not have a pass through header you could use a board in-between (three board stack) that provides access to th RPi GPIO header. Adafruit sells what they call an 'audio shim'. This is a thin board the gets captured between the RPi and what ever is added on top. Nice idea, but the headphone jack is not accessable from outside the case and there are no RCA jacks.
Most audio DAC boards do not have an audio amplifier built-in. You will need a pair of powered speakers (ones with a built-in amplifier) or connect using the RCA jacks to a stereo amplifier. Some audio DAC boards have a small audio amplifier for driving headphones. These are usually limited to 3W or less. Some audio DAC boards have a built-in audio amplifier. These boards are for driving speakers directly and usually have a dedicated connector or screew terminals for connecting speakers The audio DAC board and RPi you chose will determine which back panel to 3D print or may require you to re-work the back panel to accomodate the location of the RCA, headphone or speaker terminals.
I have tested the software with the following audio DACs; PCM5102, PCM5122, PCM5242, WM8960 & 1334.
Two types of addressable LEDs are used. The SK6812 side emitting (also available as top emitting, like WS2812B). The WS2812B is the standard 'Neopixel' LED. Both of these LEDs use the same protocol, so there is no issue using them in the same string. The LEDs are divided into four pieces and then wired back together as a single string. Each piece has it's own direct connection to the 5V power supply. Wiring them this way midigates the voltage drop associated with long wire runs. The LED string can be driven directly by the RPi. The input pin of the SK6812 is designed to work with a 3.3V signal, no 5V level shifter is required. An optional Raspberry Pi Pico can be used to drive the LEDs.
An optional MSGEQ7 audio spectrum analyzer board can be added. The MSGEQ7 breaks the audo spectrum into seven bands and outputs the amplitude of each band. The data from the MSGEQ7 is used to make the LEDs 'dance to the music'. If present, the Pico has a built-in ADC that can acquire data from the MSGEQ7. If not present then an ADS1115 I2C ADC is used to collect the data from the MSGEQ7. Using the optional Pico results in the most responsive LEDs. I looked at using other popular microcontrollers; arduino, ESP8266 & ESP32. I chose the Pico board due to the fact that it has mounting holes and is less expensive than the ESPxxx dev kits. An Arduino Mini or Pro Micro will work, however, the limited RAM will restrict the number of different animations that can be done. A Leonardo Pro Micro has a bit more RAM, so might be a better choice. Using a Pico varient, the 'Pico Zero' is even cheaper. However, it has no mounting holes. Double sticky tape anyone ?
The Software
There are plenty of guides on the Internet to walk you through creating a bootable micro SD card for a Raspberry Pi. I am not going to attempt a better explanation. There are also guides for programming a Raspberry Pi Pico using 'C' code and the Visual Studio Code IDE.
To make my life easier during development and to reliably get all the required Python libraries loaded and modify some system files, I have developed some Bash and Python scripts that do all the heavy lifting for you. Of course, if you prefer, the various Python scripts used by the JukeBox.py script have detailed instructions on installing every required Python library and which system files to modify and what modifications to make.
The RPiZ2W, RPi3B, 4B & 5B all use quad core, 64bit CPUs. When chosing which Bullseye varient to use chose the 64bit headless varient (no GUI). There is no need for a GUI as this is basically an embedded application. No monitor or keyboard is required.
I use a Windows PC. I do not use an Apple PC or a Linux PC for development. I am simply unfamiliar with how to use those PCs. If you are working on an Apple or Linux PC, I will be unable to help if you encounter an issue with the software tools. You are on your own.
During development I used SSH and FTP to run my RPi and transfer files. On Windows I use Putty for SSH and WinSCP for file transfers. I am confident that Apple & Linux PCs have apps that do the same thing.
One thing that I like to do is to assign a fixed IP address to my RPi boards. I do this in my network's WiFi router by assigning the RPi's MAC address to a fixed IP address. I then label the RPi board with it's IP address. Now I can always access the correct target board. All routers can do this. The details of how to varies from router to router. I cannot help with your router. Mainly because if it is not the same as mine I do not know how it is done on every brand/model of router. Again, on your own. Think of it as a learning experience.
There is a PDF with detailed instructions for preparing your RPi board and your Pico board that can be found here; https://github.com/BigjBehr/JukeBox. There are also zip files containing all the setup and run time scripts for the RPi and the Pico 'C' source code.
Assembly
Jukebox.pdf has detailed assembly instructions (with pictures) and tips can be found here; https://github.com/BigjBehr/JukeBox.
The PDF is 83 plus pages long. There are a lot of steps to build one of these. I have tried to simplify the build process by breaking it down into making sub-assemblies. Then just screw things in place, add the wiring harness & done.
It would be helpful if you were familiar with; basic hand tools, how to solder, how to use a 3D printer, Raspberry Pi, Raspian (Linux), Pico, headless operation using SSH.
The hardest part of this project is making the sub-assemblies and weaving the LED string through the case. Setting up the Raspberry Pi and programming the Pico are easy.
The End
That's it. During the development of this project, I 3D printed and assembled four of these Jukeboxes. One has been in use in my work area for several months.
I would love to know if you build one of these and how you like the animations.
Enjoy.