Hoe een DIY Google Home-assistent met Raspberry Pi te bouwen
Advertentie
Spraakgestuurde assistenten zijn snel gemeengoed geworden. Veel huizen hebben een Alexa of Google Home die alles bestuurt, van verlichting tot media en zelfs tijdregistratie.
De technologie waarop deze apparaten werken, is voor iedereen - althans gedeeltelijk - beschikbaar. Met de Assistent SDK van Google kunt u de service op uw eigen apparaten gebruiken. In deze zelfstudie wordt uitgelegd hoe u de Google Assistent op uw Raspberry Pi instelt en spraak een LED activeert via GPIO-pinnen.
Benodigde hardware voor een Raspberry Pi Home Assistant
Je zal nodig hebben:
- Raspberry Pi met een nieuwe Raspbian-installatie op de SD-kaart Een besturingssysteem op een Raspberry Pi installeren Een besturingssysteem op een Raspberry Pi installeren Hier leest u hoe u een OS op uw Raspberry Pi installeert en hoe u uw perfecte installatie snel kunt klonen noodherstel. Lees verder .
- USB webcam of microfoon.
- Externe luidspreker
- Circuit uit de Pi LED-tutorial Hoe programmeer je je Raspberry Pi om LED-verlichting te besturen Hoe programmeer je je Raspberry Pi om LED-verlichting te besturen Op zoek naar een eenvoudig Raspberry Pi-project om aan de slag te gaan met codering en elektronica? Probeer enkele LED's aan te sluiten en te coderen om ze in en uit te schakelen! Meer lezen (optioneel)
- Een browser aangemeld bij uw Google-account.
Opmerking: de apparatuur voor deze zelfstudie kan enigszins variëren. Ik gebruikte een reserve USB-webcam puur voor de microfoon. Elke compatibele webcam of microfoon moet goed werken en er zijn uitgebreide lijsten met Pi-compatibele apparaten om te helpen.
Ik gebruik ook de 3, 5 mm-uitgang voor audio. HDMI en andere uitvoerbronnen zullen ook werken, hoewel hiervoor aanpassingen aan de onderstaande geluidsinstellingen nodig zijn.
Sluit de USB-webcam en luidspreker aan en stel het LED-circuit in als u het gebruikt.
Het geluid instellen
Deze tutorial kan direct op de Pi worden gevolgd of via een SSH-verbinding met de Pi.
Beide manieren beginnen in de terminal om de geluidsinstellingen te controleren. Gebruik de opdrachten arecord -l en aplay -l om de beschikbare apparaten weer te geven.
De afbeelding hierboven toont de USB-webcam als kaart 1 en apparaat 0 . Noteer de kaart- en apparaatnummers voor zowel microfoon- als luidsprekeruitgang.
Zorg er nu voor dat u zich in de map / home / pi bevindt, maak een nieuw bestand en open het in nano:
sudo nano .asoundrc
De inhoud van deze map is afhankelijk van de kaart- en apparaatnummers die u gebruikt. Hier kunt u ervoor kiezen om de voorkeur te geven aan HDMI-uitvoer in plaats van 3, 5 mm.
Wanneer u uw versie van de bovenstaande code hebt ingevoerd, drukt u op Ctrl + X om op te slaan en af te sluiten.
Test uw opstelling door een korte clip op te nemen en af te spelen:
Optionele stap: als u het ingangsvolume van uw microfoon wilt wijzigen, opent u alsamixer en drukt u op F6 om tussen apparaten te schakelen.
Dat is het! Het geluid is ingesteld.
Het Google-project maken
Open als alternatief de browser van Pi, als u verbonden bent via SSH, open een browser lokaal. Navigeer naar de Google Action Console en klik op Nieuw project .
Dit kan even duren. Laat het venster actief wanneer u klaar bent en open een nieuw tabblad - we komen hier zo op terug.
De Google Assistant API inschakelen
Er zijn een paar online aanpassingen die u moet maken om door te gaan. Navigeer naar de Google Assistant API-website en klik op Inschakelen .
Het project vereist ook activiteitsrechten. Ga naar je Activity Control-paneel en zorg ervoor dat de volgende activiteiten zijn ingeschakeld:
- Web- en app-activiteit (inclusief selectievakje Chrome-geschiedenis)
- Apparaat informatie
- Spraak- en audioactiviteit
Nu kunt u doorgaan met het registreren van het apparaat.
Uw Raspberry Pi registreren
Terug in de Action Console selecteert u Apparaatregistratie in het linkerdeelvenster. Maak onder Product een gemakkelijk te onthouden naam voor uw apparaat. De naam van de fabrikant is niet belangrijk (maar moet er wel zijn) en selecteer Auto voor het apparaattype.
Klik op Model registreren en klik in het volgende scherm op OAuth 2.0-referenties downloaden . Hiermee wordt een JSON-bestand naar uw computer gedownload. Als je niet bekend bent met JSON-bestanden, maak je geen zorgen, maar leer hoe je JSON gebruikt JSON Python Parsing: een eenvoudige gids JSON Python Parsing: een eenvoudige gids Er zijn bibliotheken en toolkits beschikbaar voor het parseren en genereren van JSON van bijna elke taal en omgeving. Dit artikel concentreert zich op methoden en problemen die voortkomen uit JSON python parsing. Lees meer is de moeite waard voor de toekomst!
De officiële Google-gids beveelt aan het bestand naar / home / pi te verplaatsen, dus open de bestandsbeheerder en doe dit nu.
Extra stap voor SSH-gebruikers:
Als u SSH gebruikt, hebt u het JSON-bestand naar uw lokale computer gedownload in plaats van naar de Pi. Om het over te zetten, opent u een afzonderlijk terminalvenster zonder SSH-verbinding. Kopieer vanuit dit venster het client-geheime JSON-bestand met deze opdracht:
scp ~/Downloads/client_secret_client-id.json :/home/pi/
Vervang "raspberry-pi-ip-adres" door het IP-adres van je Pi, en vergeet de dubbele punt voor het pad niet. Als u het JSON-bestand naar een andere locatie hebt gedownload, wijzigt u uw lokale pad om dit weer te geven. Voer uw wachtwoord in wanneer daarom wordt gevraagd en het bestand wordt naar de thuismap van Pi gekopieerd.
Schakel terug naar de SSH-terminal en navigeer naar / home / pi . Voer ls -l in om de bestanden in de map weer te geven. U zou het overgedragen JSON-bestand van de client moeten zien.
De SDK installeren
Google beveelt aan om in een virtuele Python-omgeving te werken. Maak een nieuwe virtuele omgeving met de naam env .
Als u dit nog nooit eerder hebt gedaan, helpt deze zelfstudie u om te leren hoe u virtuele Python-omgevingen kunt gebruiken.
Installeer de nieuwste versies van Pip, Setuptools en Wheel en activeer uw virtuele omgeving:
env/bin/python -m pip install --upgrade pip setuptools wheel source env/bin/activate
Google Assistent heeft enkele afhankelijkheden die u nu in de virtuele omgeving moet installeren.
sudo apt-get install portaudio19-dev libffi-dev libssl-dev libmpg123-dev
Installeer ten slotte het hulpprogramma Google Assistant SDK, Samples en OAuth.
python -m pip install --upgrade google-assistant-library python -m pip install --upgrade google-assistant-sdk[samples] python -m pip install --upgrade google-auth-oauthlib[tool]
Dat is alles wat nodig is om aan de slag te gaan. Als een van de installaties faalt, controleer dan de spelling en afstand grondig.
Authenticatie van de Raspberry Pi
Gebruik de google-auth-oauthlib [tool] met het eerder gedownloade JSON-bestand om uw Raspberry Pi te verifiëren.
google-oauthlib-tool --scope https://www.googleapis.com/auth/assistant-sdk-prototype \ --scope https://www.googleapis.com/auth/gcm \ --save --headless --client-secrets /home/pi/YOUR_CLIENT_SECRET_ID.json
U moet UW_CLIENT_SECRET_ID vervangen door het gedownloade bestand, dus het is de moeite waard om eerst de bestandsnaam te kopiëren. Deze klant-ID moet correct zijn. Wijzig de bestandsnaam niet!
Je zou een bericht met een link moeten ontvangen waarin je wordt gevraagd een autorisatiecode in te voegen.
Als u op de koppeling klikt, wordt de browser geopend. U wordt gevraagd het apparaat in te schakelen in uw Google-account. Kopieer de autorisatiecode die volgt en plak deze terug in uw terminalvenster.
Je zou een bevestiging moeten ontvangen met Referenties opgeslagen: / home / pi…, wat betekent dat de Pi met succes is geautoriseerd met je Google-account.
Testen
Nu alles op zijn plaats is, is het tijd om je Pi Google Assistant te testen. Voer de assistent uit met dit commando:
googlesamples-assistant-hotword --project-id my-dev-project --device-model-id my-model
U moet my-dev-project vervangen door uw Project-ID (te vinden onder het tandwiel Instellingen van de Action Console). Uw apparaat-model-ID wordt vermeld onder het gedeelte Apparaatregistratie van de Action Console.
Probeer het! Zeg 'OK Google' en stel een vraag. U kunt de programma-uitvoer in de terminal zien terwijl u het antwoord hoort:
Dat is het! Google Assistant wordt nu uitgevoerd op uw Raspberry Pi. Houd er rekening mee dat als het uitvoervolume een beetje laag is, u dit kunt wijzigen door te zeggen: "Hé Google, zet uw volume op tot 80%."
Bonus: spraakgestuurde GPIO
Het is mogelijk om lichten te besturen met een Arduino en Siri, maar er is een eenvoudigere methode. Als u een LED instelt, kunt u de Google Assistent gebruiken om deze met uw stem te bedienen.
Google Assistant instellen om te werken met de GPIO-pinnen is relatief eenvoudig, maar vereist enkele extra stappen. Ga naar de Google Action Console en vind uw apparaat onder Apparaatregistratie. Klik erop en open het eigenschappenmenu:
Schakel de eigenschap OnOff in en klik op Opslaan.
Zorg er nu voor dat je je in de virtuele omgeving van env bevindt en kloon een versie van de SDK naar je Pi met behulp van git:
git clone https://github.com/googlesamples/assistant-sdk-python
Aangezien dit een virtuele omgeving is, moet u RPi.GPIO installeren voordat u verder gaat.
pip install rpi.gpio
Navigeer nu naar de map met het hotword.py- script.
cd assistant-sdk-python/google-assistant-sdk/googlesamples/assistant/library
Het script wijzigen
Je moet een paar regels toevoegen aan het hotword.py-script, dus open het in de nano-editor:
nano hotword.py
Voeg onder de importoverzichten uw eigen voor RPi.GPIO toe.
import RPi.GPIO as GPIO
Zoek naar de methode process_event . Verwijder op regel 66 de printinstructie of voeg commentaar toe en voeg een if-instructie toe om de LED te besturen.
#print('Do command', command, 'with params', str(params)) if command == "action.devices.commands.OnOff": if params['on']: print('---------------') print('Led turned on') print('---------------') GPIO.output(18, GPIO.HIGH) else: print('---------------') print('Led turned off') print('---------------') GPIO.output(18, GPIO.LOW)
Deze logica regelt de LED, maar is tot nu toe niet geconfigureerd om uit te voeren. Stel het in in de functie main () voordat de methode process_event wordt aangeroepen.
GPIO.setmode(GPIO.BCM) GPIO.setup(18, GPIO.OUT, initial=GPIO.LOW)
Nu is de GPIO-pin ingesteld om uit te voeren en te initialiseren in een lage status. Opslaan en afsluiten. U kunt uw gemodificeerde script uitvoeren door uw model-ID nummer (te vinden in de Action Console) als een argument.
python hotword.py --device-model-id YOUR-MODEL-ID-HERE
De terminaluitgang is hetzelfde als voorheen en de assistent werkt standaard. Als u nu echter zegt: "OK Google, schakel in", ziet u een nieuwe uitvoer:
Opmerking: de bovenstaande afbeelding is bijgesneden en toont alleen de assistent die het verzoek hoort en de afdrukopdracht is toegevoegd aan het script.
U zou ook uw LED moeten zien oplichten!
Je eigen DIY Raspberry Pi Google Home-assistent
Dit project is een goede introductie voor het gebruik van Google API-services. Nu u een Google Assistent-apparaat hebt, kunt u enkele van de beste Google Home-opdrachten proberen. De Google Home-opdrachten Cheatsheet De Google Home-opdrachten Cheatsheet Onze cheatsheet van Google Home-opdrachten bevat tal van handige acties, waaronder entertainment, informatie en automatisering. Lees meer - we hebben enkele geweldige Google Home-minispellen bekeken 15 Google Home-opdrachten voor minigames en meer 15 Google Home-opdrachten voor minigames en meer Je kunt zoveel dingen doen met Google Home-opdrachten. Hier zijn verschillende leuke Google Home-opdrachten die het proberen waard zijn. Lees verder .
Ontdek meer over: doe-het-zelfstudielessen, Google Assistant, LED-verlichting, Raspberry Pi, Smart Hubs.