Rothschopf Werner

rowex ganz privat

Angebote

Zusammenfassung: Kombinierter Webserver - Webclient am ESP8266

In den vorangegangen Seiten haben wir gelernt wie wir einen Webserver am ESP8266 aufsetzen, ihn mit CSS aufmotzen, wie Daten über AJAX/JSON aktualisert werden können. Auch ein Relay 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 wird

#define USE_BOARD 103 // the actual board to compile
#define VERSION "8.1" // This is just the Version of the Arduino Sketch

/* *******************************************************************
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" // don't get confused by the different webservers and use different colors
const uint16_t clientIntervall = 0; // intervall to send data to a server in seconds. Set to 0 if you don't want to send data
const char* sendHttpTo = "http://172.18.67.109/d.php"; // the module will send information to that server/resource. Use a URI or a IP Adress
#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" // don't get confused by the different webservers and use different colors
const uint16_t clientIntervall = 30; // intervall to send data to a server in seconds. Set to 30 if you want to send data each 30 seconds
const char* sendHttpTo = "http://172.18.67.103/d.php"; // the module will send information to that server. Use a URI or a IP Adress
#endif

Unter

#define USE_BOARD 103 // the actual board to compile

definiert man welches Board - im Beispiel 103 - kompiliert wird.

103 und 109 können natürlich ausgetauscht 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, aber 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.
  • 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 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 gewöhnlich verwendet werden kann.

 

Alternativ könnte man auch über einen Wemos D1 pro Mini nachdenken

 

 

 

 

 

 

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

Protokoll

erstellt: 2018-09-02 | Stand: 2018-09-05