Met een Raspberry Pi, een luidspreker en een microfoon in een compacte behuizing maak je eenvoudig je eigen slimme luidspreker gebaseerd op Google Assistant. Leuk om te doen en goedkoper dan een Google Home.
Door: Ada van de Berg
De Google Home [1] is een interessante slimme luidspreker, maar nogal prijzig. Google heeft ook een AIY Voice Kit [2] uitgebracht, een do-it-yourselfkit met luidspreker, microfoon, drukknop en kartonnen doosje als behuizing. Je steekt er dan nog een Raspberry Pi 3 in en installeert het officiële Voice Kit SD-image op de microSD-kaart en creëert zo je eigen slimme luidspreker. Maar de AIY Voice Kit is voorlopig moeilijk verkrijgbaar in Europa.
Daarom kwamen we op het idee om zelf onze eigen Google Home-kit te creëren. In samenwerking met Kiwi Electronics [3] lieten we het doosje van de AIY Voice Kit namaken en kozen we alternatieve componenten voor de luidspreker en microfoon (zie kader). Het geheel past samen met een Raspberry Pi 3 in de compacte behuizing. Voor de software maken we gebruik van het besturingssysteem Raspbian en de Google Assistant SDK. Het resultaat? Een slimme assistent die niet in je woonkamer misstaat en maar de helft kost van een Google Home-apparaat. Er is alleen wat knutsel- en configuratiewerk voor nodig, en dat leggen we je in dit artikel uit.
Benodigdheden + aanbieding
Onze slimme assistent bestaat uit de volgende componenten:
- Lasergesneden behuizing
- Raspberry Pi 3
- Voedingsadapter
- microSD-kaart
- ReSpeaker 2-Mics Pi HAT
- 8 Ohm 1 W 3" luidspreker
- JST-PH 2-aderig kabeltje
VOORDEEL!
Kiwi Electronics biedt de lezers van PC-Active een set met dit alles aan voor een scherpe prijs. Het enige wat je dan nog nodig hebt, is een soldeerbout en soldeertin om het 2-aderige kabeltje aan de luidspreker te solderen. Ga naar www.hcc.nl/ledenvoordeel om gebruik te maken van deze aanbieding.
Raspbian installeren
Download Raspbian Stretch Lite [4] van de website van de Raspberry Pi en pak het zipbestand uit.
Download dan het programma Etcher [5]. Steek een microSD-kaart in de kaartlezer van je pc.
Klik in Etcher op Select image en selecteer het uitgepakte image-bestand van Raspbian Stretch Lite. Controleer ook of het opslagapparaat dat Etcher heeft gekozen, overeenkomt met de schijfletter van je microSD-kaart en verander het indien nodig met Change. Klik daarna op Flash! om het image naar de microSD-kaart te schrijven en bevestig dat Windows Command Processor toegang tot de microSD-kaart krijgt.
Schrijf het image van Raspbian Stretch Lite
naar de microSD-kaart voor je Raspberry Pi
Netwerk configureren
Configureer het draadloze netwerk van de Pi
Haal het microSD-kaartje uit je pc en steek het er opnieuw in. Rechtsklik in de Verkenner op een lege plaats in de partitie, kies Nieuw / Tekstdocument en geef het bestand de naam ssh, zonder de extensie .txt. Bevestig dat je de extensie wilt veranderen. Door dit bestand schakelt Raspbian nu de OpenSSH-server in, zodat je met het programma PuTTY via het netwerk op je Pi kunt inloggen.
Het draadloze netwerk moet daarvoor ook nog geconfigureerd zijn. We willen immers geen ethernetkabel aan onze slimme luidspreker hebben hangen. Maak dus op dezelfde manier als je het bestand voor ssh hebt aangemaakt, een bestand met de naam wpa_supplicant.conf aan. Open het in Kladblok en voer de volgende regels in:ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
network={
ssid="JOUW_SSID"
psk="JOUW_WIFI_WACHTWOORD"
}
Sla het bestand op, koppel de microSD-kaart daarna af en haal hem uit je pc.
Slimme luidspreker assembleren
Sluit de ReSpeaker 2-Mics Pi HAT aan op je Raspberry Pi 3. Dat doe je door het bordje met de uitsparingen over de twee rijen gpio-pinnen van de Pi te schuiven. Links en rechts van het gpio-blok bevinden zich de twee microfoons.
De luidspreker sluiten we via het 2-aderige JST-kabeltje aan, maar dat moeten we wel eerst nog aan de luidspreker solderen. De achterkant van de luidspreker bevat een plus- en minpool. Soldeer het rode draadje van de JST-kabel aan de pluspool en het zwarte draadje aan de minpool. Steek daarna de JST-stekker in de kleine connector op de ReSpeaker.
Behuizing
Wil je je slimme assistent van een mooi jasje voorzien, dan maak j gebruik van de behuizing die in het aanbiedingspakket zit (zie "Benodigheden + aanbieding"). Op www.hcc.nl/home-assistant vind je uitgebreide uitleg over het in elkaar zetten met behulp van deze behuizing.
De ReSpeaker 2-Mics Pi HAT en een 3inch-luidspreker maken van de Pi een compacte Google-assistent
Steek het geheel nu in de behuizing op zo'n manier dat de luidspreker zich achter de daarvoor voorziene plaats bevindt en de poorten van de Raspberry Pi achter de juiste uitsparingen komen, zodat die nog beschikbaar zijn. Steek tot slot de microSD-kaart in de Pi en sluit de voedingskabel aan. Je slimme luidspreker start nu op.
Eerste keer inloggen
Verander het standaardwachtwoord 'raspberry'
zodat niet iedereen zomaar
op je slimme luidspreker kan inloggen
Log nu in op het ip-adres van je Pi (sluit even tijdens het opstarten een scherm aan om dat te zien of kijk in de webinterface van je router bij de dhcp-leases) via PuTTY [6]. Klik op Ja om de host key van je Raspberry Pi te aanvaarden, vul als gebruikersnaam pi en als wachtwoord raspberry in.
Voer het configuratieprogramma uit met sudo raspi-config, kies Change User Password en wijzig je wachtwoord. Je dient je nieuwe wachtwoord twee keer in te voeren. Sluit daarna het configuratieprogramma af door met de tabtoets naar Finish te gaan en op enter te drukken. Update tot slot Raspbian naar de laatste nieuwe versie met sudo apt update en sudo apt upgrade. Bevestig met y dat je de nieuwe pakketten wilt installeren.
Driver installeren
De wm8960 audiochip op de ReSpeaker is nog niet standaard ondersteund in de Linux-kernel. Installeer daarom de driver als volgt:sudo apt install git
git clone https://github.com/respeaker/seeed-voicecard.git
cd seeed-voicecard
sudo ./install.sh 2mic
Reboot daarna je Pi met sudo reboot.
Audio configureren
Nu dienen we Raspbian nog zo te configureren dat hij standaard de ReSpeaker gebruikt voor audio in- en uitvoer. Bekijk met arecord -l de verschillende opname-apparaten (normaal alleen de ReSpeaker) en met aplay -l de verschillende afspeelapparaten.
We maken het ons eenvoudig en schakelen de on-board audio van de Raspberry Pi 3 uit. We maken daarvoor een nieuw configuratiebestand aan met sudo nano /etc/modprobe.d/blacklist-alsa.conf. Zet daarin de volgende regel:
blacklist snd_bcm2835
Reboot de Pi met sudo reboot. Bekijk daarna met arecord -l en aplay -l de herkende audioapparaten. Dat is nu in beide gevallen alleen de ReSpeaker. Vanaf nu gebruikt Raspbian dus standaard de ReSpeaker voor audio.
Test nu de microfoon en luidspreker uit. Neem een geluidsopname van 5 seconden op:
arecord -f S16_LE -d 5 test.wav
En spreek ondertussen iets in. Speel de opname daarna af met:
aplay test.wav
Hoor je jezelf, dan is de audio correct geconfigureerd. Het volume pas je aan met de opdracht alsamixer. Standaard krijg je de speakeruitgang eerst te zien en de luidsprekeruitgang met F4. Met Esc sluit je alsamixer af.
Maak een nieuw project aan op het Google Cloud Platform
Google Cloud Platform
Open de console van het Google Cloud Platform [7], log in met je Google-account, klik op het omgekeerde driehoekje bovenaan naast My Project en dan op het plusteken om een nieuw project aan te maken. Geef je project een naam en klik op Maken.
Selecteer dan het zojuist aangemaakte project, klik links op API's en services en dan Bibliotheek. Zoek naar assistant, klik op de Google Assistant API en dan op Inschakelen. Klik dan bovenaan rechts op Inloggegevens maken.
Klik op client-ID, geef je product een naam en klik op Opslaan. Kies als app-type Overige, geef het client-ID een naam en klik op Maken. Daarna krijg je je client-ID en clientgeheim te zien. Klik op OK en daarna op het downloadicoontje rechts naast je client-ID.
Download het programma pscp van de website van PuTTY, open een opdrachtprompt en voer de opdracht pscp Downloads_secret_ENZOVOORT.json pi@IP: uit, met op de plek IP het ip-adres van je Pi. Vul je wachtwoord in en daarna staat het bestand in de home-directory van de gebruiker pi op je Pi.
Open daarna de pagina Activiteitsopties [8] en log in met je Google-account. Zorg dat Web- en app-activiteit, Inclusief Chrome-browsegeschiedenis en activiteit op websites en in apps die gebruikmaken van Google-services, Apparaatgegevens en Spraak- en audioactiviteit zijn ingeschakeld.
Google Assistant API
Installeer daarna op de Pi een virtuele Python-omgeving:sudo apt install python3-dev python3-venv
python3 -m venv env
env/bin/python -m pip install --upgrade pip setuptools
source env/bin/activate
Installeer in die omgeving nu de Google Assistant SDK:
python -m pip install --upgrade google-assistant-library google-auth-oauthlib click
Nu heeft de Google Assistant SDK nog de toestemming nodig om in naam van jouw Google-account Google Assistant-vragen te stellen. Dat doe je met de volgende opdracht:
google-oauthlib-tool --client-secrets /home/pi/client_secret_ENZOVOORT.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
Je krijgt nu een url te zien. Open die in je webbrowser, sta de Google Assistant uitgebreide toegang tot je Google-account toe met een klik op Toestaan en kopieer de code die je te zien krijgt. Plak die code in het PuTTY-venster na de boodschap Enter the authorization code:.
Spelen met Google Home
Je start de Google Assistant-demo met de opdracht google-assistant-demo. Als je nu "Ok, Google" zegt, luistert de Google-assistent en kun je vragen stellen, voorlopig alleen nog in het Engels. Vraag bijvoorbeeld "What's the time?", "How's the weather?", "How do I make peppermint tea?" of "Who's Melania Trump?". Je krijgt in het PuTTY-venster ondertussen voor al je spraak de tekst te zien die de Google-assistent herkent.
Tot slot zorgen we er nog voor dat onze Pi automatisch bij het opstarten ook de Google-assistent opstart. Maak daarvoor een bestand google-assistant.sh aan met sudo nano ~/google-assistant.sh met de volgende inhoud:#!/bin/bash
source /home/pi/env/bin/activate
/home/pi/env/bin/google-assistant-demo
En maak het bestand uitvoerbaar met chmod +x ~/google-assistant.sh. Start dan sudo nano /etc/systemd/system/google-assistant.service, met de volgende inhoud:
[Unit]
Description=Google Assistant
[Service]
ExecStart=/bin/bash -c '/home/pi/google-assistant.sh'
Restart=always
User=pi
[Install]
WantedBy=multi-user.target
Schakel de service in met sudo systemctl enable google-assistant.service. Na de volgende reboot draait de Google-assistent automatisch en luistert naar je vragen. Loopt er iets mis, kijk dan met sudo service google-assistant status na wat juist.
De Google-assistent herkent moeiteloos je spraakopdrachten
Je Google-assistent uitbreiden
Je Google-assistent is nog op allerlei manieren uit te breiden. Met IFTTT [9] bijvoorbeeld. Zo stuur je eenvoudig via IFTTT met enkele spraakcommando's je Google-assistent, je Hue-verlichting of je Nest-thermostaat aan. IFTTT kan ook aangepaste http-requests uitvoeren als antwoord op een vraag die je aan je Google-assistent stelt, bijvoorbeeld om een domoticasysteem als Domoticz [10] via spraak te besturen. En op zijn wiki legt ReSpeaker-fabrikant seeed uit hoe je de on-board leds gebruikt of de Google-assistent laat reageren op de drukknop van de ReSpeaker [11].
Infolinks