Das Programm WebSchalter 2 macht
das gleiche wie der WebSchalter 1 mit dem Unterschied dass IP-
Steckdose sich im Heimnetzwerk anmeldet. WLAN Name und Passwort kann
über RS232 Terminal eingegeben werden. Diese Daten werden in EEPROM
gespeichert. Der IP- Steckdose bekommt vom Router eine IP Adresse zugewiesen. Über diese Adresse
kann die IP-Steckdose von allen Geräten im Hausnetz
gesteuert werden.
Damit das Gerät immer gleiche IP-Adresse bekommt muss der Router so
eingestellt werden, dass er zum MAC
Adresse des ESP8266 Moduls immer gleiche IP Adresse vergibt. Jetzt
können wir die IP-Adresse in Lesezeichen speichern und ganz leicht auf
unsere IP-Steckdose zugreifen.
Terminalprogramm so einstellen das die Tastatureingaben direkt übertragen werden, kein Echo. Eingabetaste betätigen. Dann Wlan-Namen eingeben und mit Eingabetaste abschließen. Passwort eingeben und mit Eingabetaste abschließen. Eventuell ESP8266 Modul neu starten.
Damit wir nicht jedes Mal auf das Aktualisieren der Webseite drücken müssen um den Schaltzustand zu erfahren, habe ich eine Webseite mit automatischen Aktualisierung entworfen und in ESP8266-Server geladen. Diese Webseite aktualisiert mittels iframe-Element und Java-Skript denn Schaltzustand jede 3 Sekunden.
Wenn der mechanischen Taster betätigt wird, oder Relais von anderem netzwerkgerät umgeschaltet wird, dann wird neue Schaltzustand spätestens nach 3 Sekunden angezeigt. Die Seite kann über die Adresse „http://eure-IP/frame“ aufgerufen werden.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <EEPROM.h> String html1 = "<!DOCTYPE html>\r\n<html>\r\n<head>\r\n\ <meta content=\"text/html; charset=ISO-8859-1\" http-equiv=\"content-type\">\r\n\ <title>WebSchalter</title>\r\n<form action=\""; // String((val)?"/1.html":"/0.html") String html2 = "\">\r\n<input value=\"ON/OFF\" style=\""; String html3 = " width:5em;height:3em; font-size: 16px;\" type=\"submit\"></form>\r\n</head>\r\n<body>\r\n</body>\r\n</html>"; String Temp = ""; const char htmlFrame[] = "<!DOCTYPE html><html><head><meta charset=\"utf-8\">\r\n\ <title>IP Steckdose</title></head><body><h1>IP Steckdose</h1>\ <script type=\"text/javascript\">setInterval(refreshIframe2, 3000);\r\n\ function refreshIframe2(){ var frame = document.getElementById(\"Frame2\");\r\n frame.src = frame.src;}</script>\r\n\ <iframe id=\"Frame2\" src=\"/\" name=\"IP Relais\" height=\"300\" width=\"300\" frameBorder=\"0\"></iframe></body></html>"; ESP8266WebServer server(80); // Serverport hier einstellen int val = 1; //Schaltzuschtand 1 ist Aus, 0 ist Ein int i; //Variable fuer Adresse in EEPROM void Ereignis_SchalteON() // Wird ausgefuehrt wenn "http://<ip address>/1.html" aufgerufen wurde { val = 0; // Relais Aus digitalWrite(0, val); // GPIO0 Temp = html1 + String((val) ? "/1.html" : "/0.html"); Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3; server.send(200, "text/html", Temp); } void Ereignis_SchalteOFF() // Wird ausgefuehrt wenn "http://<ip address>//0.html" aufgerufen wurde { val = 1; // Relais Ein digitalWrite(0, val); // GPIO0 Temp = html1 + String((val) ? "/1.html" : "/0.html"); Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3; server.send(200, "text/html", Temp); } void Ereignis_Index() // Wird ausgeuehrt wenn "http://<ip address>/" aufgerufen wurde { Temp = html1 + String((val) ? "/1.html" : "/0.html"); Temp += html2 + String((val) ? "BACKGROUND-COLOR: DarkGray;" : "BACKGROUND-COLOR: Chartreuse;") + html3; server.send(200, "text/html", Temp); } void Ereignis_Frame() // Wird ausgefuehrt wenn "http://<ip address>/frame" aufgerufen wurde { server.send(200, "text/html", htmlFrame ); } void setup() // Wird 1 Mal beim Start ausgefuehrt { char ssid[32] = "1234\0"; //Variable fuer Wlan Name char passphrase[64] = "567890\0"; //Variable fuer Passwort digitalWrite(0, 1); // warscheinlich ueberfluessig pinMode(0, OUTPUT); // GPIO0 als Ausgang konfigurieren digitalWrite(0, 1); // Anfangszustand 1 (Relais ausgeschaltet) pinMode(2, INPUT_PULLUP); // GPIO2 als Eingang mit Pullup konfigurieren Serial.begin(115200); // Serielle schnittstelle initialisieren Serial.println("\r\n"); // Lehere Zeile ausgeben EEPROM.begin(64); // EEPROM initialisieren mit 64 Byts sprungmarke: // Hier landen wir wenn EEPROM leer // Eeeprom einlesen for (i = 0; i < 32; i++) ssid[i] = EEPROM.read(i); for (i = 32; i < 64; i++) passphrase[i - 32] = EEPROM.read(i); // Wenn EEPROM leer if (ssid[0] == 255) { Serial.println("SSID nicht konfiguriert\r\n") ; Serial.println("Weiter mit \"Enter\"\r\n") ; while (!Serial.available())yield(); //Warte bis Seriell etwas reinkommt InputEEPR(); goto sprungmarke; } // Wlan-Zugang konfigurieren WiFi.mode(WIFI_STA); // modus WiFi.begin(ssid, passphrase); WiFi.printDiag(Serial); // Wlan Daten seriell ausgeben while (WiFi.status() != WL_CONNECTED)// Warten auf verbindung { delay(500); Serial.print("."); if (Serial.available()) InputEEPR(); //Ausgand wenn Seriell etwas empfangen } // dann Wlan Name und Passwort eingeben Serial.println(""); // Wenn verbunden Serial.print("Verbunden mit "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP());// Aktuelle IP des ESP8266-servers zeigen //Bechandlung der Ereignissen anschlissen server.on("/", Ereignis_Index); server.on("/1.html", Ereignis_SchalteON); server.on("/0.html", Ereignis_SchalteOFF); server.on("/frame", Ereignis_Frame); server.begin(); // Starte den Server Serial.println("HTTP Server gestartet"); } void InputEEPR() // Unterprogramm zum eingeben der Wlan-Daten { String Text = ""; char inser; inser = Serial.read(); if (inser == 13) // Wenn "Enter" bet?tigt, 27 esc { Serial.println("Input SSID: "); for (i = 0; i < 32; i++) // SSID maximal 32 Byte { while (!Serial.available()) yield(); //warte bis etwas empfangen wird inser = Serial.read(); Serial.write(inser); //Echo if (inser == '\r') // Wenn zeile abgeschlossen ist { EEPROM.write(i, '\0'); //Stringende setzen break; // for Schleife verlassen } else EEPROM.write(i, inser);//nechste Zeichen in EEPROM speichern } Serial.println("\r\nOK"); Serial.println("Input Passwort: "); for (i = 32; i < 64; i++) // Passwort maximal 32 Byte { while (!Serial.available()) yield(); //warte bis etwas empfangen wird inser = Serial.read(); Serial.write(inser); if (inser == '\r') // Wenn zeile abgeschlossen ist { EEPROM.write(i, '\0'); //Stringende setzen break; // for schleife verlassen } else EEPROM.write(i, inser);//nechste Zeichen empfangen } EEPROM.commit(); // EEPROM Schreiben Serial.println("\r\nOK"); Serial.println("Bitte ESP8266 neu starten"); } } void loop() //Hautprogramm { if (Serial.available()) InputEEPR();// Wenn Seriell etwas empfangen server.handleClient(); // Serwerereignisse abarbeiten if (!digitalRead(2)) // Wenn Taster an GPIO2 betaetigt wurde { val = !val; // Schaltzstand ?endern digitalWrite(0, val); // Schaltzstand an denn GPIO2 ausgeben while (!digitalRead(2))server.handleClient(); //Warten bis der Taster losgelassen wird } } |
Download das Programm Webschalter 2.1 als BIN-Datei zum direkten Flashen in ESP8266 Modul.
Um von außen auf unseren ESP8266-Webserver Zugang zu bekommen müssen wir Router so einstellen das Port 80 auf die IP Adresse des ESP8266-Servers weitergeleitet wird.
Wenn wir jetzt jemanden über Telefon unsere externe IP-Adresse mitteilen, dann kann er über Internet unsere IP- Steckdose bedienen. Noch besser als über Telefon die IP Adresse mitzuteilen, ist es einen Dyndns Dienst zu benutzen und Router so einzustellen, das externe Adresse automatisch aktualisiert wird. Ab jetzt rufen wir unser Server nicht über IP Adresse sondern über eine Domain.
Kronleuchter
|
Wohnwand Beleuchtung
|
Rolladen
|
Klimanlage
|
<script type="text/javascript">
setInterval(refreshIframes, 3000);
function refreshIframes()
{
var frame1 = document.getElementById("Frame1");
frame1.src = frame1.src;
var frame2 = document.getElementById("Frame2");
frame2.src = frame2.src;
}
</script>>
Html Code die mini Webseiten der IP-Steckdosen in Tabelle
einbindet sieht so aus:
<iframe id="Frame1" src="h t t p : / / m ischaka .d dns. net : 81"
name="Kronleuchter" frameborder="0" width="100"></iframe>
http://mischaka.ddns.net ist meine dyndns Adresse. IP-Steckdosen sind
über unterschiedliche Ports zu erreichen. Weil nach Außen ist nur eine
IP sichtbar. Jede IP-Steckdose hat eigene IP-Adersse, diese
Adresse wird mittels Portweiterleitung im Router an einen Port
angebunden. In meinem Router ist diese Funktion unter
Weiterleitung-> Virtuelle Server zu erreichen.
Mit diesem Java-Script lassen sich die Schaltzustände jede 3 Sekunden aktualisieren. Das wird benötigt wenn Steuerungswebseite längere Zeit geöffnet ist und die Elektrogeräte werden mittels des Tasters oder von den anderen Stellen parallel gesteuert. Im Netzwerk zu entlasten kann Aktualisierungsinterwall verlängert werden z.B. auf 10 Sekunden (setInterval(refreshIframes, 10000);).
In der Version des Programms ist es möglich
beliebige Portnummer
zu vergeben.
Auch Dialog für Einstellungen wurde überarbeitet. Jetzt kann man Name
des Wi-Fi-Netzwerks, Passwort und
Portnummer einzeln eingeben.
Liste der möglichen Aktionen wird angezeigt.
Download Webschalter 2.2 als BIN-Datei
und Quellcode
Ich habe eine kleine App zum Schalten der Wlan Steckdose geschrieben.
Die App ruft die Webseite zum Ein-/Aus-Schalten der Steckdose und beendet sich.
So haben Sie auf dem Handybildschirm 2 Batten, eine zum Einschalten, andere zum Ausschalten.
Wenn keine Internetverbindung da ist, oder Server nicht gefunden wurde, bleibt die Anwendung offen und Sie haben die Möglichkeit die URL anzugeben oder zu ändern.
Um 2 Buttons auf dem Handybildschirm zu bekommen müssen 2 Apps installiert werden ON-App und OFF-App. Eigentlich sind das gleiche Programme mit dem Unterschied in Namen und Icon.
Apps sind im Appinventor gemacht.
Download: App-Projekt, Quellcode als Bild
Download ON-App, OFF-App
Diese Firmware hat gleich Eigenschaften wie im Projekt "4-Fach Steckdosenleiste", nur halt mit dem Unterschied, dass hier nur ein Relais angesteuert wird.
• Kann als Client (Endgerät) oder als Access Point betrieben werden.
• Authentifizierung zuschaltbar.
• Setup über Webinterface.
RX/TX mit einem Jumper Brücken. Stromversorgung anlegen. ESP8266 startet im Access Point Modus.
Mit einem WLAN fähigem Gerät das WLAN Netzwerk „Web Schalter Setup“ auswählen und mit dem Passwort „tiramisu“ anmelden.
Dann starten Sie ein Internetbrowser und geben Sie in Adressleiste 192.168.168.30 ein.
Wenn die Quellcode mit der Option #define DNS kompiliert wurde, dann wird beliebige Domen zum Setupseite führen.
Es öffnet sich ein Formular mit Eingabefeldern für SSID, WLAN–Passwort und URL.
Nach dem Absenden des Formulars erhalten Sie Meldung „Gespeichert“.
Beim erneuten Aufruf vom 192.168.168.30, werden eingestellten Daten angezeigt.
WLAN-Passwort wird dabei mit Sternchen ersetzt. (Sicherheitsmaßname damit bei Übergabe des Notruftasters an Dritten Ihr WLAN–Passwort nicht preisgegeben wird).
Hier haben Sie die Möglichkeit die HTTP-Authentifizierung bei WLAN Steckdose einzuschalten.
Dazu bitte das Eingabefeld „Benutzerpasswort für HTTP-Authentifizierung“ das Passwort eintragen, den Sie später, bei der Anmeldung auf dem Steckdosen-Server, verwenden möchten.
Benutzername ist fest programmiert und heißt „admin“( oder Sie ändern das im Sketch in Zeile 32).
Wenn das Eingabefeld „Benutzerpasswort für HTTP-Authentifizierung“ leer bleibt wird HTTP-Authentifizierung deaktiviert.
IP–Steckdose kann auch in Access Point Modus betrieben werden. (in Access Point Modus startet die IP–Steckdose eigene WLAN –Netz.)
Access Point Modus wird wie folgt eingeschaltet. Im Setup das Eingabefeld „WLAN Netzwerk Name“ leer lassen. Im Eingabefeld „Passwort“ das Passwort eingeben, was Sie später bei Anmeldung an der 4-Fach-IP –Steckdosenleiste verwenden möchten.
Das Passwort muss mindestens 8 Zeichen lang sein (sonst wird Access Point Modus nicht gestartet).
Nach dem erneutem Einschalten der IP–Steckdose können Sie mit einem WLAN flächigem Gerät das WLAN Netzwerk „Web Schalter“ auswählen und mit dem vergebenem Passwort anmelden.
Dann starten Sie ein Internetbrowser und geben Sie in Adressleiste 192.168.168.30 ein.
Wenn die Quellcode mit der Option #define DNS kompiliert wurde, dann wird beliebige Domen zum Startseite führen.
E-Mail: webmaster_x_esp8266-server.de |