Bouw je eigen streaming speaker met Raspberry Pi (2)

Bouw je eigen streaming speaker met Raspberry Pi (2)

Gepubliceerd op: 10-12-2016 17:46

Hé, jij houdt niet van advertenties maar wél van kwaliteitscontent? Dat mag, maar misschien wil je dan een donatie doen via PayPal of creditcard?

Of doe je aankopen via één van onze winkelpartner-links in de zijbalk.

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:

Win32DiskImager gebruik je om .img-files weg te schrijven
  1. Download Win32DiskImager
  2. Start Win32DiskImager en selecteer het .img-bestand van PiMusicBox dat je zojuist gedownload hebt
  3. Plaats de SD-kaart in je computer en kijk goed welke drive-letter hij toegewezen krijgt
  4. 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!
  5. 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.

De responsive webinterface van PiMusicBox laat je streamen vanaf Spotify, Soundcloud, TuneIn en meer

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.

Micro SD-kaart van een Raspberry Pi formatteren met SDFormatter V4.0

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.

PuTTy is een SSH en Telnet client voor Windows computers

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.

Via SSH kun je raspi-config uitvoeren om je Raspberry Pi in te stellen

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!

De responsive webinterface van Mopidy na een custom installatie

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.

Diverse flows in Node Red om een Mopidy music-server aan te sturen met GPIO buttons

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.

Meer van dit soort artikelen lezen?

Reageren