
Bouw je eigen streaming speaker met Raspberry Pi (2)
In het eerdere artikel 'DIY Sonos speaker met Raspberry Pi' las je alles over het berekenen en bouwen van een streaming speaker op basis van een Raspberry Pi en een TDA7297 versterker module. In dit artikel vertel ik je meer over de software die je nodig hebt om de boel aan de praat te krijgen.
Plug-and-play software: PiMusicBox
Omdat Linux voor mij allemaal vrij nieuw is heb ik eerst naar een plug-and-play oplossing gezocht. Wil je geen gedoe met shell’s, ssh en config-files surf dan naar www.pimusicbox.com en download de software. In de gedownloade zip-file vind je een .img-bestand. Dit bestand moet op de SD-kaart van je Raspberry Pi terecht komen en wel op de volgende manier:

- Download Win32DiskImager
- Start Win32DiskImager en selecteer het .img-bestand van PiMusicBox dat je zojuist gedownload hebt
- Plaats de SD-kaart in je computer en kijk goed welke drive-letter hij toegewezen krijgt
- Selecteer de juiste drive-letter in Win32DiskImager. LET OP: controleer dit extra goed, selecteer je per ongeluk de verkeerde schijf dan wordt deze zonder waarschuwing geformatteerd en overschreven!
- Klik op 'Write' om de image naar de SD-kaart weg te schrijven
Als de image succesvol is weggeschreven kan je de inhoud van de SD-kaart met de Windows Verkenner/Explorer bekijken. Ga naar de map 'config' en open het bestand settings.ini. Hierin kun je de instellingen van PiMusicBox bewerken, heb je bijvoorbeeld een Spotify Premium account dan voer je hier je inloggevens in op de volgende manier:
SPOTIFY_USERNAME = 'spotifyusername'
SPOTIFY_PASSWORD = 'spotifypassword'
Of je wifi instellingen als je een Raspberry Pi 3 of Wifi-stick hebt:
WIFI_NETWORK = 'mywifinetwork'
WIFI_PASSWORD = 'mypassword'
PiMusicBox selecteert standaard je USB-geluidskaart, maar je kunt dit ook overrulen naar 'analog' of 'hdmi' in settings.ini:
OUTPUT = 'hdmi'
Sla settings.ini op en haal de SD-kaart uit je computer en stop hem in de Raspberry Pi. Vervolgens start je de Raspberry Pi op en ga je in de browser van je computer naar http://musicbox.local. Dit is de responsive web-interface van de PiMusicBox waarin je muziek kunt kiezen en afspelen, maar ook instellingen kunt wijzigen. De web-interface werkt ook op mobiel en tablet.

Voor meer informatie over PiMusicBox lees je de bijgesloten of online handleiding of neem een kijkje in de FAQ op www.pimusicbox.com.
Custom Mopidy installatie in 10 stappen
PiMusicBox werkt supereenvoudig en stabiel, maar na een tijdje wilde ik toch meer. Zoals bijvoorbeeld gewekt worden met mijn favoriete muziek, en knoppen om bijvoorbeeld te pauzeren en door te spoelen. Daarom besloot ik om toch maar een custom installatie van Mopidy op mijn Raspberry Pi 2 te plaatsen. Mopidy is een muziek-server voor Linux die de basis vormt van de PiMusicBox software.
Omdat deze custom installatie van Mopidy een stuk ingewikkelder is heb ik hem opgedeeld in 10 stappen.
1. Formateer de SD-kaart van je Raspberry Pi
Haal de SD-kaart uit je Raspberry Pi en plaats hem in je computer. Waarschijnlijk ziet Windows nog maar 60 MB aan schijfruimte op je SD-kaart in plaats van de 4 of 8 GB die het was en moet de SD-kaart dus geformatteerd worden met SDFormatter.

Installeer en start SDFormatter, selecteer de juiste drive-letter en zet 'format size adjustment' aan onder de knop 'option'. Je SD-kaart wordt nu hersteld naar de oorspronkelijk grootte.
2. Installeer Raspbian Jessie op de SD-kaart
Vervolgens installeren we de standaard Linux versie van de Raspberry Pi: Raspbian Jessie. Download de laatste versie van Raspbian Jessie en unzip het .img-bestand. Je kunt zelf kiezen of dat je de versie met of zonder de desktopomgeving wilt installeren (Pixel of Lite). Als je niet van plan bent ooit een beeldscherm op de Raspberry Pi aan te sluiten kun je gerust voor de Lite versie kiezen.
Het .img-bestand dat je zojuist gedownload hebt kun je nu met Win32DiskImager op je SD-kaart zetten, zie het stukje over PiMusicBox hierboven voor instructies. Als de image succesvol is weggeschreven naar de SD-kaart open je hem met Windows Verkenner. Maak een nieuw bestand aan in de hoofdmap (root) van de SD-kaart genaamd SSH, zonder extensie en zonder inhoud. Dit is nodig om de SSH-verbinding te activeren die we in de volgende stap nodig hebben.
Stop de SD-kaart in je Raspberry Pi, sluit een netwerkkabel aan en start de Pi op.
3. Via SSH verbinden met je Raspberry Pi
Omdat de Raspberry Pi geen beeldscherm, toetsenbord of muis heeft en we toch nog een heleboel moeten installeren en instellen gaan we op afstand verbinding maken met de Pi. Met behulp van Secure Shell (SSH) kan je via een beveiligde netwerkverbinding inloggen op de Raspberry Pi. Om met een Windows computer SSH toegang te verkrijgen heb je een client nodig genaamd PuTTy. Download PuTTy en start PuTTy.exe.

Start een nieuwe sessie met PuTTy naar het IP-adres van je Raspberry Pi op poort 22. Als je het IP-adres van je Raspberry niet weet kun je het opzoeken in de DHCP tabel van je router die vaak IP-adres 192.168.0.1 of 192.168.1.1 heeft. Zodra PuTTy verbinding heeft gemaakt log je in als gebruiker 'pi' met wachtwoord 'raspberry'. Tijdens het typen van het wachtwoord worden voor de veiligheid geen karakters getoond maar je kunt gewoon doortypen en op enter drukken.

4. Raspi-config uitvoeren
Om je Raspberry Pi goed in te stellen kun je het beste gebruik maken van raspi-config, een voorgeïnstalleerd configuratie programma. Alle teksten die je hieronder in de gele code-blokken aantreft zijn commando's die je 1-op-1 kunt overnemen in PuTTy.
sudo raspi-config
Navigeer met je toetsenbord door het getoonde menu en verander het standaardwachtwoord, expandeer het file-system en stel de juiste tijdzone in. Vervolgens sluit je raspi-config en start je je Raspberry opnieuw op.
sudo reboot
5. Installeer Mopidy
Nu gaan we de muziek-server Mopidy installeren. Meer informatie over de installatie vind je in de documentatie van Mopidy.
wget -q -O - https://apt.mopidy.com/mopidy.gpg | sudo apt-key add -
sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/jessie.list
sudo apt-get update
sudo apt-get install mopidy
6. Installeer Mopidy backend extensions
Een kale Mopidy-installatie kan alleen lokale files afspelen. Voor andere formaten en opties moet je backend extensies installeren. Bijvoorbeeld voor Spotify Premium en TuneIn:
sudo apt-get install mopidy-spotify
pip install Mopidy-TuneIn
Er zijn nog veel meer extensies voor Mopidy bijvoorbeeld voor Soundcloud, Dirble, Google Music en SomaFM. Meer informatie over backend extensions voor Mopidy vind je hier.
7. Installeer Mopidy web extensions
Om Mopidy te kunnen bedienen hebben we ook een interface nodig. Omdat ik nu gewend ben aan de interface van PiMusicBox installeer ik dezelfde webclient.
pip install mopidy-musicbox-webclient
8. Installeer een DLNA/UPNP client voor Mopidy
Al mijn eigen muziek staat op mijn Synology NAS opgeslagen. Deze wil ik graag kunnen afspelen met de DS Audio app via UPNP of DLNA audio streaming. Daarom installeer ik een UPNP-client voor Mopidy zodat mijn speaker automatisch als UPNP device wordt gedetecteerd in het netwerk. De UPNP-client die ik gebruik heet UPMPDCLI.
Met het volgende commando maak je een nieuw bestand aan genaamd 'upmpcli.list' en open je het in de standaard Linux text-editor Nano:
sudo nano /etc/apt/sources.list.d/upmpdcli.list
In dit bestand voeg je twee regels toe:
deb http://www.lesbonscomptes.com/upmpdcli/downloads/raspbian-jessie/ unstable main
deb-src http://www.lesbonscomptes.com/upmpdcli/downloads/raspbian-jessie/ unstable main
Druk CTRL + O om het bestand op te slaan en CTRL + X om Nano te verlaten. Vervolgens installeer je UPMPDCLI met de volgende commando’s:
sudo apt-get update
sudo apt-get install upmpdcli
9. Mopidy configuratie bewerken
Nu Mopidy met al zijn extensies geïnstalleerd is kunnen we de configuratie gaan aanpassen. Open het volgende bestand:
sudo nano /etc/mopidy/mopidy.conf
Voeg onderstaande regels toe om de webserver toegankelijk te maken van buitenaf en om de USB audio adapter als standaard audio output te gebruiken.
[http]
hostname = 0.0.0.0
[audio]
output = alsasink device=hw:1,0
Ook hier sla je de wijzigingen op met CTRL + O en sluit je Nano met CTRL + X.
10. Mopidy automatisch opstarten als service
Natuurlijk willen we dat Mopidy automatisch start bij het opstarten van de Raspberry Pi. Daarvoor moeten we de Mopidy service toevoegen aan de Linux service-manager.
sudo systemctl enable mopidy
Vervolgens starten we de Mopidy-service handmatig.
sudo systemctl start mopidy
Nu kun je dan eindelijk in je browser de Musicbox webclient openen door naar http://ip-adres:6680/musicbox_webclient te navigeren. Als het goed is verschijnt de bekende interface en kun je muziek afspelen!

Raspberry Pi automatiseren en programmeren met Node Red
Iedere recente installatie van Raspbian Jessie is voorzien van de visuele programmeeromgeving Node Red op basis van Node. Met Node Red kun je je Raspberry Pi programmeren via een eenvoudige web interface door het slepen van blokken en verbindingen. Binnen de blokken kun je echter ook custom code toevoegen in de vorm van JavaScript voor geavanceerde functionaliteit. Node Red is ideaal voor Internet of Things projecten waarbij data uit verschillende bronnen gekoppeld en gecombineerd moet worden.
Node-red Mopidy-extension
Node Red kan ook gebruikt worden om de Mopidy-server aan te sturen. Hiervoor heb je wel een extensie nodig die geïnstalleerd wordt met behulp van de Node Package Manager (NPM) en daarom moeten we dus eerst NPM installeren.
sudo apt-get install npm
Zodra NPM geïnstalleerd is downloaden we de Mopidy extensie naar de Node Red map.
cd ~/.node-red
sudo npm install node-red-contrib-mopidy
Node red automatisch starten als Linux service
Ook Node Red moet automatisch opstarten met het starten van de Raspberry Pi, dus ook de Node Red service voegen we toe aan de servicemanager.
sudo systemctl enable nodered.service
Start Node Red de eerste keer handmatig met het commando:
sudo node-red-start
Node Red gebruiken op de Raspberry Pi
Door in de browser van je computer naar http://ip-adres:1880 te navigeren kom je in de visuele editor terecht. Sleep de blokken uit het menu links het werkblad op en verbind ze door het trekken van lijnen om jouw eigen logica in te bouwen. In de onderstaande afbeelding zie je de flows die ik heb aangemaakt om de drie fysieke knoppen, die ik via GPIO op de Raspberry Pi heb aangesloten, te koppelen aan de corresponderende Mopidy-functies.

Uiteraard is er nog veel meer mogelijk, zo kun je verbinding maken met Weather Underground voor het ophalen van weersvoorspellingen, dingen twitteren of mailen, text-to-speech gebruiken of een webserver bouwen. Met behulp van het 'inject'-blok heb ik bijvoorbeeld een wekker-functie aangemaakt die op weekdagen om 7.00u Radio 538 opstart. En met het 'delay'-blok heb ik een sleeptimer gemaakt die de muziek na 30 minuten automatisch stopt.
Voor mij was dit project de eerste kennismaking met Linux, een proces met veel vallen en opstaan, maar het is gelukt. Het enige wat mij nu nog te doen staat is het programmeren van een display driver voor het HT1632c led-display dat ik heb ingebouwd in mijn speaker.