Zusammenfassung: Kombinierter Webserver - Webclient am ESP8266
In den vorangegangen Seiten haben wir gelernt wie wir einen Webserver am ESP8266 aufsetzen, ihn mit CSS verschönern und wie Daten mit dem fetch API aktualisiert werden können. Auch ein Relais können wir nun über die Weboberfläche schalten und der ESP8266 kann mit einem Webclient seine Daten auch an einen anderen Server senden. Das brachte uns schlussendlich auch dazu, Daten von einem anderen ESP8266 über WiFi zu übernehmen.
Der finale Sketch steht hier zur Verfügung. Dazu noch einige Worte:
Precompiler Anweisungen
Wir haben zwei Sketche zusamengeführt: einen Webserver und einen Webclient. Mit zwei ESP8266 kann man also erreichen dass die ESP8266 gegenseitig die Daten an das andere Modul weitergeben.
Es gibt EIN Programm man muss lediglich die zwei verschiedenen Boards konfigurieren sowie beim Upload aupassen welches Board gerade kompiliert werden soll.
#define USE_BOARD 103 // the actual board to compile /* ******************************************************************* the board settings / die Einstellungen der verschiedenen Boards ********************************************************************/ #if USE_BOARD == 103 // Example Board #define TXT_BOARDID "103" // an ID for the board #define TXT_BOARDNAME "ESP8266 Server Client" // The name of the board #define CSS_MAINCOLOR "blue" // different webservers and use different colors const uint16_t clientIntervall = 0; // intervall to send data to a server in seconds. const char* sendHttpTo = "http://172.18.67.109/d.php"; // the module will send information to that server/resource. #endif #if USE_BOARD == 109 // Example Board #define TXT_BOARDID "109" // an ID for the board #define TXT_BOARDNAME "ESP8266 Server Client" // The name of the board #define CSS_MAINCOLOR "green" // use different colors const uint16_t clientIntervall = 30; // intervall to send data to a server in seconds. const char* sendHttpTo = "http://172.18.67.103/d.php"; // the module will send information to that server. #endif
Mit
#define USE_BOARD 103 // the actual board to compile
definiert man welches Board - kompiliert wird, im Beispiel also 103.
103 und 109 können natürlich geändert werden. Ebenso muss die Ziel-IP angepasst werden, da man davon ausgehen muss, dass dein Router andere IP's vergibt als meiner. Mein Beispiel geht davon aus, dass die IP-Adresse des Boards 103 immer auf 103 endet, die des Boads 109 mit 109 endet.
Das Board 109 meldet Daten an Board 103 im 30 Sekunden Intervall
Das Board 103 meldet Daten an Board 109 nicht autmatisch sondern nur wenn man den Vorgang manuell anstößt.
DNS im Router konfigurieren
Es ist praktisch wenn man dem ESP nach der ersten Verbindung eine fixe IP im DNS des Routers zuweist. Damit ist gewährleistet, dass trotz DNS der ESP immer die gleiche IP erhält.
In eigener Sache
- Der Sketch ist so wie er ist. Ich bin kein Programmierer und so sieht der Code auch aus.
- Kommentare gibt es dann, wenn ich glaube dass sie notwendig sind. Andere machen sicher mehr.
- MISSING in den Kommentaren deuten auf Unzulänglichkeiten im Code, notwendige Klärungen oder Todo's für spätere Versionen.
- Meine Entwicklung ist für einen NodeMCU V2.0 entstanden.
- Die HTML Seiten sollen eine W3C Validierung überstehen - habe es aber bei diesem Sketch nicht mehr ausprobiert.
- ArduinoOTA ist eine feine Sache. Das kann ich jeden empfehlen der viel mit dem ESP8266 arbeitet.
Hardware Empfehlung: NodeMCU V2 statt purem ESP8266
Ich verwende die reinen ESP8266 nur in fertigen Projekten. Zum Erarbeiten von neuen Sketches verwende ich den NodeMCU V2
Der NodeMCU hat einen ESP8266-12E eine Stromversorgung und einen USB-TTL Wandler mit CP2102. Er ist bastlerfreundlich und erlaubt das Upload ohne drücken von irgendwelchen Tasten. Der NodeMCU hat (neben der LED am ESP) eine zusätzliche LED sowie einen Flash-Button der zur Laufzeit des Codes für sonstige Eingaben verwendet werden kann.
Alternativ könnte man auch über einen Wemos D1 pro Mini nachdenken, auch dieser ist Makerfriendly und erleichtert die Handhabung mit einem ESP8266:
Das war das ganze Tutorial: