Server
// ESP32
#include "WiFi.h"
#include "WebServer.h"
// ESP8266
// #include "ESP8266WebServer.h"
#include "DHT.h"
// Pin des DHT-Sensors
int SENSOR_DHT = 19;
// Sensortyp festlegen
// DHT22 oder DHT11
#define SensorTyp DHT22
DHT dht(SENSOR_DHT, SensorTyp);
// Netzwerkname und Passwort des ESP
char Router[] = "ESPServer";
char Passwort[] = "espserver";
// ESP32
WebServer Server(80);
// ESP8266
// ESP8266WebServer Server(80);
// farbige Box mit CSS
String Seitenkopf =
"<head><style>"
".farbigeBox {"
"background-color: ivory;"
"color: black;"
"width: 450px;"
"padding: 20px;"
"text-align: left;"
"font-size: 40px;"
"font-family: arial;"
"}"
"</style>"
// refresh -> Seite automatisch aktualisieren
"<meta http-equiv=\"refresh\" content=\"30\"></head>";
// Wartezeit für die sichere Übermittlung der Daten
unsigned long Wartezeit = 5000;
// enthält die Daten des 2. ESPs
String Messung;
// IP-Adresse des 2. ESP
const char* host = "192.168.4.2";
// Konfiguration als Server
IPAddress ip(192, 168, 4, 1);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
void setup()
{
Serial.begin(9600);
// auf serielle Verbindung warten
while (!Serial);
delay(1000);
// ESP als Access-Point (AP) konfigurieren
WiFi.softAPConfig(ip, gateway, subnet);
// Access-Point starten
WiFi.softAP(Router, Passwort);
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.softAPSSID());
Serial.print("IP-Adresse: ");
Serial.println(WiFi.softAPIP());
// Webserver starten
// / -> Aufruf der URL, SeiteBauen -> Aufruf der Funktion
Server.begin();
Server.on("/", SeiteBauen);
dht.begin();
}
void loop()
{
static unsigned long Startzeit = millis();
// auf Anfragen warten
Server.handleClient();
// Messdaten einsammeln
if ((millis() - Startzeit) > Wartezeit)
{
// Daten des 2. ESPs einsammeln
DatenHolen();
Startzeit = millis();
}
}
void SeiteBauen()
{
// Seite "zusammenbauen"
String Seite = "";
Seite += Seitenkopf;
Seite += "<h1>Messdaten</h1>";
Seite += "<hr>";
/*
Messung enthält die mit / gtrennten Daten
String Messung mit substring am / trennen
Temperatur: von Position 0 bis zum / (indexOf))
Luftfeuchtigkeit von /+1 bis zur Länge des Strings
*/
String TemperaturKlient = Messung.substring(0, Messung.indexOf("/"));
String LuftfeuchtigkeitKlient = Messung.substring(Messung.indexOf("/") + 1, Messung.length());
Seite += "<h2>Daten vom Klienten ...</h2>";
Seite += "<div class=\"farbigeBox\">";
Seite += "Temperatur: ";
Seite += TemperaturKlient;
Seite += "<br>";
Seite += "Luftfeuchtigkeit: ";
Seite += LuftfeuchtigkeitKlient;
Seite += "<br>";
Seite += "</div>";
// Messwerte ermitteln
// . durch , ersetzen
String TemperaturServer = String(dht.readTemperature());
TemperaturServer.replace(".", ",");
String LuftfeuchtigkeitServer = String(dht.readHumidity());
LuftfeuchtigkeitServer.replace(".", ",");
Seite += "<h2>Daten vom Server ...</h2>";
Seite += "<div class=\"farbigeBox\">";
Seite += "Temperatur: ";
Seite += TemperaturServer + "°C";
Seite += "<br>";
Seite += "Luftfeuchtigkeit: ";
Seite += LuftfeuchtigkeitServer + "%";
Seite += "</div>";
// Button aktualisieren
Seite += "<hr><input style=\"font-size:16pt; font-weight:bold;";
Seite += "background-color:#55A96B;";
Seite += "display:block; cursor:pointer;\"type=\"button\"";
// IP für den Button aktualisieren (location.href)
// muss mit dem Wert für IPAdress übereinstimmen (. statt ,)
Seite += " onClick=\"location.href='http://192.168.4.1'\" value=\"aktualisieren\">";
Seite += "<hr>";
// Seite anzeigen
Server.send(200, "text/html", Seite);
}
void DatenHolen()
{
WiFiClient client;
// wenn Klient erfolgreich verbunden wurde
// wenn nicht return -> neuer Versuch
if (!client.connect(host, 80)) return;
/*
GET-Anfrage senden
/Messung -> Adresse (URL) für die zu übermittelnden Werte
wird von den Klienten festgelegt
host -> IP-Adresse des 2. ESPs
HTTP/1.1 -> Abfrageprotokoll
\r\n -> return mit anschließender neuer Zeile
*/
client.print(String("GET ") + "/Messung" + " HTTP/1.1\r\n" + host + "\r\n");
unsigned long LetzteZeit = millis();
// Wartezeit
while (!client.available() && ((millis() - LetzteZeit) < 3000))
{
delay(1);
}
// der Klient ist verfügbar
while (client.available())
{
// den mit GET erhaltenen String bis zum return (\r) lesen
String Daten = client.readStringUntil('\r');
// wenn Daten vorhanden sind
// Messung enthält die vom 2. ESP übermittelten Daten
if(Daten != "")
{
Messung = Daten;
Serial.println(Daten);
}
}
}
Klient
// ESP32
#include "WiFi.h"
#include "WebServer.h"
// ESP8266
// #include "ESP8266WebServer.h"
#include "DHT.h"
// Pin des DHT-Sensors
int SENSOR_DHT = 19;
#define SensorTyp DHT22
// Sensor DHT einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp);
// ESP als AP
char Router[] = "ESPServer";
char Passwort[] = "espserver";
// IP des 2. ESPs
IPAddress ip(192, 168, 4, 2);
IPAddress gateway(192, 168, 4, 1);
IPAddress subnet(255, 255, 255, 0);
// ESP32
WebServer Server(80);
// ESP8266
// ESP8266WebServer Server(80);
void setup()
{
// WiFi starten
WiFi.config(ip, gateway, subnet);
WiFi.begin(Router, Passwort);
// Adresse (URL)festlegen (/Messung)
// SeiteBauen -> zu übermittelnde Daten
Server.on("/Messung", SeiteBauen);
Server.begin();
Serial.begin(9600);
// DHT starten
dht.begin();
}
void loop()
{
// auf Anfragen warten
Server.handleClient();
}
void SeiteBauen()
{
String Seite ="";
// Messwerte ermitteln
// . durch , ersetzen
String Temperatur = String(dht.readTemperature());
Temperatur.replace(".", ",");
String Luftfeuchtigkeit = String(dht.readHumidity());
Luftfeuchtigkeit.replace(".", ",");
// Seite zusammenbauen
// / Trennzeichen
Seite = Temperatur + "°C/";
Seite += Luftfeuchtigkeit + "%";
// Seite übermitteln
Server.send(200, "text/html", Seite);
}
Letzte Aktualisierung: