Hallo und willkommen zu einer neuen Reihe rund um das Thema Sprachassistenten und deren Einbindung in die Arduino Welt.
Sprachassistenten oder auch Intelligenter persönlicher Assistent sind zur Zeit einer der größten Smart Home Trends und begeistern durch ihre intuitive und natürliche Bedienung immer mehr Menschen. Ein Sprachassistent ist im Prinzip ein Endgerät, auf dem eine KI-Software lokal oder in der Cloud ausgeführt wird, die das gesprochene Worte analysiert und darauf reagiert.
Kommuniziert man mit einem Sprachassistenten, so beantwortet dieser verbale Fragen oder steuert damit vernetzte Smart Home Geräte.
In dieser neuen Blogreihe möchte ich Ihnen zeigen, wie Sie die sprachgesteuerten Systeme für beliebige selbstgebaute Projekte einbinden und so eigene Smart Home Geräte bauen können. Die beliebtesten universellen Sprachassistenten sind Amazon Alexa, Google Assistant, Samsung Bixby, Apple Siri, Telekom Magenta (regional: Deutschland) und Microsoft Cortana.
All diese Systeme konkurrieren um die Gunst von Smart Home Fans. Nach meinen aktuellen Recherchen ist die beliebteste Sprachassistentin Alexa von Amazon. Daher werde ich die kommenden Folgen der Reihe jeweils ausschließlich für den Sprachassistenten Alexa vorstellen, da es mir leider nicht möglich ist, jeden auf dem Markt befindlichen Sprachassistenten in vollem Umfang mit einzubeziehen. Prinzipiell können die vorgestellten Lösungen und Prinzipien jedoch auch auf alle anderen Sprachassistenten übertragen werden.
Voraussetzung ist hierfür allerdings, dass das Kommunikationsprotokoll des Sprachassistenten bekannt ist und in Arduino-basierter Hardware umgesetzt werden kann. Erleichternd ist es in jedem Falle, wenn zusätzlich dazu Bibliotheken für den gewählten Sprachassistenten zur Verfügung stehen.
Bei der Suche nach einer schönen ersten Anwendung für Alexa kramte ich in meiner Flohmarktkiste, ob da etwas Brauchbares zu finden ist. Mir fiel dabei eine Lavalampe in die Hände, bei der ich dachte, dass es bestimmt eine schöne Kombination der moderne und des Retro Stil wäre, diese zusammenzubringen. Gesagt, getan! Dabei wollte ich nicht nur einfach einen Alexa-kompatiblen Zwischen-Stecker zwischen der Lavalampe und der Steckdose schalten, sondern die Lavalampe direkt zum Steuer- und programmierbaren Teil der Alexa Welt werden lassen.
Meine Lavalampe ist so aufgebaut, dass die Heizlampe in der Lavalampe selbst mit Niedergleichspannung von ca. 12 Volt betrieben wird und NICHT direkt mit Netzspannung. Die Lampe selbst hängt also an einem externen, schutzisolierten Niederspannungstransformator, der selbst in keiner Weise für unseren Umbau verändert werden darf!
Dieses Projekt ist somit AUSSCHLIESSLICH und NUR für Kleinspannungslavalampen mit einer Betriebsgleichspannung bis zu 20 Volt geeignet! Bei Netzspannung besteht Lebensgefahr!
Da es die 230 Volt Lavalampenvarianten leider auch im Handel gibt, überprüfen Sie bitte sorgfältig, dass Sie zum Nachbauen eine geeignete Lavalampe für dieses Projekt besitzen. Auch darf die Stromstärke der geschalteten Lampe nicht die maximale schaltbare Stromstärke des Schaltrelais übersteigen. Diese ist auf dem verwendeten Relais aufgedruckt. Zur Veranschaulichung habe ich ein Bild meiner Lavalampe hinzugefügt.
Man sieht deutlich den schwarzen, schutzisolierten Transformator, dessen Ausgangsspannung sich im Kleinspannungsbereich befindet. Doch wie schalten wir nun unsere passende Lavalampe mit Alexa auf einem möglichst geeigneten Weg?
Benötigte Hardware
Um nun unsere Lavalampe mit Alexa und der Arduino Plattform schalten zu können, benötigen wir folgende Hardware:
Anzahl | Bauteil | Anmerkung |
---|---|---|
1 | Relais Modul | |
2 | ESP8266 Node MCU | |
1 | DC-DC – Step Down Converter | |
1 | Kleinspannungs-Lavalampe |
Mit Kleinspannungs- transformator < 20 Volt
|
Die Hardware für dieses Projekt kann komplett bei AZ-Delivery bezogen werden. Des Weiteren muss die Arduino IDE für das Projekt erweitert werden. Es muss zunächst für den eingesetzten ESP8266 die Board Bibliothek eingebunden werden. Sehen Sie hierzu im eBook zum entsprechend eingesetzten ESP8266 nach.
Hinweis: Zusätzlich wird für alle Teile der Reihe die Bibliothek "EspAlexa" benötigt. Diese kann auf der Github Seite https://github.com/Aircoookie/Espalexa heruntergeladen werden.
Eine gute Beschreibung, wie Bibliotheken in die Arduino IDE eingebunden werden können, finden Sie im Blog „Arduino IDE - Programmieren für Einsteiger - Teil 1“ im Abschnitt Bibliotheken Verwaltung. Zur Funktion und Funktionsmöglichkeiten der Bibliothek "EspAlexa" finden sich Informationen in Englisch in der zugehörigen readme Datei oder auf https://github.com/Aircoookie/Espalexa/blob/master/readme.md
Darüber hinaus werden die Bibliotheken:
- ESP8266WiFi
- ESP8266WebServer
benötigt. Damit sind die Vorbereitungen der Arduino IDE abgeschlossen.
Der Aufbau
Bevor wir uns an das Aufbauen der eigentlichen Schaltung machen können, müssen wir den DC-DC-Konverter noch auf 5 Volt Ausgangsspannung einstellen. Dazu benötigen wir neben dem bereits vorhandenen Kleinschutzspannungstransformator der Lavalampe ein Voltmeter.
Dieses schließen wir an den Ausgang des DC-DC-Konverters an und stellen den Spannungsmessbereich auf Gleichspannung. Wir drehen an dem blauen Potentiometer mit einem Plastikschraubendreher so lange, bis die Ausgangsspannung exakt 5.00 Volt beträgt.
Jetzt ist auch zu erkennen, warum wir KEINESFALLS eine Lavalampe mit Netzspannung verwenden dürfen. Wir beziehen die Betriebsspannung von 5 Volt der kompletten Elektronik über einen nicht galvanisch getrennten DC-DC Konverter, den wir vom Kleinschutzspannungstransformator versorgen lassen. Eine Versorgung mit Netzspannung würde diesen zerstören und die gesamte Schaltung unter Netzspannung setzen! Sobald wir den DC-DC-Konverter auf 5 Volt Ausgangsspannung eingestellt haben und die korrekte Funktion mit dem Voltmeter überprüft haben, kann mit dem Verdrahten der Komponenten begonnen werden. Diese müssen wie folgt verdrahtet werden:
Die Software
Als nächsten Schritt müssen vor dem Hochladen des Codes in der Arduino IDE folgende Zeilen des Codes um die eigenen WLAN-Zugangs Daten angepasst werden:
const char* ssid = "Deine WLAN SSID"; // Bitte anpassen
const char* password = "Dein WLAN Passwort";
Danach kann der angepasste Code auf den ESP8266 hochgeladen werden:
// Tobias Kuch 2020 GPL 3.0 tobias.kuch@googlemail.com #include <Espalexa.h> #include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define LAMP_PIN 16 // Zu schaltender Pin des ESP's boolean connectWifi(); void firstLightChanged(uint8_t brightness); //Callback Funktion const char* ssid = "Deine WLAN SSID"; // Bitte anpassen const char* password = "Dein WLAN Passwort"; boolean wifiConnected = false; Espalexa espalexa; EspalexaDevice* device; ESP8266WebServer server(80); void setup() { Serial.begin(115200); pinMode(LAMP_PIN,OUTPUT); digitalWrite(LAMP_PIN,LOW); wifiConnected = connectWifi(); if(wifiConnected){ server.on("/", HTTP_GET, [](){ server.send(200, "text/plain", "ESP Alexa Addon für Lavalampe. Von Tobias Kuch 2020 - tobias.kuch@googlemail.com"); }); server.onNotFound([](){ if (!espalexa.handleAlexaApiCall(server.uri(),server.arg(0))) // Auf Alexa API verweisen { server.send(404, "text/plain", "404 / Seite nicht gefunden"); } }); // Define our LavaLamp device = new EspalexaDevice("Lavalampe", LightChanged,0); // Status beim Einschalten immer aus espalexa.addDevice(device); espalexa.begin(&server); } else { while (1) { Serial.println("Kann nicht mit WLAN Verbunden werden. Bitte Verbdindungsdaten überprüfen."); delay(2500); } } } void loop() { espalexa.loop(); delay(1); } void LightChanged(uint8_t brightness) { Serial.print("Lavalampe geändert auf"); if (brightness == 0) { Serial.println("Aus"); digitalWrite(LAMP_PIN,LOW); } else { Serial.println("Ein"); digitalWrite(LAMP_PIN,HIGH); } } boolean connectWifi(){ // Verbindung zum WLAN boolean state = true; int i = 0; WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); Serial.print("Verbinde"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); if (i > 20){ state = false; break; } i++; } Serial.println(""); if (state){ Serial.print("Verbunden nach"); Serial.println(ssid); Serial.print("IP Adresse: "); Serial.println(WiFi.localIP()); } else { Serial.println("Keine Verbindung"); } delay(100); return state; }
Die Funktion ist folgende: Über den DC-DC Konverter versorgt sich der ESP8266 mit Strom. Er ist somit dauernd aktiv und verbindet sich nach Hochladen des Codes in das WLAN-Netz, dessen Verbindungsdaten hinterlegt wurden.
Nach erfolgreicher Anmeldung des ESP's an das WLAN bitten Sie Alexa nun, mit dem Befehl: "Alexa, suche Smarthome-Geräte" nach neuen Smarthome-Geräten zu suchen. Alexa wird nun nach ca. 1 Minute vermelden, dass ein neues Smarthome-Gerät gefunden wurde. Dies ist unser ESP! Nun kann der Pin D0 des ESPs und damit unsere Lavalampe mit dem Befehl "Alexa, Lavalampe ein" eingeschaltet und mit dem Befehl "Alexa, Lavalampe aus" ausgeschaltet werden.
Ich wünsche Ihnen viel Spaß beim Bauen und beim Verwenden der Lavalampe mit Alexa.
Alle Projekte und Informationen meiner Blogs finden Sie auch unter https://github.com/kuchto.
9 commenti
Gersch
Hallo Tobias.
Auch ich wollte dieses Projekt nachbauen → leider ohne Erfolglos. Auch der Versuch ältere Bibliotheken zu installieren brachte leider keinen Erfolg .
Auf github steht, das die Bibliothek nicht mehr gepflegt wird. Funktioniert es bei dir noch?
Andreas
Hallo Tobias, vielen Dank für die Antwort. Gruß, Andreas
Theo1702
Hallo was muss ich verändern um mehrere sachen mit einen ESP zu schalten?
Ich hoffe das geht.
Tobias Kuch
Hallo Andreas, du must keine Zeile wegmachen um nur einen Ausgang zu schalten. Er schaltet bereits nur den Ausgang "LAMP_PIN 16 // Zu schaltender Pin " des ESP’s.
Viele Grüße
Tobias
AndreasD
Hallo,
wieder mal ein sehr schönes Objekt. Leider hat es mich recht viel Zeit gekostet, es zum Laufen zu bringen. Ich habe die aktuellen Bibliotheken installiert und es funktionierte erst mal nicht. In meiner Fritz!Box war der ESP vorhanden. Im seriellen Monitor wurde auch angezeigt, dass er mit dem Netz verbunden ist. Allerdings hat Alexa nichts gefunden. Dann kam ich auf die Idee, die Espalexa-Bibliothek stück für Stück ‘rückwärts’ zu installieren. D.h. aktuell ist die Version 2.4.8, da habe ich die 2.8.7, dann die 2.8.6 usw. bis ich bei der 2.8.4 angelangt bin. Damit hat es dann auch funktioniert. Solche Hinweise sollten blutigen Anfängern mit auf den Weg gegeben werden.
Hat jemand noch einen Tipp, was ich tun muss, um den ESP einfach nur als Schalter nutzen zu können? Welche Zeilen muss ich wegmachen/ ändern, damit er halt nur einen Ausgang schaltet. Kann ich zum Beispiel mit einem ESP auch mehrere Relais schalten? Wenn ja, bitte einen kleinen Tip.
Nebenbei bemerkt, der Sketch läuft auch so auf einem D1 Mini von AZ-Delivey.
Vielen Dank!
AndreasD
Maciek
Gibt es aber keine (kostenlosen) Online-Dienste, die die Spracherkennung für Hooby-Bastler anbieten? So was gibt es für Abfrage von Wettervorhersagen auf http://api.openweathermap.org. Wenn es so etwas auch für Spracherkennung gäbe, könnte man diese Lampensteuerung auch ohne Alexa machen. D.h. der esp würde den Ton aufnehmen und übers wlan schicken und als Antwort den Text bekommen. Wenn der zurückgegebene Text “Lampe an” heißt, schaltet er die Lampe an. Das wäre doch eine elegante und kompakte Lösung, oder ;)?
Maciek
Ok, verstehe. Habe Alexa leider nicht, wäre für diese sehr schöne Anwendung vielleicht mal Zeit darüber nachzudenken ;).
Viele Grüße
Ingwaz
@Maciek:
Dieses Projekt setzt voraus dass Du eine Amazon Alexa zuhause hast und die Schaltung mit dem ESP dort als Smart-Gerät anlernst/verbindest.
Maciek
Halloechen
Eine super Idee. Bin aber etwas verwirrt, was nimmt eigentlich den Ton auf. Es gibt kein Mikrophon in dem Aufbau. Hat der ESP ein onboard Micro?
VG