Random Song Jukebox (Raspberry Pi)
by NateH23 in Circuits > Raspberry Pi
3898 Views, 18 Favorites, 0 Comments
Random Song Jukebox (Raspberry Pi)
After messing around with a Google AIY Voice Kit for Raspberry Pi, I decided to re-purpose the hardware to make an offline jukebox. When a user hits the top button, a random song stored on the Pi will play. The volume knob is there to help adjust the volume and mute the song (since once a song is started, it can't be stopped).
This tutorial picks up assuming you have already bought and assembled the Google AIY Voice Kit, or similar hardware configuration (a Raspberry Pi with a speaker and button attached). You'll also need a rotary encoder for the volume knob (I used this one), as well as wires, solder and a soldering iron to attach the encoder to the device.
Wiring the Volume Knob/rotary Encoder
Using the soldering iron, attach the rotary encoder to the Voice HAT using wires. On the encoder, the side with three pins is for signals for turning the knob in either direction (red and green wire), with the middle one (black wire) being ground. The other side with two pins is for the button in the encoder, with one (white wire) being for the signal and the other (black wire) being for ground. The wires are soldered in the Servo section of the Voice HAT, following this pinout diagram. Green is hooked to GPIO 26, red is hooked to GPIO 6, black is hooked to the ground of GPIO 26, while white is hooked to GPIO 13 and black is hooked to the ground of GPIO 13.
Fitting the Knob in the Box
If you use the cardboard box from the Google kit like I did, it's fairly simple. I cut out a square in the inner sleeve to fit the encoder, than make a hole in the side of the box, just above the slot for SD card access, to poke the knob through. Secure it with a washer and bolt, and then put the volume knob cap over the metal rod to lock it in place.
Software - Music When Hitting the Button
I assume you understand the basics of working with scripts on Raspberry Pis/Linux builds.
The music script button.py, available on my GitHub here, waits for the button to be pushed, at which point it pulls a random file from a directory (/home/pi/Music in my case) and then plays it using either mpg123 or aplay, depending on if the song is an mp3 or not.
The file is available on my GitHub here. Use wget to download it to your device, placing it in your /home/pi directory.
Make sure to have python, mpg123 and aplay installed. Run
sudo apt-get install python mpg123 alsa-utils
to get all the necessary files.
Make the downloaded script executable by running
sudo chmod +x /home/pi/button.py
The script assumes you are using GPIO 23, the default pin for the Google kit button. If you are using a different pin for the button, update the script accordingly.
Software - Volume
The volume script is available on my GitHub here. You can download it using wget. Place it in your /home/pi/bin directory (make one if it doesn't already exist).
Make sure your bin directory is in your PATH. Check by typing
echo $PATH
If the directory does not show up, add it using
echo "export PATH=$HOME/bin:$PATH" >> ~/.bashrc
and restart your device after doing so.
Also make sure you have Python3 on your device to run the script. Get it using
sudo apt-get install python3 python3-rpi.gpio
Make the downloaded script executable by running
sudo chmod +x /home/pi/bin/volume-control
The script assumes you are using the same GPIO pins as I did. If not, change them in the SETTINGS section of the script. The button function of the rotary encoder, GPIO 13, is set to None by default. If you activate it, you can mute and unmute the audio with the encoder's button.
Software - Run the Scripts at Startup
To run the scripts immediately when the device boots, call them in your rc.local file.
Go into your rc.local file with
sudo nano /etc/rc.local
In there, at the bottom, add
python /home/pi/button.py &
sudo /home/pi/bin/volume-control &
between fi and exit 0. Make sure to include the & after each command to prevent your Pi from hanging up during the boot process.
Add Music
Add some music to the specified directory (by default, /home/pi/Music), hit the button and enjoy!