WiFi Funk-Notruftaster mit ESP8266 Modul

notruftaste-wifi-esp8266-modul-titel-2

Mit Hilfe eines WiFi-Modules ESP8266 Modul und wenigen externen Bauteilen lässt sich bereits für ca. 7 Euro ein leistungsfähiger Funk-Notruftaster bauen, welcher im Notfall E-Mails verschickt oder Alarm auslöst. Gerade in Zeiten wo die Wohnungseinbrüche stark ansteigen, ein interessantes Projekt für Elektronik-Bastler. 

Das ESP8266 Modul macht es möglich

notruftaste-wifi-esp8266-modul

WiFi ESP8266 Modul – Bauart ESP-07

Hauptbestandteil der Schaltung ist das WiFi Modul ESP8266 (Bauart ESP01* oder ESP07* Bezug z.B. Amazon), welches wir ja bereits im Artikel Pretzelboard vorgestellt haben. Dieses Modul ist beispielsweise für ein paar Euro über Amazon oder EBay erhältlich.
Neben dem WiFi-Modul wird lediglich noch ein Taster und eine Batterie benötigt.

Der WiFi Funk-Notruftaster wird als WLAN Aktor (Auslöser) verwendet. Beim Betätigen des Tasters verbindet sich das ESP8266 Modul mit dem WLAN-Netzwerk im Haus und ruft eine PHP Webseite auf. Die Webseite wiederum sendet dann automatisch die E-Mail an einen oder auch mehrere Empfänger. Das PHP-Script der Webseite kann zusätzlich oder auch alternativ einen Zähler hochzählen oder ein Ereignis in eine MySQL Datenbank eintragen.
Danach geht ESP8266 Modul wieder in den Sleepmode (Schlafmodus) um die Batterie zu sparen.

Eine andere Verwendungsmöglichkeit wäre, dass sich unser WiFi Funk-Notruftaster über das WLAN-Netz, oder auch über Internet, mit einem anderem ESP8266 Modul verbindet. Das zweite Funkmodul müsste dann im Server-Mode betrieben werden, was bei diesem Funkmodul ja möglich ist. Dieses zweite Modul könnte dann einen Alarmton ausgeben bzw. eine externe Sirene aktivieren.

wifi-wlanmodul-esp8266

WLAN-Modul ESP8266, Bauart ESP-01

Funktion der Schaltung

Das eigentliche WiFi Modul ESP8266 ist immer an der Batterie angeschlossen und befindet sich im Deep Sleep Modus (Tiefschlaf).  Wenn der Taster betätigt wird, wacht das ESP8266 Modul auf.
Das ESP8266-Modul verbindet sich mit WLAN-Netz per Wi-Fi, und ruft eine PHP-Webseite als Webclient auf.. Als Parameter werden Batteriespannung, Nummer des Wach-Zyklus, Wi-Fi Signalstärke, und eine vorangestellte Mitteilung gesendet.
Nachdem die Webseite erfolgreich erreicht wurde, geht das ESP8266 Modul wieder in den Tiefschlaf.

Der aktuelle Zustand unseres Funk-Notruftasters wird über eine blaue LED signalisiert.
Während der WiFi Funk-Notruftaster sich mit WLAN-Netz verbindet, blinkt die LED fünf mal pro Sekunde und erlischt danach. Dies signalisiert, dass die Nachricht erfolgreich abgesetzt wurde.

Wenn die LED länger als 12 Sekunden blinkt und danach für 5 Sek aufleuchtet, dann bedeutet dies, dass die Anmeldung am WLAN-Netz nicht gelungen ist.
Mögliche Ursachen sind: Wi-Fi nicht in Reichweite, falscher Netzwerk-Name oder falsches Passwort.

Wenn die LED nur ein paar Mal für 1 bis 2 Sekunden blinkt und dann ebenfalls für 5 Sek aufleuchtet, dann hat die Anmeldung am Wi-Fi Netzwerk geklappt,  allerdings konnte die Webseite nicht erreicht werden.
Mögliche Ursachen sind: Falsche URL abgespeichert, Server antwortet nicht oder Internetverbindung nach Außen fehlt.

Schaltplan des WiFi Funk-Notruftasters

Die Schaltung ist sehr simpel. Das ESP8266-Modul ist an einem Lithium-Ionen-Akku über Spannungsregler angeschlossen.  Ein Taster ist mit den Reset Pin des Moduls verbunden.
Als Akku habe ich die Li-PO Batterie für SYMA S107* genommen, die ist recht klein 25mm x 17mm x 8mm.
Ganz wichtig, der Spannungsregler sollte unbedingt ein Regler vom Typ HT7333* (gibt es bei Ebay) sein. Dieser hat einen sehr kleinen Eigenverbrauch, nur 4 uA.  Bei der Dropout Voltage von 90 mV arbeitet das Wi-Fi Modul bis die Batteriespannung auf 3V + 0,09V = 3,09V sinkt.

Zum Vergleich: Der bekannte Spannungsregler LM1117 hat 5 mA Eigenverbrauch und eine Dropout Voltage von 1,25V. Dieser würde also schon alleine die Batterie aussaugen. Wenn der Sender bzw. dessen Gehäuse etwas grösser sein darf, kann man auch zwei Batterien vom Typ  AAA mit 1,5V nehmen. Dann entfällt der Spannungsregler und der Kondensator.
Ihr solltet die rote LED an dem ESP-Modul ablöten um Energie zu sparen. Diese ist an der Stromversorgung des ESP8266 Moduls angeschlossen und lässt sich leider nicht per Software abschalten.

notruftaste-wifi-esp8266-modulschaltplan

Schaltplan mit ESP01-Modul

notruftaste-wifi-esp07-modul-schaltplan

Schaltplan mit der ESP-07 Bauart des WiFi-Moduls

Als Gehäuse für die komplette Schaltung wurde hier eine Verpackung einer CF-Speicherkarte verwendet. jetzt habt Ihr eine Vorstellung wie winzig das Ganze ist.

notruftaste-wifi-esp8266-modul-speicherkarten-gehaeuse

Downloads über den Server des Entwicklers

Blick in das ESP – Arduino Sketch

Das WiFi Modul wird also direkt mit einem Arduino Sketch programmiert. Die Dateien stehen ja oben zum Download fertig bereit. Zum besseren Verständnis hier noch ein Blick in die kleine Sketch-Datei:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <EEPROM.h>
#include <ESP8266HTTPClient.h>
#include "WEBset.h" // Hier ist die HTML-Webseite als Array abgelegt

#define LEDpin 1 // LED zum Blinken. Bei ESP-07 Pin 2. Bei ESP-01 Pin 1
// #define seriell; // Einschalter für serielle Ausgabe
IPAddress apIP(192, 168, 178, 1); // IP-Adresse für Setup

ADC_MODE (ADC_VCC); // ADC an das Stromversorgung
int z = 0; //Aktuelle EEPROM-Adresse zum lesen
String nachricht = "Testnachricht";
String url = "";
int timout = 0;

char ssid[32] = "fhgdhfghd\0";
char passwort[64] = "gghdfgh\0";
ESP8266WebServer server;
EspClass ESPm;
HTTPClient http;
#include "Setup.h"

extern "C" {
#include "user_interface.h"
}

void setup() {
 char inser;
 EEPROM.begin(250); // EEPROM initialisieren mit 200 Byts

 Serial.begin(115200);
 while (Serial.available())inser = Serial.read();
 Serial.println("Start");
 delay(10);
 inser = Serial.read();
 if (inser != 'S') goto weiter;
 inser = Serial.read();
 if (inser != 't') goto weiter;
 Einstellen(); // TxD ist mit RxD verbunden Setupmodus (Setup.h)
weiter:

 z = 0; // Einstellungen einlesen
 LeseEeprom(ssid, sizeof(ssid));
 LeseEeprom(passwort, sizeof(passwort));
 LeseEepromStr(&url, 100);
 LeseEepromStr(&nachricht, 100);

 unsigned int Ziklus[2]; // Zykluszehler
 const rst_info * resetInfo = system_get_rst_info(); // Resetgrund einlesen
 ESPm.rtcUserMemoryRead(0, Ziklus, sizeof(Ziklus)); // Zyklus Nummer einlesen
 if ((resetInfo->reason) == 6)Ziklus[0] = 0; // Wenn Spannung OFF 
 Ziklus[0]++; 
 ESPm.rtcUserMemoryWrite(0, Ziklus, sizeof(Ziklus)); // Zyklus Nummer speichern

 uint ADCValue = 0; // Batteriespannung messen
 ADCValue = ESPm.getVcc() - 164; // hier Korrektur Wert eintragen
 float ADCfloat = float(ADCValue);
 String Ubatt = "";
 Ubatt = String(ADCfloat / 1000, 2) + "V";

 WiFi.mode(WIFI_STA);
# if defined seriell
 Serial.println();
 Serial.print("Ziklus: ");
 Serial.println(Ziklus[0] - 1);
 Serial.print("U Batt: ");
 Serial.println(Ubatt);
 Serial.print("Connecting to ");
 Serial.println (ssid);
 // Serial.print(" Pass: ");
 // Serial.println (passwort);
 Serial.println (url);
 Serial.println (nachricht);
#endif

 WiFi.begin(ssid, passwort);

#if not defined seriell // Vorbereiten das LED
 pinMode(LEDpin, OUTPUT);
#endif

 while (WiFi.status() != WL_CONNECTED)
 {
 timout++;
 if (timout > 60) // Wenn Anmeldung nicht möglich
 {
 WiFi.forceSleepBegin(); // Sender OFF um Strom zu sparen
#if defined seriell
 Serial.print("Netzwerk nicht gefunden");
#else
 pinMode(LEDpin, OUTPUT);
 digitalWrite(LEDpin, 0); // LED ON für 5 Sekunden
 delay(5000);
 digitalWrite(LEDpin, 1);

#endif
 WiFi.forceSleepWake(); // Sender ON, sonst beim nächsten aufwachen geht WiFi nicht
 ESPm.deepSleep(0, WAKE_RFCAL);
 delay(100);
 } // End timeout
#if defined seriell
 delay(1000);
 Serial.print("O");
#else
 digitalWrite(LEDpin, 0);
 delay(100);
 digitalWrite(LEDpin, 1);

 delay(100);
#endif
 } // Verbunden

 int32_t rssi = wifi_station_get_rssi(); // Signalstärke einlesen

 url = url + "UBatt=" + Ubatt; //Parameter Bat Spannung
 url = url + "&WachNr=" + String(Ziklus[0] - 1); //Aufwachzyklus
 url = url + "&Empfang=" + String(rssi); //Parameter Signalstärke
 url = url + "&Nachricht=" + urlencode(nachricht);

#if defined seriell
 Serial.begin(115200);
 Serial.println("");
 Serial.println("WiFi connected");
 Serial.print("Signal strength: ");
 Serial.print(rssi);
 Serial.println("dBm");
 Serial.println("IP address: ");
 Serial.println(WiFi.localIP());
 Serial.print("connecting to ");
 Serial.println(url);
#endif

 http.begin(url); //HTTP
 int httpCode = http.GET();

 if (httpCode > 0) {
 // HTTP header has been send and Server response header has been handled
# if defined seriell
 Serial.printf("[HTTP] GET... code: %d\n", httpCode);
#endif
 // file found at server
 if (httpCode == HTTP_CODE_OK) {
 String payload = http.getString();
# if defined seriell
 Serial.println(payload);
#endif
 }
 } else {
# if defined seriell
 Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
#else
 http.end();

 WiFi.forceSleepBegin(); // Wlan aus
 pinMode(LEDpin, OUTPUT);
 digitalWrite(LEDpin, 0);
 delay(5000);
 digitalWrite(LEDpin, 1);
 WiFi.forceSleepWake(); // Wlan ON für neue Zyklus
 ESPm.deepSleep(0, WAKE_RFCAL); //gehe schlafen
#endif
 }
 http.end();

# if defined seriell
 Serial.println();
 Serial.println("closing connection");
 delay(100);
#endif

 ESPm.deepSleep(0, WAKE_RFCAL);
 delay(100);
}

void loop()
{
 yield();
}

 

Konfiguration über ein Webinterface

Das ESP8266 wird per Webinterface konfiguriert. Die Pins RX/TX müssen mit einem Jumper gebrückt werden. Wenn danach die Stromversorgung angeschlossen wird, startet das ESP8266 Modul im Access Point Modus.
Mit einem WLAN fähigem Gerät dann das WLAN Netzwerk „Notruftaster Setup“ auswählen. Das Passwort für das Netz lautet „tiramisu“.
Dann startet man den Internetbrowser und gibt folgende IP 192.168.178.1 ein.
Es öffnet sich ein Formular mit Eingabefeldern für SSID, WLAN–Passwort, URL und Mitteilung.
Nach dem Absenden des Formulars erscheint die Meldung „Gespeichert“. Beim erneuten Aufruf der IP 192.168.178.1  werden die eingestellten Daten angezeigt. Das WLAN-Passwort wird dabei mit Sternchen ersetzt.

 

notruftaste-wifi-esp8266-modul-konfiguration

In das URL Eingabefeld muss die Webseite eingetragen werden, die beim Betätigen des Tasters aufgerufen werden soll,  zum Beispiel:

http://esp8266-server.de/WifiRuf.php?

Am Ende sollte auf jedem Fall ein „?“ Zeichen stehen, da das Programm später Parameter an die URL anhängt. Die aufgerufene PHP-Webseite empfängt diese Parameter.
Und so sieht die URL aus, wenn benutzerdefinierte Parameter nötig sind:

http://esp8266-server.de/WifiRuf.php?Passwort=rghj64t&

Am Ende sollte in dem Fall ein „&“ Zeichen stehen, denn es werden vom Programm noch weitere Parameter angehängt. Ich habe hier den Parameter „Passwort“ eingefügt damit die PHP-Webseite mir keine Mails versendet falls Spamroboter oder andere Seiten die URL aufrufen.

Die komplette GET-Anfrage an den Server sieht dann so aus:

http://esp8266-server.de/WifiRuf.php?Passwort=rghj64t&UBatt=3.31V&WachNr=6&Empfang=-69&Nachricht=Das+ist+ein+Test

Der Parameter „Nachricht“ enthält den Text vom Eingabefeld „Nachricht“

 

PHP und E-Mail Versand

Die PHP-Datei, welche die E-Mail versendet, kann auf einem beliebigen kostenlosen Server im Internet platziert werden. Neben dem E-Mail Versand trägt das Skript beim Ausführen noch ein Eintrag in die Log-Datei ein. Der Eintrag sieht so aus:

„11.06.2016 23:36:05 WachNr: 2 UBatt: 3.29V Signalstärke: -68 Nachricht: Das ist ein Test“

Das PHP-Script ist sehr schnell geschrieben

<?
// gebildete URL http://esp8266-server.de/WifiRuf.php?Passwort=rghj64t&UBatt=3.31V&
WachNr=6&Empfang=-69&Nachricht=Das+ist+ein+Test
$varip = getenv('REMOTE_ADDR'); // GET Argumente Einlesen
$dyntxt = "WifiRuf.txt";
$Zyklus=htmlspecialchars($_GET["WachNr"]);
$UBatt=htmlspecialchars($_GET["UBatt"]);
$Empfang=htmlspecialchars($_GET["Empfang"]);
$Nachricht=htmlspecialchars($_GET["Nachricht"]);
 
$a = fopen("$dyntxt", "a"); // Log-Datei WifiRuf.txt schreiben
$txt=date("d.m.Y H:i:s "). " WachNr: ".$Zyklus." UBatt: ".$UBatt." Signalstärke: ".
$Empfang ." Nachricht: ".$Nachricht."\n\r";
fwrite($a, $txt);
fclose($a);
 
$Passwort=htmlspecialchars($_GET["Passwort"]); // GET Argument Passwort einlesen
$empfaenger = "wulfowitsh-1@yahoo.de";
$betreff = "WIFI-Ruf Nr. ".$Zyklus;
$from = "From: mischaka <info@mischaka.esy.es>";
$text = "WIFI-Ruf wurde betatigt\n\r".$txt;
 
if ($Passwort=='rghj64t') // Wenn Passwort stimmt
{ // dann
mail($empfaenger, $betreff, $text, $from); // E-Mail versenden
echo('1');
}
?>

 

Automatische Briefkasten – Benachrichtigung per E-Mail

Natürlich kann unser WiFi Funk-Notruftaster auch für völlig andere Zwecke und Aufgaben genutzt werden. Die Schaltung kann zum Beispiel per E-Mail den Nutzer informieren wenn der Postbote etwas in den Briefkasten geworfen hat.

Automatischer Briefkasten

Automatischer Briefkasten (Foto pixabay.com TanteTati)

Dazu wird lediglich ein kleiner Mikroschalter am Boden des Briefkastens montiert. Der Hebel muss so konstruiert werden, dass auch ein 20 g Brief ausreicht um ihn auszulösen. Statt Mikroschalter könnte man natürlich auch eine Lichtschranke nutzen, dies würde allerdings den Strombedarf wieder unnötig erhöhen.
Leider darf für diese Anwendung der Reset Pin nicht verwendet werden. Der Grund ist der hohe Stromverbrauch von 25mA während des Resets. Aber es gibt eine simple Lösung. Der CH_PD Pin. Ein Schließer zwischen CH_PD und +3.3V.
Wenn der Briefkasten leer ist, bleibt der Kontakt offen, CH_PD ist Low und das ESP8266 Modul ist deaktiviert. Wenn eine Sendung eingelegt wurde, schließen sich die Kontakte,  CH_PD wird High und das Wi-Fi Modul ruft die voreingestellte PHP-Webseite auf. Danach geht das ESP8266 Modul wieder in den Deep Sleep Modus (Tiefschlaf).

Tür- und Fensterüberwachung mit Reedkontakt (Magnetkontakt)

notruftaste-wifi-esp8266-modul-tuerueberwachung

Reset-Auslöser

Dies ist auf die gleiche Weise wie mit dem Briefkasten möglich. Hier wird mit einem 20kOhm Widerstand der Pin CH-PD auf High gezogen. Der Magnetkontakt (Schließer) zieht CH_PD auf GND. Ist die Tür zu, ist der Reedkontakt geschlossen. Wird die Tür oder das Fenster geöffnet, so geht das WiFi Modul wieder auf Sendung.

 

Reset Pin zu Türüberwachung

Die Schaltung, rechts im Bild, löst beim Öffnen des Reedkontaktes ein Reset Impuls aus.
Normalzustand: Magnetschalter geschlossen, Transistor ist gesperrt, Kondensator über R1, R2 entladen, Reset ist High. Wenn die Tür geöffnet wird, öffnet der Reedkontakt. Auch der Transistor öffnet und der Kondensator lädt sich auf,  dadurch wird der Reset Pin kurzzeitig Low.
Nach neusten Erkenntnissen ist R1 überflüssig, denn Bei ESP-01* und ESP-07* habe ich ein Widerstand von 12K zwischen Reset Pin und Vcc gemessen.

Betätigungszähler mit PHP

Dieser Code zählt eine Variable in Textdatei var.txt bei jedem Aufruf hoch.

$a = fopen("var.txt", "r"); // Datei öffnen zum lesen
$var = fread($a, filesize("var.txt"));
fclose($a);
 
$var++; // Zählerstand erhöhen 
 
$a = fopen("var.txt", "w"); // Datei öffnen zum schreiben
fwrite($a, $var); // Variable speichern
fclose($a);

 

PHP für MySQL Datenbankeintrag

<?php
$Zyklus=htmlspecialchars($_GET["WachNr"]);
$UBatt=htmlspecialchars($_GET["UBatt"]);
$Empfang=htmlspecialchars($_GET["Empfang"]);
$Nachricht=htmlspecialchars($_GET["Nachricht"]);
//Verbindung zur Datenbank herstellen
$mysqli = mysqli_connect('localhost', 'Benutzer_Name', 'Passwort', 'DB_Name');
if (mysqli_connect_errno())
{
 printf("Verbindung fehlgeschlagen: %s\n", mysqli_connect_error());
 exit();
}
$sql_befehl = "INSERT INTO Notruftaster (TimeStamp,UBatt, WachNr,Empfang,Nachricht) VALUES (now(),'
".$UBatt."', $Zyklus, $Empfang, '".$Nachricht."')";
if ($mysqli->query($sql_befehl)) echo "1"; // Meldung bei erfolgreicher Erstellung der Datensatze
else echo "Datensatze konnte nicht angelegt werden!";// Meldung bei Fehlschlag
$mysqli->close();
?>

Fragen, Vorschläge, konstruktive Kritik willkommen.

Beitrag und Fotos:  Autor Michael Dworkin,

Weitere Hinweise

Projekt (Schaltung & Projektdateien) stammen von dem Autor Michael Dworkin, und unterliegen dem Copyright des Autors. Jegliche Vervielfältigung ist nur mit schriftlicher Genehmigung gestattet. 
Die Homepage des Autors lautet: esp8266-server.de

Erstellt wurde das Projekt von:  Autor/User Michael Dworkin,
Veröffentlicht wurde es unter www.Mikrocontroller-Elektronik.de   

Achtung: Es kann keinerlei Garantie für die Fehlerfreiheit der Schaltung oder anderer Projektdateien übernommen werden! Der Nachbau und Betrieb geschieht auf eigene Gefahr! Jegliche Haftung für Schäden oder Verletzungen wird ausgeschlossen! Schadensersatzansprüche, gleich aus welchem Rechtsgrund, sind ausgeschlossen.

Sicherheitshinweise und Haftungsausschluss (zum Aufklappen anklicken)

Dieses Projekt dient vornehmlich für Lehrzwecke und zum Experimentieren. Für den Aufbau sollten ausreichend Elektronik Grundkenntnisse und Kenntnisse bezüglich der Sicherheit (Experimentieren mit Strom und Handhabung gängiger Werkzeuge wie Lötkolben etc.) vorhanden sein. Unter dem Menüpunkt Buchvorstellungen als auch auf der Seite RN-Wissen.de empfehle ich diesbezüglich noch interessante Literatur mit der man sich dies erarbeiten kann. Für Fragen bezüglich Elektronik und Mikrocontroller empfehle ich das Forum: Roboternetz.de

Sicherheitshinweise und Haftungsausschluss
×

 

Das ESP8266-Praxisbuch: Mit NodeMCU und ESPlorer*

Erik Bartmann - Elektor - Auflage Nr. 1 (14.11.2016) - Taschenbuch: 440 Seiten

39,80 EUR
Das ESP8266-Projektbuch. Heimautomation mit dem WLAN-Chip*

Martin Mohr - entwickler.press - Gebundene Ausgabe: 152 Seiten

24,90 EUR

Letzte Aktualisierung am 11.12.2016 / Affiliate Links / Bilder von der Amazon Product Advertising API

Weblinks zum Thema

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Top