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:

Noch Fragen? Na dann noch mal alles im Detail.

Wenns nützlich war, freue ich mich über ein Kommentar/email.

Links

  • Amazon (Suchlink für NodeMCU V2 mit CP2102 *)
  • Amazon (Alternativ: Wemos D1 pro Mini *)
  • Download des finalen Sketch ESP8266 Webserver WebClient *)

Die mit Sternchen (*) gekennzeichneten Verweise sind sogenannte Affiliate/Provision-Links. Wenn du auf so einen Verweis klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine (kleine) Provision. Für dich verändert sich der Preis dadurch nicht. Ich empfehle nur Produkte die ich selber besitze und wenn ich überzeugt bin, dass sie für andere Maker interesssant sind.

 

Protokoll

erstellt: 2018-09-02 | Stand: 2021-02-10