Wissen

NodeMCU ESP8266 mit Alexa (Amazon Echo) steuern

In dieser kleinen Anleitung zeige ich Euch, wie man ziemlich kostengünstig die Alexa für Steuerungsaufgaben benutzen kann – ohne einen eigenen Skill programmieren zu müssen. Hier tricksen wir etwas und gaukeln der Alexa einfach ein paar schaltbare Steckdosen vor, für die es schon einen fertigen Skill des Herstellers gibt. Dies hat gleich zwei große Vorteile – zum einen müssen wir uns nicht um die Anbindung an das Amazon Echo System kümmern und der zweite große Vorteil ist – man benötigt keinen „Aufrufnamen“! Stattdessen kann man einfach sagen – Alexa schalte Test 1 an oder eben aus! 😉

Doch bevor wir ans die Programmierung gehen hier eine kleine Übersicht, was man an Hardware benötigt.

 

NodeMCU ESP8266

 

Mit dieser Hardware habe ich es getestet!
Es sollte aber auch mit der Version 3 funktionieren.

 

Dies ist sozusagen das Herz unseres Aufbaus.
Hier steuern wir die GPIOs an, welche dann die Ausgänge schalten.
An den Ausgang können wir dann ein Relais hängen und damit auch größere Lasten schalten.
Das richtig geniale an dieser kleinen Platine ist – es ist alles mit on Board, was man so benötigt!

Um Last schalten zu können, besorgt man sich am besten folgende Relais:

 

Diese gibt es auch in einer Einzelvariante – mit zwei Relais und mit einer Bestückung zu 4 Relay.

Die Komponenten, welche ich Euch hier heraus gesucht habe – sind alles Prime Artikel von Händlern, mit denen ich gute Erfahrungen gesammelt habe. Möchte man weniger Geld ausgeben und ist gewillt etwas länger zu warten, gibts bei Amazon auch noch günstigere Angebote und man kann sich einen ESP8266 für unter 5 Euro holen. Bei den 8er Relais liegt man in etwa in der gleichen Preislage.

Alexa kann übrigens bis zu 16 Endgeräte dieser Art bedienen. Ich würde Euch jedoch empfehlen, bei diesem kleinen Chip nicht über die 8 Geräte Grenze zu gehen. Habe gehört, es würde dann Probleme bei der Einbindung geben.

Als nächste Benötigen wir etwas Software! 

Software für die Programmierung:
Arduino IDE

Erweiterungen für diese Software:
ESPAsyncTCP

ESPAsyncWebServer

fauxmoESP
(ganz links unten Download)

Schritt 1: Anpassung der Arduino IDE

Um einen ESP programmieren zu können, muss das Board in dieser Software hinterlegt werden.
Um diesen zu hinterlegen, benötigen wir einen Boardmanager und genau diese Einstellung für die Integration des Boardverwalters, tragen wir nun in die Software ein.

Diese Boardveralter-URL wird benötigt um einen ESP8266 zu programmieren:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

Jetzt öffnet ihr die Arduino IDE und geht dort auf
–> Datei
–> Voreinstellungen

Relativ weit unten findet man nun ein Feld für zusätzliche Boardverwalter-URLs!

Jetzt hinterlegen wir die Unterstützung für das Board:

–> Werkzeuge
–> Board:XXX
–> ganz oben –> Boardverwalter

 

Nach „esp“ suchen und esp8266 in der neusten Version installieren.
Momentan –> 2.3.0

 

Nun schließen wir das Board an und hinterlegen in den Einstellungen das richtige Board:
Board: NodeMCU 1.0 (ESP-12E Module)

und setzen danach den richtigen „COM“ Port.
Dieser kann im Gerätemanager eingesehen werden.

 

Jetzt importieren wir die benötigen Bibliotheken:
–> Sketch
–> Bibliothek einbinden
–> .ZIP Bibliothek hinzufügen

Die drei ZIP Files auswählen und „installieren“.

 

 

Script öffnen:

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include "fauxmoESP.h"
#define SERIAL_BAUDRATE                 115200
fauxmoESP fauxmo;
 
// -----------------------------------------------------------------------------
// Wifi definieren
// -----------------------------------------------------------------------------

#define WIFI_SSID "Testnetz"
#define WIFI_PASS "testpasswort"

// -----------------------------------------------------------------------------
// PINs definieren
// -----------------------------------------------------------------------------

#define RELAY_PIN1 13
#define RELAY_PIN2 15

 
 
void wifiSetup() {
  // Set WIFI module to STA mode
  WiFi.mode(WIFI_STA);
 
  // Verbinden
  Serial.printf("[WIFI] Connecting to %s ", WIFI_SSID);
  WiFi.begin(WIFI_SSID, WIFI_PASS);
 
  // Warten
  while (WiFi.status() != WL_CONNECTED) {
      Serial.print(".");
      delay(100);
  }
  Serial.println();
 
  // Verbunden!
  Serial.printf("[WIFI] STATION Mode, SSID: %s, IP address: %s\n", WiFi.SSID().c_str(), WiFi.localIP().toString().c_str());
}
 
 
void callback(uint8_t device_id, const char * device_name, bool state) {
  Serial.printf("[MAIN] %s state: %s\n", device_name, state ? "ON" : "OFF");
  
// -----------------------------------------------------------------------------
// Abfragen definieren
// -----------------------------------------------------------------------------
 
  if ( (strcmp(device_name, "TEST1") == 0) ) {
    // adjust the relay immediately!
    if (state) {
      digitalWrite(RELAY_PIN1, HIGH);
    } else {
      digitalWrite(RELAY_PIN1, LOW);
    }
  }


  if ( (strcmp(device_name, "TEST2") == 0) ) {
    // adjust the relay immediately!
    if (state) {
      digitalWrite(RELAY_PIN2, HIGH);
    } else {
      digitalWrite(RELAY_PIN2, LOW);
    }
  }
}
 
void setup() {

// -----------------------------------------------------------------------------
// PINs setzen
// -----------------------------------------------------------------------------
  
  pinMode(RELAY_PIN1, OUTPUT);
  digitalWrite(RELAY_PIN1, LOW);

  pinMode(RELAY_PIN2, OUTPUT);
  digitalWrite(RELAY_PIN2, LOW);
  
    // Init serial port and clean garbage
    Serial.begin(SERIAL_BAUDRATE);
    Serial.println();
    Serial.println();
    Serial.println("FauxMo Relay Setup");
    Serial.println("Nach der Verbindung sage: Alexa schalte test / test2 an / aus .");
 
  // Wifi
  wifiSetup();
  
// -----------------------------------------------------------------------------
// Endgeraete Namen definieren
// -----------------------------------------------------------------------------

  // Fauxmo
  fauxmo.addDevice("TEST1");
  fauxmo.addDevice("TEST2");
  fauxmo.onMessage(callback);

}
 
uint8 _tj = 0; 
void loop() {
  fauxmo.handle();
}

Daten im Script anpassen. Ich habe hier nur zwei Testgeräte als Schalte definiert.

GPIO PINs des NodeMCU ESP8266 könnt ihr hier einsehen!

Schritt 2: Kompilieren und hoch laden!
Jetzt kann man den Sketch kompellieren und hoch laden.

Schritt 3: Alexa App starten und nach neuen Geräten suchen.
Alexa App –> Smart Home –> Geräte –> Suche
oder
einfach sagen: „Alexa suche neue Geräte“

Hier ein kleines Video zur Umsetzung:

 

Wie ihr seht, ist die Reaktionszeit auch wahnsinnig hoch!

Fazit:
Eine sehr schnelle und sehr billige Methode, wenn man über die Alexa per Sprache Dinge steuern möchte. Der einzig kleine Nachteil an dieser Methode ist – die Einstellungen sind fest am NodeMCU hinterlegt. D.h. ändert sich zum Beispiel die WLAN ID, muss der Chip nochmals mit dem PC verbunden und die Daten neu übertragen werden.

Tipp:
Wer keinen Platz zur Verfügung hat, der kann sich auch nur einen ESP8266 kaufen und diesen mittels eines Programmierboards betanken. Dann ist die Elektronik, welche unter gebraucht werden muss, nur noch 1/4 so groß.


Tags:

  • Ausgänge mit alexa steuern
  • nodemcu mit alexa steuern
  • 5v steuern nodemcu
  • Wenns Lolin ESP
  • nodemcu alexa
Tags

Related Articles

12 Comments

  1. Super funktioniert einwandfrei. Hatte vorher den SONOFF 4 CH Wlan gehabt. Aber der baut ja eine Verbindung zur CLOAD auf. Und mit dem Nodemcu bleibt alles im Haus. Arbeitet sehr zuverlässig. Ist es auch möglich, die Kanäle per Handy zu schalten. Weiss leider nicht wie man das im Code einbinden muss.

  2. Ich hab die Idee noch ein bisschen verfeinert. Meine Lösung muss man nicht mehr selbst kompilieren. Man flasht einfach ein Binary, den AP kann man per Webinterface konfigurieren. Ausserdem werden damit Funksteckdosen gesteuert, die man im Baumarkt für kleines Geld kaufen kann. Ein passendes RF-Modul gibt bei Amazon, zum Beispiel https://www.amazon.de/Aukru-Superregeneration-433M-receiver-module/dp/B00R2U8OEU

    Über das Webinterface gibt man in meiner Lösung die House- und Gerätecodes ein (wahlweise (optional) die Tristate-codes, die mit einem Empfängermodul einlesen kann). Diese Codes werden im EEPROM des ESP8266 gespeichert. Genauso wird übrigens auch mit dem WLAN verbunden. Beim ersten Start geht mein Programm in einen Errichter-modus: Man verbindet sich zum ESP8266 per WLAN. Der AP nennt sich „EasyAlexa“. Wenn man sich damit verbunden hat, macht man im Browser auf. Dort kanm man die ESSID und das Passwort des WLANs eingeben.

    Falls sich jemand für sowas interessiert, das Projekt liegt auf Github:
    https://github.com/Monarch73/RFBridge/releases

  3. Das Skript ist klasse. Gibt es die Möglichkeit die Relais zeitgesteuert, also nur kurz anzusteuern. ?
    Haber es mit Delay zwischen High und Low versucht, leider ohne Erfolg.

  4. nett gemacht – funktioniert aber nicht (mehr) mit der Alexa Echo 2 mit integriertem Hue Hub. Dieser führt keine Suche im (W)LAN mehr via UDP durch.
    Also entweder einen „alten“ Echo benutzen oder es läuft nicht.

  5. Noch ein Nachtrag:
    Wenn Du Dein Coding einfach in das „WiFiManager“ Sketch reinkopierst, dann kannst Du bei Änderung der SSID oder des Passworts die Einstellungen über das ESP eigene WLAN einstellen.
    Verliert der ESP die Verbindung zum WLAN, dann bootet er mit WiFiManager neu und agiert als Access Point. Du musst Dich dann nur anmelden, die neuen Verbindungsdaten eingeben und schwups ist er wieder im WLAN – ganz ohne ihn ausbauen zu müssen. Hier ist die jeweils aktuelle Version des WiFiManager: https://github.com/tzapu/WiFiManager

    Erleichtert die Handhabe enorm – zur Info!

  6. Ich finde keinen Hinweis, daß der 2nd Gen Echo die Wemo-Switches noch unterstützt. Von daher ist es nicht weiter wunderlich, das das ganze mit den neuen Echos nicht mehr funktioniert.

    2nd Gen Echo Dots scheinen nicht betroffen zu sein…

  7. Hallo Zusammen,

    hat schon jemand eine Alternative gefunden die mit einem Echo der 2 Generation läuft?

  8. Hallo zusammen,
    Ich habe versucht wie oben den Sketch hochzuladen aber meine Alexa Echo erkennt den esp8266 nicht. Ist es richtig das ich bei dem Sketch nur die SSID und Wlan Passwort ändern muss. Oder fehlt hier noch etwas, was ich übersehen haben. Über eine Antwort würde ich mich sehr freuen.
    Gruß
    Patrick

  9. @Fritz
    leider habe ich probleme mit einer fehlerfreien Zuweisung aller PINs.
    Hast du hier für mich ein paar Anhaltspunkte?
    Gruß
    Andi

Kommentar verfassen

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Close

Send this to a friend