ESP8266 Amazon Echo Button, Alexa Routine Trigger, Alexa Türklingel
|
DIY Projekt - selbstgemachte batteriebetriebene Amazon Echo Button. ESP8266, Taster und 2 AAA-Batterien: das ist auch die ganze Schaltung. Die Kosten für die Bauteile betragen unter 10 €. Die Schaltung ist megaeinfach und ist auch für jeden Anfänger geeignet. In Verbindung mit einem "Webhook Routine Trigger" Skill kann diese Schaltung als Amazon Alexa Türklingel (doorbell) verwendet werden. Oder auch als Auslöser bzw. Starter für beliebige andere Skills.
In diesem Projekt funktioniert ESP8266 als ein Client.
Client im Gegensatz zum Server muss nicht immer online sein. Die Schaltung wird erst nach Betätigung des Buttons aktiviert und kann so mit Batterie betrieben werden. ESP8266 funktioniert hier wie ein Webbrowser, der eine Internetadresse besucht. Bei einer URL Request können auch Daten übertragen werden vom Client zum Server. ESP8266 kann, als ein Client, beliebige APIs im Internet bedienen. Z.b. IFTTT oder ThingSpeak.
Speziell in diesem Projekt ruft ESP8266 eine API von "Webhook Routine Trigger" Skill. Dieses Alexa Skill ist auch von mir. Webhook Routine Trigger ist ein universelle Amazon Alexa Routinen Auslöser. Die Routinen werden durch Aufruf einer URL gestartet.
Hier ist Variante von Amazon Alexa Türklingel mit WEMOS D1 mini. Reset Button ist der Auslöser für Alexa Routine. ESP8266 WEMOS D1 mini ist ständig mit Batterie verbunden und befindet sich im deep sleep modus. Stromverbrauch bei WEMOS D1 mini im deep sleep modus beträgt 0,18mA. 2 AAA Baterrien liefern 3V was für ESP8266 ausreichend ist. Nach betätigung des Buttens Verbidet sich ESP8266 mit ihrem WiFi netzwerk und ruft die Api URL vom "Webhook Routine Trigger" danach geht ESP8266 wieder in das deep sleep modus bis zum nächser betätigung des Reset Buttens. Nach meiner erfahrung ist ESP8266 etwa 3s aktiv.
Micro AAA Zellen haben eine typische Kapazität von 500 bis 1200 mAh. Nehmen wir zum Berechnug Mittelwert 850 mAh. 850mAh / 0,18mA = 4722h Das sind 4722h / 24h = 196 Tage (6,5 Monaten). Das war die Standby Zeit.
Bei Verwendung von ESP-12F ist das Stromverbrauch im deep sleep Modus um 10 Fach kleiner und beträgt 0,018mA.
Und mit einer trick Schaltung und Verwendung von CH_PD Pinns lässt sich Stromverbrauch im Bereitschaftsmodus auf 4uA reduzieren.
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> HTTPClient sender; WiFiClient wifiClient; EspClass ESPm; #define LEDpin 2 // LED zum Blinken. Bei ESP-07 Pin 2. Bei ESP-01 Pin 1 // WLAN-Daten const char* ssid = "XXXXXXXX"; const char* password = "XXXXXXXXX"; const char* URL = "http://alexa.esp8266-server.de/trigger/?id=XXXXXX&hash=YYYYYYYYYYYYYYYYYYYYYYYYY";//c am end void setup() { pinMode(LEDpin, OUTPUT); digitalWrite(LEDpin, 0); // LED ON Serial.begin(115200); WiFi.begin(ssid, password); Serial.println("\n Verbinde mit WLAN "); int timout=0; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); timout++; if (timout > 60) ESPm.deepSleep(0, WAKE_RFCAL); // timeout nach 30 sekunden } Serial.println("Verbunden!"); if (sender.begin(wifiClient, URL)) { // HTTP-Code der Response speichern int httpCode = sender.GET(); // Anfrage wurde gesendet und Server hat geantwortet if (httpCode == HTTP_CODE_OK) // Info: Der HTTP-Code für 'OK' ist 200 { Serial.println(sender.getString()); } else // Falls HTTP-Error { Serial.printf("HTTP-Error: ", sender.errorToString(httpCode).c_str()); } sender.end(); // Verbindung beenden } else { Serial.printf("HTTP-Verbindung konnte nicht hergestellt werden!"); } pinMode(LEDpin, INPUT); } void loop() { ESPm.deepSleep(0, WAKE_RFCAL); delay(100); }
Ich empfehle die Arduino core for esp8266 Version 2.7.4 zu wählen. Bei dieser Version wird die WiFi Verbindung nach dem Reset viel schneller aufgebaut als bei Version 3.0.2
Woran es liegt, weiß ich nicht. Ich vermute, das hat etwas mit WAKE_RFCAL zu tun.
Hier ist eine Variante der Firmware, die direkt in ESP8266 geladen werden kann. Dabei ist die Installation von Arduino IDE nicht nötig.
Die Einstellungen: SSID, Passwort und URL-Zieladresse können in eine INI - Datei am Computer eingetragen werden.
Ich habe eine Batch Datei für Sie vorbereitet, die die INI-Datei in einen binären File umwandelt und Programmiertool esptool.exe startet. Somit kann ein ESP8266 am Windows Rechner ohne zusätzliche Software geflasht werden.
Gehen Sie folgende Schritte durch:
Obwohl wemos D1 Mini ganz bequem ist, mit seiner 3,3 Volt Spannungsregler, USB seriell Wandler, und Reset- programmier-Schaltung verbraucht es in deep sleep relativ viel Strom. Ich habe 185 uA gemessen.
Aus diesem Grund ist es empfehlenswert ein ESP-12 oder ESP-07 zu benutzen. Da, beträgt der Strom im deep sleep Modus 18uA.
Der Widerstand hier ist 50k
Bei Betrieb eines ESP-12 Moduls sollte man nicht vergessen GPIO15 auf Masse zulegen und Enable-PIN auf VCC.
Vcc darf 3,3 Volt nicht überschreiten!
Beim Programmieren von ESP-12 oder ESP-07 ohne Reset/Bootloader-Logik, sollte das Modul zuerst im Flash Modus gebracht werden (GPIO0 mit Masse verbinden und die Schaltung kurz resetten).
Weitere Möglichkeit die Stromaufnahme im Bereitschaftszustand zu reduzieren ist den ESP8266 Modul über Enable-PIN zu deaktivieren. In dem Zustand verbraucht das Modul 4uA.
Ich habe hier die Idee, den Enable-Eingang zum Aktivieren des ESP8266 Moduls zu verwenden.
Durch Betätigung des Buttons geht Enable-Eingang auch HIGH und der Controller startet.
In dieser Schaltung ist CH_PD mit GPIO16 verbunden. Besonderheit des GPIO16 Ports ist, dass er sofort auf HIGH geht. So wird Selbsthaltung in der Schaltung realisiert. Die zweite tolle Sache ist, wenn man wakeup einstellt, dann geht GPIO16 kurz auf LOW und schaltet ESP8266 Modul aus. Somit wird Verbrauch auf 4 uA im Bereitschaftszustand reduziert.
Voraussetzung für Realisierung dieser Schaltung, ist die Verwendung des Moduls, wo kein pull up am CH_PD angebracht ist. Am besten mit einem Multimeter den Widerstand zwischen CH_PD und VCC messen. Es sollte sehr hochohmig sein. Wenn dabei Messwert bei 10K-12K liegt, dann sollte man nach einem pull up Widerstand suchen und den entfernen.
Eingestellte Wakeup Zeit ist die Zeit in dem ESP8266 Modul im deepsleep Modus befindet. Wehrendessen ist keine erneute Auslösung möglich. Somit kann die Sperrzeit eingestellt werden, z.B. 3 Sekunden. Danach geht Enable - Pin auf LOW, Chip wird ausgeschaltet.
Bei dieser Schaltung soll der Sketch an 2 Stellen angepasst werden. Und zwar die Zeilen mit deepSleep. Es sollte eine wake up time Eingestellt werden.
ESPm.deepSleep(2000000, WAKE_RFCAL);In der ESP8266 Beschaltung wird aber nach dieser Zeit kein Reset ausgeführt, sondern der Chip wird deaktiviert. Und geht in minimalste Stromverbrauch.