Raspberry Pi wekkerradio maken (met internetradio en eigen muziek)

Noud van Kruysbergen
0

Inhoudsopgave

Opstaan in de ochtend wordt wat leuker als je in ieder geval met aangename muziek wordt gewekt. Met onze Pi-wekkerradio kun je podcasts, radiostreams of muziek van streamingdiensten en natuurlijk je eigen muziekbibliotheek horen bij het wakker worden. We laten zien welke hardware je nodig hebt en hoe je de software installeert en instelt.

Met dit project heb je meer mogelijkheden dan met een kant-en-klare oplossing en het is ook nog leuk en leerzaam om zelf te maken. Wil je net als Bill Murray in de film Groundhog Day met de muziek van Sonny and Cher wakker worden? Of heb je meer Metallica nodig om uit de veren te komen? Geen probleem!

Onze Pi-wekkerradio kan het allemaal. Via de webinterface kun je kiezen waarmee je ‘s morgens gewekt wordt, en dat kan zowel van een harde schijf, streamingdienst of muziekbibliotheek in het netwerk afkomstig zijn.

Raspberry Pi wekkerradio maken scherm software instructies

Scherm voor Pi

Als basis raden we in ieder geval een Raspberry Pi 3 aan. In principe draait de wekkerradiosoftware ook op een Raspberry Pi 2, maar dan kunnen er wel eens storingen in het geluid optreden.

Als scherm hebben we gekozen voor een 5”-lcd van Waveshare. Dat heeft wel alleen een resistief touch-screen en een resolutie van 800 × 480, maar voor het gebruik als wekkerradio is dat voldoende. Bovendien zijn de meegeleverde hdmi-bridge en de verbinding voor het touchscreen via GPIO redelijk subtiel.

Raspberry Pi wekkerradio maken scherm display Waveshare

Er zijn heel veel alternatieve oplossingen die hogere resoluties en een capacitief touchscreen hebben, maar die kosten minstens 50 euro. Daar komen dan nog de behuizing en eventuele kabels bij. In principe werken die met deze software ook, we hebben namelijk geprobeerd om die zo universeel mogelijk te maken.

Let er bij het kopen van het scherm op dat je de juiste versie hebt, want er bestaan veel klonen, en ook fabrikant Waveshare heeft 5”-displays in meerdere varianten te koop. We hebben hier het model ‘5inch HDMI LCD’ met ‘Bicolor case’ gebruikt. Soms staat er achter de naam nog een ‘(A)’ of ‘V2’. Hier vind je het betreffende display op de Waveshare-wiki. Wil je zelf een behuizing maken, dan kun je je de plastic case uit de onlineshop besparen en alleen het display kopen. Je kunt bij Waveshare ook een tekening met het ontwerp voor een behuizing van 8 mm dik triplex downloaden (of via deze pagina). Dat kun je naar believen aanpassen.

Meer leuke Raspberry Pi-projecten vind je in Het Ultieme Raspberry Pi Handboek 2019

Speakers en montage

Voor het geluid heb je nog luidsprekers nodig. Aangezien de GPIO-aansluiting van de Pi voor het grootste deel door het display in beslag genomen is, kun je helaas niet ook nog een DAC (Digital Analog Converter) aan de GPIO koppelen. Dan moet je een ander display (lees: duurder) kopen, en dan wordt het samen met de DAC wel een prijzig geheel. Voor de functie als wekkerradio heb je genoeg aan een paar simpele pc-boxjes – het slechte geluid van de hoofd­telefoonuitgang van de Pi zal daarmee niet opvallen. Vind je dat niet goed genoeg, dan kun je bijvoorbeeld ook een S150-speakerset van Logitech kopen voor zo’n 15 euro. Dat zijn ook geen geluidswondertjes, maar ze hebben wel een USB-DAC die beter klinkt dan de analoge uitgang van de Pi. Bovendien heb je er alleen een usb-poort voor nodig. Of je gebruikt een usb-soundcard (vanaf 9 euro) met een paar boxen.

Raspberry Pi wekkerradio maken speaker luidspreker usb DAC

Zet eerst de meegeleverde behuizing in elkaar. Bij onze bestelling zat helaas geen handleiding. Die kun je eventueel ook hier vinden. Vervolgens zet je het display zo op de GPIO-pinnen dat de hdmi-aansluitingen van het display en de Pi boven elkaar liggen. Tot slot steek je de hdmi-bridge erop. Bij de eerste keer aanzetten laat het beeld alleen strepen zien. Dat is normaal, omdat de benodigde drivers ontbreken, en als dat niet te lang duurt heeft dat geen negatieve gevolgen voor de lcd.

Raspberry Pi installeren

Download eerst Raspbian Buster Lite van raspberrypi.org en kopieer de image met een programma als balena­Etcher op de sd-kaart. Daarna werp je de kaart uit en steek je hem meteen weer terug, zodat de pc de partitietabel opnieuw inleest.

Omdat het nieuwe scherm zonder de juiste instellingen alleen ruis laat zien, moet je de Pi via ssh configureren. Om ssh te kunnen gebruiken, moet je nog een leeg bestand genaamd ssh in de boot-­partitie van de sd-kaart zetten. Als je ook meteen een wifi­verbinding wilt configureren, kun je het bestand wpa_supplicant.conf op dezelfde plek aanmaken. Zet daar de onderstaande inhoud in en pas de SSID en PSK, oftewel de naam en het wachtwoord van het wifi­netwerk, aan je eigen situatie aan.

country=NL
network={
ssid=“JOUW-WIFI”
psk=“JOUW-WACHTWOORD”
}

Bevind je je niet in Nederland, pas dan ook nog de landcode aan het land waar je bent aan (bijvoorbeeld BE voor België). Dan weet de wifi-module van de Pi welke zendkanalen hij legaal mag afzoeken.

Als dat klaar is, werp je de sd-kaart uit, steek je hem in de Pi en start je die op. Na een paar minuten zou de Pi via het netwerk bereikbaar moeten zijn. Kijk in de netwerklijst van je router welk ip-adres die aan je Raspberry Pi heeft gegeven. Daarna kun je met ssh verbinding maken. De gebruikersnaam is pi en het wachtwoord is raspberry.

Software voor wekkerradio

De software voor de wekkerradio bestaat uit twee delen. De software voor de touchinterface is een Python-­script dat we zelf geschreven hebben (broncode hier). Het afspelen van muziek gaat via het programma Mopidy. Dat is een muziekspeler die je via het netwerk kunt bedienen en met plug-ins kunt uitbreiden. De touch­interface grijpt voor alle muziekfuncties op Mopidy terug. De alarmfunctie neemt hij zelf voor zijn rekening.

Raspberry Pi wekkerradio alarm scherm

Als het tijd is om op te staan, speelt de Pi-wekker niet alleen muziek af, maar krijg je ook een visueel signaal van twee afwisselende schermen.

Aangezien de met Raspbian meegeleverde versie van Mopidy al aardig op leeftijd is, kun je beter de pakket­bronnen van de ontwikkelaars van Mopidy gebruiken. Daarvoor moet je eerst de signature-key van het pakket importeren. Anders gaat de pakket­manager klagen over niet verifieerbare pakketten. We beginnen met:

wget -q -O – https://apt.mopidy.com/mopidy.gpg | sudo apt-key add –

Vervolgens heb je nog de eigenlijke pakketbronnen nodig. Die worden ook met wget gedownload:

sudo wget -q -O /etc/apt/sources.list.d/mopidy.list https://apt.mopidy.com/buster.list

Dan moet je de pakketmanager apt instrueren om de pakketbronnen na te lopen en het systeem op de laatste stand te brengen.

sudo apt update
sudo apt upgrade

Als alles is bijgewerkt, moet je de afhankelijkheden voor het project installeren. Dat apt-commando is erg lang, daarom kun je dat en de andere commando’s uit dit artikel kopiëren en in de commandline plakken. Apt installeert de basisonderdelen van de X-server, drivers, Mopidy en enkele Python-­modules voor Mopidy en de touchinterface. Het zal Python-programmeurs opvallen dat er modules voor Python 2 en 3 in de lijst staan. Dat komt omdat de touchinter­face op Python 3 is gebaseerd en Mopidy nog aan versie 2 vastzit. Mopidy’s ontwikkelaars werken al aan een verhuizing naar versie 3. De pakketten ­mopidy-tunein en mopidy-podcast-itunes dienen voor de ondersteuning van radiostreams en podcasts.

Doorlezen is gratis, maar eerst even dit:

Dit artikel is met grote zorg samengesteld door de redactie van c’t magazine – het meest toonaangevende computertijdschrift van Nederland en België. Met zeer uitgebreide tests en praktische workshops biedt c’t de diepgang die je nergens online vindt.

Bekijk de abonnementen   Lees eerst verder

Drivers

Om ervoor te zorgen dat het scherm niet alleen strepen laat zien, moet je de lcd-drivers van Waveshare installeren. Download daarvoor de driver van GitHub en pak hem uit:

wget https://github.com/waveshare/LCD-show/archive/master.zip
unzip master.zip

Ga vervolgens naar de nieuwe directory LCD-show-master en voer het commando sudo ./LCD5-show uit. Na het installeren start de Raspberry Pi opnieuw op. Vanaf dat moment is het afgelopen met de strepen en zie je de boot-uitvoer van de Pi. Als je een ander scherm gebruikt moet je de installatie-instructies daarvan volgen.

Om de interface te starten moet de gebruiker pi bij het opstarten automatisch ingelogd zijn en moet er een X-server voor hem gestart worden. Om dat in te stellen, log je weer via ssh op je Pi in en start je sudo raspi-config. Kies in het menu optie 3 ‘Boot Options’, vervolgens ‘B1 Desktop / CLI’ en ‘B4 Desktop Auto­login’. Er is nog geen X-server, dus zal je gevraagd worden lightdm te installeren, maar dat moet je niet doen. Ook moet je de Raspberry Pi nog niet herstarten als daar om gevraagd wordt.

Omdat de Raspberry Pi een Brits product is, hebben de ontwikkelaars de standaard tijdzone en locatie daarop geconfigureerd. Dat is voor het gebruik als wekkerradio in een andere tijdzone wat lastig. Boven­dien worden dan de Engelse afkortingen voor de weekdagen gebruikt. Om ervoor te zorgen dat de tijd en taal van het systeem correct weergegeven worden, moet je in raspi-config twee instellingen veranderen. Ga naar het hoofdmenu en kies optie 4 ‘Localisation Options’ en dan ‘I1 Change Locale’, om de taal en datum­formaten aan te passen.

Bij het openen van die optie krijg je een lange lijst met landcodes. Scrol met de pijltjestoetsen naar beneden en kies met de spatiebalk de instelling voor je land uit. Voor Nederland is dat ‘nl_NL.UTF8 UTF-8’. Kies in elk geval de UTF-8 variant voor je taal respectievelijk regio uit. Met een druk op de Tab-toets kom je op de <Ok>-knop. Bevestig met de Enter-toets. Vervolgens vraagt het programma naar de ‘Default locale for the system environment’. Ook daar kies je dezelfde optie en bevestig je met de Tab- en Enter-toets. Dan genereert de Pi de taalgegevens voor de gekozen optie en activeert ze.

Raspberry Pi wekkerradio achtergrond slaapstand

Als de wekkerradio niet actief is, krijg je alleen de tijd te zien op een zwarte achtergrond. De letters zijn helder genoeg om in het donker te kunnen zien hoe laat het is.

Tot slot moet je nog de tijdzone aanpassen via ‘I2 Change Timezone’. Het menu werkt hetzelfde als het vorige. Kies daar ‘Europe’ met een druk op Enter. Daarna nog ‘Amsterdam’ en dan is de correcte tijdzone ingesteld.

Mopidy

Een groot voordeel van Mopidy is dat je het ook via een webinterface kunt bedienen. Daarvoor moet je wel een plug-in installeren. Er zijn veel webinterfaces die de Mopidy-interface overzichtelijk presenteren. We gebruiken hier Iris, omdat dat erg overzichtelijk en mooi is. Vind je Iris niets, dan gebruik je gewoon een van de alternatieven. Bovendien hebben we nog de plug-in Mopidy-ALSA-Mixer nodig om het geluidsvolume te regelen. Beide installeer je met dit commando:

sudo pip install Mopidy-Iris Mopidy-ALSAMixer

Mopidy biedt twee interfaces voor de bediening: HTTP en het MPD-protocol. MPD staat voor Music Player Daemon en is een netwerkmuziekspeler, die als het ware Mopidy’s voorbeeld is. Voor het MPD-protocol zijn er verschillende clients voor alle platforms. Zo kun je Mopidy ook met een MPD-app op je smart­phone bedienen. Beide protocollen moeten geactiveerd zijn. Daarvoor bewerk je het bestand /etc/mopidy/­mopidy.conf met rootrechten en zet je er onderaan de volgende regels in:

[http]
hostname = ::
[mpd]
hostname = ::

De hostname-regels zorgen ervoor dat Mopidy op alle interfaces via HTTP en MPD luistert. HTTP gebruikt poort 6680 en MPD 6600. Activeer de service met sudo systemctl enable mopidy. In het bestand zie je ook de paden voor de plaats van je eigen muziek (media_dir). Zo nodig kun je die aanpassen.

Als je niet de in de Pi geïntegreerde geluidschip gebruikt, maar een externe geluidskaart, dan moet je het geluidssysteem Alsa laten weten dat het de externe geluidskaart als standaard moet gebruiken. Bewerk daarom het bestand /etc/asound.conf als root en zet er de volgende twee regels in:

defaults.ctl.card 1;
defaults.pcm.card 1;

Aangezien bij de Raspberry Pi het onboard-geluid altijd de index 0 krijgt, stap je over op de tweede geluidskaart, die altijd index 1 krijgt.

Touch-interface

Dan moet je de touchinterface installeren. Download de software van GitHub. Kopieer de link van het item ‘Source code (zip)’ en download het bestand met wget op de Raspberry Pi. Pak het vervolgens met unzip uit in de home-directory van pi. Hernoem de nieuwe directory naar alarm en ga daar naartoe.

Voor het starten van de interface zorgt het bestand run.sh. Maak dat uitvoerbaar met chmod +x run.sh. Open ook het bestand clock.conf om daar bij locale het volgende te zetten:

Locale = nl_NL

De andere instellingen kun je laten staan. Sla het bestand op en sluit het af. Ga daarna weer terug naar de home-directory van gebruiker pi.

Er is nog een aanpassing nodig om ervoor te zorgen dat de X-server de interface bij het opstarten laadt. Maak het nog niet bestaande bestand .xsession­rc aan in de home-directory van pi – let op de punt aan het begin – en zet daar het startcommando voor de inter­face in:

xterm -e ~/alarm/run.sh

Om de voor de interface benodigde Python-modules te kunnen downloaden, moet je een zogenaamd ‘virtual environment’ aanmaken. Dat is een van het systeem afgescheiden Python-omgeving. Daarvoor gebruik je het volgende commando:

python3 -m venv ~/venv

Daarmee heb je een virtual environment in de direc­tory venv aangemaakt. Activeer dat zodat alle volgende stappen daarbinnen verlopen:

source ~/venv/bin/activate

Dan worden alle Python-modules in de voor de touch­interface verantwoordelijke virtual environment geplaatst. Het installeren gaat met de Python-pakketmanager pip:

pip install -r ~/alarm/requirements.txt

Dat leest de benodigde modules uit het bestand requirements.txt en downloadt ze.

Start de Raspberry Pi vervolgens opnieuw op. In het vervolg moet hij dan met de touchinterface opstarten.

Raspberry Pi wekkerradio touch interface

De touchinterface van de wekker geeft toegang tot de belangrijkste functies.

Alarm instellen

Je wekker moet natuurlijk niet ‘s morgens verder afspelen waar hij gisteren was opgehouden. Daarom laadt hij op de wektijd de playlist Alarm en speelt af wat daarin staat. De inhoud daarvan kun je via de webinter­face van Mopidy bewerken. Op de playlist kun je radio­zenders, bestanden en podcasts zetten.

Als je streamingdiensten als Spotify wilt gebruiken, moet je kijken of daar een Mopidy-plug-in voor bestaat en die installeren. Dan kun je ook de content daarvan toevoegen. De touchinterface van je wekkerradio doet verder niets, die geeft alleen commando’s aan Mopidy door.

Om een alarm in te stellen, tik je in de linkerbovenhoek van het scherm. Daar zie je al een klein alarmpictogrammetje en de ingestelde wektijd. Wanneer er muziek speelt, laat de interface de titel en voor zover aanwezig een afbeelding zien. Met de pictogrammen onderaan het scherm kun je het volume regelen en het afspelen bedienen. Als het afspelen gepauzeerd is, zie je alleen de klok, de volgende wektijd en een play-knop. Na een tijdje zonder activiteit gaat het beeld over in een donkere zwartwit weergave van de klok.

In de pauzestand zie je een afspeelknop om het afspelen te hervatten.

Vind je de achtergrondafbeelding niet mooi, dan kun je het bestand wallpaper.jpg vervangen. Als het tijd is om op te staan, begint de muziek, het scherm knippert en je krijgt de tijd te zien. Tik op het scherm om het knipperen en de muziek te stoppen.

Wanneer je ideeën hebt voor verbeteringen of veranderingen in de software, kun je pull-requests of issues indienen bij GitHub. Veel plezier bij het opstaan!

(Merlin Schumacher en Noud van Kruysbergen, c’t magazine)

Lees meer workshops en uitgebreide achtergrondartikelen op je gemak in c't jul-aug/2020

Deel dit artikel

Lees ook

Thuiswerken op een Chromebook: oplossingen en tips

Thuiswerken zonder Windows-pc? Dat kan op een Chromebook vaak prima. De volgende tips kunnen het werken nog vergemakkelijken.

Software updaten met Topgrade: alle software ineens

Topgrade doet updates voor Linux, macOS en Windows in één keer. Zo kun je makkelijker de software updaten zonder verschillende update­-programma's han...

0 Praat mee
avatar
  Abonneer  
Laat het mij weten wanneer er