So this is my Tutorial for the Phoniebox, also known as Jukebox4Kids.

Here, you will learn to use a Raspberry Pi 3B+ to build a Music Player, which will play audiotracks and streams by putting a RFID-Tag on top of it. The finished Box looks like this:

I used MiczFlors Phoniebox-Script and Splittscheids Tutorial.

The following hardware is used inside my Box, you can of course use different stuff:

OnOffShim – Used to Shutdown the RaspberryPi and the Powerbank aswell

EasyAcc 20000 mAh – I used another cheap powerbank before, but sometimes the Box wouldnt boot properly so I used this one. Another advantage with this bank is, that you can charge it while the Box is running

Jumper cables – We want to solder as much as we can in the end, but for the prototyping/work in progress we will need to be kind of adaptable

Header Connectors – At first I soldered the Jumper-Cables directly onto the platines, then I thought I soldered something wrong and wanted to built it more.. professional and used these.

LEDs – To customize the Buttons

Breadboard – Used to test the wiring

Circuit board – to solder the LED-/Button- connections

Raspberry Pi 3B+ – I used the Raspberry 3B+, because it has built in WLAN, is kind of fast and has standard USB-Ports. You can as well use any other Pi

MicroSD card – you should take a fast card, so the box won’t take hours to boot

Speakers – The limiting factor with speakers will be the output power and the size. I used some old usb-speakers I had lying around..

Micro-USB to USB-Adapter – to charge the Box without the need to open it up

Arcade Buttons – You should think about which Buttons you want to buy, I just bought the ones recommended in the tutorial i used, now i think i shouldve paid more attention to the style I want to achieve.

RFID-Reader – The Reader for the NFC-Tags

HiFiBerry MiniAmp – The onboard sound-output is not shielded properly or at least there can be a lot of noises coming from it. So i decided to use a external soundcard.

„Flachsteckhülsen“ – I forgot those, they are used to connect the Jumpercable with the Arcade Buttons

What else do you need?

a soldering iron

a computer to remotely control the Pi

(a spotify premium account) – I’m using only Spotify-Links right now, you can also use local files or youtube/soundcloud-links.

If you want to use the Spotify-version, you have to create a client ID and a client secret, which you can do here: https://www.mopidy.com/authenticate/

Raspbian Lite Image

Win32Diskimager

PuTTy

So lets get it on!

The first thing I did was installing Raspbian Lite and the Phoniebox Script

You will need to flash the Raspbian-Image with the Win32DiskImager.

You simply add the Image, choose the correct drive-letter and hit „write“.

When it is finished, you create two files in the boot-partition.

„ssh“ without file-extension

and

„wpa_supplicant.conf“ in which you insert the following code:

country=XX

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1

network={

ssid="WLAN-Name"

psk="password"

key_mgmt=WPA-PSK

}

The first file enables ssh on your Pi, which is essential to remote-control it, and the second connects it to your local network (be sure to change the „XX“ with the correct country code). I recommend to connect the Pi to an LAN first, because we need to download a lot of stuff, it will work with WLAN aswell though.

You then put the sd-card into your RaspberryPi, plug in the RFID-reader and turn it on.

The connection via ssh works with PuTTy , essentially you look for the IP of the RaspberryPi on your Router-Settings, put it into Putty and open up the connection.

Login is „pi“

password is „raspberry“

As soon as you are connected, you should change your password with

passwd

To get the latest updates for Raspbian, type in

sudo apt-get update

sudo apt-get upgrade

This will take some time, after you are finished, you can install Jukebox4Kids with

cd; rm buster-install-*; wget https://raw.githubusercontent.com/MiczFlor/RPi-Jukebox-RFID/master/scripts/installscripts/buster-install-default.sh; chmod +x buster-install-default.sh; ./buster-install-default.sh

The installation asks you some stuff.

WiFi -> n

PCM as iFace -> no, should be „Master“ (if you use a HiFiBerry MiniAmp)

mpd -> y

default locations -> y

Start the first part of the installation with another y and wait some time.

It will ask you for the USB-RFID-Reader after some time, the correct one is (and the only option should be) „0 HXGCoLtd Keyboard“

When the installation has finished, we install OnOffShim:

curl https://get.pimoroni.com/onoffshim | bash

Don’t reboot at the end, instead change some things in the

sudo nano /etc/cleanshutd.conf

daemon_active=1

trigger_pin=17

led_pin=25

poweroff_pin=4

hold_time=2

shutdown_delay=0

polling_rate=1

There are two more thing to do, if you want to use a HifFiBerry MiniAmp:

sudo nano /etc/asound.conf

and copy this into it:

pcm.hifiberry {

type softvol

slave.pcm "plughw:0"

control.name "Master"

control.card 0

}

pcm.!default {

type plug

slave.pcm "hifiberry"

}

now edit the config.txt

sudo nano /boot/config.txt

#dtparam=audio=on

dtoverlay=hifiberry-dac

find the dtparam line and put a # before, which makes it a comment and add the second line.

Great! There a a couple of things, we need to install/change in the code, but for now we should have a working Phoniebox client. We can shut the Pi off with

sudo poweroff -h

Now we start throwing hardware together!

The following things need to be done:

Connect OnOffShim with RPi

Solder circuit board for LEDs and Buttons

Solder Jumper cables onto the buttons

Connect HiFiBerry MiniAmp with RPi

Connect Speakers with MiniAmp

Connect LEDs and Buttons with RPi

Lets start with some circuit diagrams from splittscheid:

As you can see, we connect on side of the button with Pin 20, which is „Ground“ and the other side between two resistors, which connect to Pin 17, which is „3V“, and Pin 40, which is „GPIO21“.

If the Button is pressed, the circuit is closed and our RaspberryPi gets the signal, that GPIO21 got pressed. The resistors are needed, so we don’t get a false signal.

Next we got the full diagram for the Buttons including LEDs:

I know it looks a bit complicated, but give it some time, try to think it through and then just do, what I have done, copy the work of someone else:

Since I dont use a OLED-Display, I didn’t solder the part on the right. My result for the buttons looks like this:

And here is my LED circuit board:

Some things to take care of:

Be sure to have proper connections. In the right button picture you can spot one connection, which isn’t working (2nd row, middle connection). It took me 3 hours of code-checking and reinstalling everything from scratch to find out, why one button wasn’t working

use a „third hand“ (Link)

Now we connect everything..

First the OnOffShim:

Pin 2 or 4 connects to RPis Pin 2 or 4

Pin 6 connects to Ground (Pin 6)

Pin 7 connects to Pin 7 (GPIO4)

Pin 11 connects to Pin 11 (GPIO 17)

HiFiBerry MiniAmp:

Pin 1 (3V) connects to RPis Pin 1 (3V)

Pin 12 (GPIO18) connects to Pin 12 (GPIO18)

Pin 19 (GPIO35) connects to Pin 19 (GPIO35)

Pin 38 (GPIO20) connects to Pin 38 (GPIO20)

Pin 40 (GPIO21) connects to Pin 40 (GPIO21)

And the speakers connect to the Amp +/-/-/+ (red, black / black, red)

Now, connect the LEDs and Buttons to the RPi. Which GPIO you use is on your own, you just have to remember every connection (write it down), because we need to assign the Buttons and LEDs in the Script later.

At last you connect the Powerbank with the OnOffShim.

Ok, thats it! That was easy, wasn’t it? If you did everything right, you can now push the power-button and the Pi should boot.

Log into it via ssh and install the GPIO software:

sudo apt-get install python3-gpiozero python-gpiozero

copy the python script into the scripts folder

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/gpio-buttons.py.sample /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py



and make it executable

sudo chmod +x /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py

Next we let the Phoniebox autostart at every boot:

Copy the service config files:

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/phoniebox-rfid-reader.service.stretch-default.sample /etc/systemd/system/phoniebox-rfid-reader.service

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/phoniebox-startup-sound.service.stretch-default.sample /etc/systemd/system/phoniebox-startup-sound.service

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/phoniebox-gpio-buttons.service.stretch-default.sample /etc/systemd/system/phoniebox-gpio-buttons.service

sudo cp /home/pi/RPi-Jukebox-RFID/misc/sampleconfigs/phoniebox-idle-watchdog.service.sample /etc/systemd/system/phoniebox-idle-watchdog.service

reload the daemon

sudo systemctl daemon-reload

and enable the services

sudo systemctl enable phoniebox-idle-watchdog

sudo systemctl enable phoniebox-rfid-reader

sudo systemctl enable phoniebox-startup-sound

sudo systemctl enable phoniebox-gpio-buttons

Awesome. Now we edit the python script:

sudo nano /home/pi/RPi-Jukebox-RFID/scripts/gpio-buttons.py

In the script, find this part:

shut = Button(3, hold_time=2)

vol0 = Button(13,pull_up=True)

volU = Button(16,pull_up=True,hold_time=0.3,hold_repeat=True)

volD = Button(6,pull_up=True,hold_time=0.3,hold_repeat=True)

next = Button(26,pull_up=True)

prev = Button(27,pull_up=True)

halt = Button(24,pull_up=True)

#reco = Button(6, pull_up=True) # Choose GPIO to fit your hardware

#play = Button(12,pull_up=True) # Choose GPIO to fit your hardware



Here, you change the numbers after Button(XX,..)

to the GPIO numbers you connected the Buttons to. Important: if you connected the volU(Volume Up)-Button to Pin 33(GPIO13) you change it to 13, not 33!

Now we clone the LED Script from splittscheid:

git clone https://github.com/splitti/phoniebox_led_control --branch master

sudo ln -s ~/phoniebox_led_control/service/phoniebox_led_control.service /etc/systemd/system/phoniebox_led_control.service

sudo systemctl daemon-reload

sudo systemctl enable /etc/systemd/system/phoniebox_led_control.service

and edit the led.py:

sudo nano /home/pi/phoniebox_led_control/led.py

I changed it completely to learn some python, you can just change the GPIO numbers if you want or you change the whole thing. If I have time, I will change this part of the tutorial by uploading my script to github..

#!/usr/bin/python3

import signal

import os

from time import sleep

from gpiozero import PWMLED, Button, LED

from signal import pause

from subprocess import check_output

ledprev = PWMLED(12)

ledplay = PWMLED(5)

lednext = PWMLED(22)

ledvolup = PWMLED(11)

ledvoldown = PWMLED(23)

buttonprev = Button(27)

buttonplay = Button(24)

buttonnext = Button(26)

buttonvolup = Button(16)

buttonvoldown = Button(6)

def GetShell():

process = check_output("/bin/ps -ef | grep mopidy | grep -v grep | awk '{print $2}'", shell=True)

process = process.decode()

return process

def flash_leds(interval):

ledprev.pulse(n=1

sleep(interval)

ledplay.pulse(n=1)

sleep(interval)

lednext.pulse(n=1)

sleep(interval)

ledvoldown.pulse(n=1)

sleep(interval)

ledvolup.pulse(n=1)

sleep(interval)

def ledbuttonctrl():

ledprev.source = buttonprev

ledplay.source = buttonplay

lednext.source = buttonnext

ledvoldown.source = buttonvoldown

ledvolup.source = buttonvolup

pause()

process=None

if not process:

print(process)

flash_leds(0.7)

process=GetShell()

sleep(0.3)

while True:

flash_leds(0.01)

#sleep(1)

ledbuttonctrl()

start the service:

sudo service phoniebox_led_control start

Done. Now reboot your Pi with

sudo reboot

You now can connect to your Phoniebox in the browser:

http://raspberrysIP/index.php

and connect your first RFID-Tag.

Everything should be running, congratulations and have a lot of fun, you now have the hardware, you just need a case. I built a custom case in 3D and a friend of mine printed it for me, I recommend to check some ressources like Instagram (#Phoniebox) and MiczFlors GitHub Site for inspiration on how your Phoniebox should look like.

There are some tweaks to let it boot a lot faster:

add the following lines to:

sudo nano /boot/config.txt

# Disables loading Bluetooth

dtoverlay=disable-bt

# Boot Delay Time

boot_delay=0

# the rainbow splash screen will not be shown on boot

disable_splash=1

# use full speed of the sdcard (fast card needed for this)

dtoverlay=sdtweak,overclock_50=100



Next, we add a few lines in the

sudo nano /etc/dhcpcd.conf

noarp

ip4only

noipv6

ARP checks, if the IP in the LAN is free, the others are selfexplaining, you only need ip4 in your local network.

Next thing is to disable some services, we won’t need for our MusicBox:

sudo systemctl disable keyboard-setup.service

sudo systemctl disable wifi-country.service

sudo systemctl disable triggerhappy.service

sudo systemctl disable dphys-swapfile.service

sudo systemctl disable hciuart.service

sudo systemctl disable raspi-config.service

sudo systemctl disable exim4.service

Last, we change the

sudo nano /boot/cmdline.txt

dwc_otg.lpm_enable=0 console=serial0,115200 console=tty3 root=PARTUUID= rootfstype=ext4 elevator=

deadline noatime nodiratime fastboot fsck.repair=yes rootwait loglevel=1 quiet logo.nologo

I will upload the .stl files of my case model tonight, if you have questions, just write in the comments. Thanks for reading.

And now here are some pictures of my work