Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Android SDK

Android Things: Hinzufügen von Google Assistant

by
Read Time:14 minsLanguages:

German (Deutsch) translation by Alex Grigorovich (you can also view the original English article)

Mit dem Wachstum des Internet der Dinge (Internet of Things, IoT) mussten Entwickler und Ingenieure überdenken, wie die Benutzer täglich mit Geräten interagieren.

Während Bildschirme für Websites und die meisten Apps gut funktionieren, kann die Bedienung von Geräten, die mit der realen Welt verbunden sind, etwas langwieriger sein, wenn Sie mehrere Tasten oder einen Bildschirm verwenden müssen, um zu funktionieren. Eine Möglichkeit, dies zu umgehen, besteht darin, die Sprachsteuerung auf Ihren Geräten zu aktivieren.

In diesem Tutorial erfahren Sie mehr über Google Assistant und wie Sie es Ihren Android Things IoT-Geräten hinzufügen können.

Wenn Sie vor dem Start einen kleinen Hintergrund zu Android Things benötigen, lesen Sie einige meiner anderen Beiträge hier auf Envato Tuts+.

Assistant SDK

Mit dem Google Assistant SDK können Sie Ihren IoT-Geräten Sprachsteuerungen mit Schlüsselworterkennung, Verarbeitung natürlicher Sprache und anderen Funktionen für maschinelles Lernen hinzufügen. Mit dem Assistant SDK kann man viel machen, aber dieses Tutorial hat nur die Grundlagen: Wie Sie es in Ihre Android Things-Geräte integrieren können, um Fragen zu stellen, Informationen abzurufen und und interagieren mit den Standardfunktionen des Assistant "out of the box".

In Bezug auf die Hardwareanforderungen haben Sie einige Optionen. Sie können einen Raspberry Pi verwenden, der mit Android Things mit einem AIY Voice Kit geflasht wurde.

Oder Sie können einen Standardlautsprecher mit AUX-Anschluss und ein USB-Mikrofon verwenden.

Darüber hinaus können Sie jede andere I²S-Hardwarekonfiguration verwenden. Obwohl wir I²S in diesem Tutorial nicht im Detail behandeln werden, ist es erwähnenswert, dass das Voice Kit dieses Protokoll verwendet. Sobald Sie ein Mikrofon und einen Lautsprecher eingerichtet haben, müssen Sie Ihrem Gerät auch eine Taste hinzufügen. Diese Taste muss zwei Zustände verfolgen: gedrückt und losgelassen. Sie können dies mit einem mehrzackigen Arcade-Knopf oder einem Standardknopf mit einem an einem der Pole angebrachten Pulldown-Widerstand erreichen.

Referenzen

Sobald Sie Ihre Hardware angeschlossen haben, ist es Zeit, das Assistant SDK zu Ihrem Gerät hinzuzufügen. Zunächst müssen Sie eine neue Anmeldeinformationsdatei für Ihr Gerät erstellen. Die entsprechenden Anweisungen finden Sie in den Google Assistant-Dokumenten. Sobald Sie Ihre Datei credentials.json haben, müssen Sie sie im Verzeichnis res/raw Ihres Android Things-Moduls ablegen.

credentialsjson file in the resraw directorycredentialsjson file in the resraw directorycredentialsjson file in the resraw directory

Nachdem Ihre Anmeldeinformationen bei Google erstellt wurden, müssen Sie einige Berechtigungen für Ihre App deklarieren. Öffnen Sie die Datei AndroidManifest.xml und fügen Sie die folgenden Zeilen in das manifest-Tag ein, jedoch vor dem application-Tag.

Beachten Sie, dass Sie Ihr Gerät nach der Installation der App mit diesen Berechtigungen neu starten müssen, damit sie erteilt werden.

Als nächstes müssen Sie das gRPC-Modul in Ihre App kopieren, um mit dem Heimgerät zu kommunizieren. Dies wird etwas knifflig. Der beste Ort, um es zu bekommen, ist die Google Assistant Android Things-Beispiel-App, die Sie im Android Things GitHub-Konto finden. Dann müssen Sie die Datei settings.gradle aktualisieren, um das neue Modul wiederzugeben.

Fügen Sie nach dem Aktualisieren von settings.gradle das Modul als Abhängigkeit in Ihr things-Modul ein, indem Sie die folgende Zeile in die build.gradle-Datei des things-Moduls aufnehmen und den Google-Schaltflächen Treiber (den Sie zum Aktivieren des Mikrofons benötigen) und den optionalen Voice Hat-Treiber einschließen, wenn Sie verwenden diese Hardware.

Sie müssen protobuf auch als Abhängigkeit in Ihre build.gradle-Datei auf Projektebene aufnehmen.

Als Nächstes nehmen wir die oauth2-Bibliothek in unser Projekt auf, indem wir die build.gradle-Datei des things-Moduls öffnen und unter dem dependencies Folgendes hinzufügen:

Hier können Konflikte auftreten, wenn Ihr Projekt die Espresso-Abhängigkeit mit einer ähnlichen Fehlermeldung aufweist:

Wenn ja, entfernen Sie einfach die Espresso-Abhängigkeit von build.gradle.

Nachdem Sie Ihr Projekt synchronisiert haben, erstellen Sie eine neue Klasse mit dem Namen Credentials.java, um auf Ihre Anmeldeinformationen zuzugreifen.

Embedded Assistant Helper Class

Sobald Ihre Credentials.java-Klasse erstellt wurde, ist es Zeit, eine neue Klasse mit dem Namen EmbeddedAssistant.java zu erstellen. Dies ist eine Hilfsklasse, die ursprünglich von Ingenieuren bei Google geschrieben wurde, um den Google-Assistant für Android-Things einfach zu verpacken. Obwohl diese Klasse recht einfach zu verwenden ist, indem Sie sie einfach in Ihr Projekt aufnehmen, möchten wir uns mit ihr befassen und verstehen, wie sie tatsächlich funktioniert.

Zuerst erstellen Sie zwei innere abstrakte Klassen, die zum Behandeln von Rückrufen in der Konversation und von Anforderungen an die Assistant-API verwendet werden.

Sobald Ihre beiden inneren Klassen geschrieben sind, definieren Sie die folgenden globalen Werte oben in Ihrer Klasse. Die meisten davon werden später in dieser Datei initialisiert. Diese Werte werden verwendet, um den Gerätestatus und die Interaktionen mit der Assistant-API zu verfolgen.

Umgang mit API-Antworten

Während das oben genannte ein StreamObserver<ConverseRequest> -Objekt für Anforderungen an die Assistant-API enthält, benötigen Sie auch eines für Antworten. Dieses Objekt besteht aus einer switch-Anweisung, die den Status der Antwort überprüft und dann entsprechend behandelt.

Der erste Fall prüft, ob ein Benutzer spricht, und verwendet den ConversationCallback, um den Rest der Klasse darüber zu informieren, dass eine Antwort unmittelbar bevorsteht.

Danach werden Konversation, Lautstärke und Mikrofonstatus überprüft und aktualisiert.

Im dritten Fall wird ein Audioergebnis aufgenommen und für den Benutzer wiedergegeben.

Der letzte Fall leitet einfach Fehler weiter, die während des Konversationsprozesses aufgetreten sind.

Die letzten beiden Methoden in diesem Stream behandeln Fehlerzustände und die Bereinigung nach Abschluss eines Konversationsergebnisses.

Streaming von Audio

Weiter müssen Sie eine Runnable Datei erstellen, die das Audio-Streaming in einem anderen Thread verarbeitet.

Erstellen von Assistant

Nachdem Sie Ihre globalen Werte definiert haben, ist es an der Zeit, das Framework zum Erstellen des EmbeddedAssistant durchzugehen. Sie müssen in der Lage sein, die Anmeldeinformationen für Ihre App mithilfe der zuvor erstellten Klasse Credentials.java abzurufen.

Um sich selbst zu instanziieren, verwendet diese Klasse einen privaten Konstruktor und das Builder-Muster.

Die innere Builder-Klasse enthält mehrere Methoden zum Initialisieren der Werte in der EmbeddedAssistant-Klasse, z.B. Abtastrate, Volumen und Benutzeranmeldeinformationen. Sobald die build() -Methode aufgerufen wird, werden alle definierten Werte auf dem EmbeddedAssistant festgelegt, die für den Betrieb erforderlichen globalen Objekte werden konfiguriert und ein Fehler wird ausgegeben, wenn erforderliche Daten fehlen.

Herstellen einer Verbindung zur Assistant-API

Nachdem der EmbeddedAssistant erstellt wurde, muss die connect() -Methode aufgerufen werden, um eine Verbindung zur Assistant-API herzustellen.

Nachdem Sie eine Verbindung zur API hergestellt haben, verwenden Sie zwei Methoden zum Starten und Stoppen von Konversationen. Diese Methoden senden Runnable Objekte an mAssistantHandler, um Konversationsstatusobjekte an die Anforderungs- und Antwortströme zu übergeben.

Herunterfahren

Schließlich wird die destroy() -Methode zum Herunterfahren verwendet, wenn Ihre App geschlossen wird und nicht mehr auf die Assistant-API zugreifen muss.

Verwenden von Assistant

Sobald Ihre Helferklassen ausgearbeitet sind, ist es Zeit, sie zu verwenden. Sie tun dies, indem Sie Ihre Android Things MainActivity-Klasse bearbeiten, um mit dem EmbeddedAssistant und der Hardware zur Steuerung des Google Assistant zu interagieren. Fügen Sie zunächst die Button.OnButtonEventListener-Schnittstelle zu Ihrer Activity hinzu.

Als Nächstes müssen Sie die Elementvariablen und Konstanten hinzufügen, die von Ihrer App benötigt werden. Diese Werte steuern das Entprellen der Schaltfläche, die Assistant auslöst, sowie die Lautstärke, das Audioformat, die zuvor erstellte UserCredentials-Klasse und die Hardware für Ihr Gerät.

Sobald Sie Ihre Konstanten definiert haben, müssen Sie einige Rückrufobjekte erstellen, die für Gespräche und Anforderungen mit Assistant verwendet werden.

In mConversationCallback werden Sie feststellen, dass wir einen Prozentsatz der Volumenänderung in einer gemeinsamen Einstellung speichern. Auf diese Weise bleibt die Lautstärke Ihres Geräts für Ihre Benutzer auch nach einem Neustart konstant.

Da Assistant auf Ihrem Gerät asynchron arbeitet, initialisieren Sie alles für die Verwendung der Assistant-API in onCreate(), indem Sie eine Reihe von Hilfsmethoden aufrufen, die wir im weiteren Verlauf dieses Lernprogramms definieren werden.

Die erste Hilfsmethode ist initVoiceHat(). Wenn das Voice Hat-Schutzschild an einen Raspberry Pi angeschlossen ist, wird das Gerät durch diese Methode initialisiert, sodass Benutzer das angeschlossene Mikrofon und den Lautsprecher verwenden können. Wenn kein Voice Hat angeschlossen ist, können ein Standard-AUX-Lautsprecher und ein USB-Mikrofon verwendet werden und werden automatisch weitergeleitet. Der Voice Hat verwendet I2S für die Verarbeitung von Audio-Peripheriegeräten am Bus und wird von einer von Google geschriebenen Treiberklasse umschlossen.

Assistant reagiert in diesem Beispiel nur, wenn eine Auslösetaste gedrückt gehalten wird. Diese Schaltfläche wird wie folgt initialisiert und konfiguriert:

Wenn die Taste gedrückt wird, wartet der Assistant auf ein neues Gespräch.

Weitere Informationen zu GPIO und Android Things finden Sie in meinem Tutorial zur Eingabe und Ausgabe mit Android Things.

Da wir Volume-Informationen in den SharedPreferences unseres Geräts gespeichert haben, können wir direkt darauf zugreifen, um das Volume des Geräts zu initialisieren.

Das Assistant SDK erfordert zur Verwendung eine Authentifizierung. Glücklicherweise haben wir früher in diesem Tutorial eine Methode in der EmbeddedAssistant-Klasse speziell für diese Situation erstellt.

Die letzte Hilfsmethode, die in onCreate() aufgerufen wurde, initialisiert das EmbeddedAssistant-Objekt und verbindet es mit der API.

Das Letzte, was Sie tun müssen, ist, Ihre Peripheriegeräte ordnungsgemäß herunterzufahren, indem Sie die onDestroy() -Methode in Ihrer Activity aktualisieren.

Nach all dem sollten Sie in der Lage sein, mit Ihrem Android Things-Gerät zu interagieren, als wäre es ein Google Home!

Abschluss

In diesem Tutorial haben Sie mehr über GoogleAssistant erfahren und erfahren, wie er zu Ihren Android Things-Anwendungen hinzugefügt werden kann. Mit dieser Funktion können Ihre Nutzer auf neue Weise mit Ihrem Gerät interagieren und es steuern sowie auf die zahlreichen Funktionen von Google zugreifen. Dies ist nur ein Teil der fantastischen Funktionen, die in eine Android Things-App integriert werden können und mit denen Sie neue und erstaunliche Geräte für Ihre Benutzer erstellen können.

Während du hier bist, schau dir einige meiner anderen Beiträge zu Android Things auf Envato Tuts+ an!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.