// benötigte Bibliotheken
#include <ESP8266WebServer.h>
#include <time.h>
#include <DHT.h>
// DHT11
// #define DHTTYPE DHT11
// DHT22
#define DHTTYPE DHT22
#define DHTPIN D7
// Sensor zuordnen
DHT dht(DHTPIN, DHTTYPE);
#define Router "Router_SSID"
#define Passwort "xxxxxxxx"
/*
NTP-Server aus Pool
#define Zeitserver "de.pool.ntp.org"
oder z.B. Zeitserver der Physikalisch-technische Bundesanstalt
#define Zeitserver "ptbtime1.ptb.de"
*/
#define Zeitserver "de.pool.ntp.org"
/*
Liste der Zeitzonen
https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv
Zeitzone CET = Central European Time -1 -> 1 Stunde zurück
CEST = Central European Summer Time von
M3 = März, 5.0 = Sonntag 5. Woche, 02 = 2 Uhr
bis M10 = Oktober, 5.0 = Sonntag 5. Woche 03 = 3 Uhr
*/
#define Zeitzone "CET-1CEST,M3.5.0/02,M10.5.0/03"
// time_t enthält die Anzahl der Sekunden seit dem 1.1.1970 0 Uhr
time_t aktuelleZeit;
/*
Struktur tm wandelt die ermittelte Zeit um:
tm_hour -> Stunde: 0 bis 23
tm_min -> Minuten: 0 bis 59
tm_sec -> Sekunden 0 bis 59
tm_mday -> Tag 1 bis 31
tm_mon -> Monat: 0 (Januar) bis 11 (Dezember)
tm_year -> Jahre seit 1900
tm_yday -> vergangene Tage seit 1. Januar des Jahres
tm_isdst -> Wert > 0 = Sommerzeit (dst = daylight saving time)
*/
tm Zeit;
WiFiServer Server(80);
WiFiClient Client;
void setup()
{
Serial.begin(9600);
// Parameter für die zu ermittelnde Zeit
configTime(Zeitzone, Zeitserver);
WiFi.begin(Router, Passwort);
// WiFi starten
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
// Webserver starten
Server.begin();
// SSID des Routers anzeigen
Serial.println();
Serial.print("Verbunden mit ");
Serial.println(WiFi.SSID());
// IP anzeigen
Serial.print("IP: ");
Serial.println(WiFi.localIP());
// dht starten
dht.begin();
}
void loop()
{
ZeitAnzeigen();
}
void ZeitAnzeigen()
{
// aktuelle Zeit lesen
time(&aktuelleZeit);
// localtime_r -> ermittelte Zeit in die lokale Zeitzone setzen
localtime_r(&aktuelleZeit, &Zeit);
// Variable definieren
// Umwandlung in String wird für die Ersetzung von , zu . benötigt
float Temperatur;
float Luftfeuchtigkeit;
String AnzeigeTemperatur;
String AnzeigeLuftfeuchtigkeit;
// auf Clienten warten ...
Client = Server.available();
if (Client)
{
String SchaltungLesen;
// solange der Client verbunden ist ...
while (Client.connected())
{
if (Client.available())
{
// Anforderung vom Clienten lesen ...
char Zeichen = Client.read();
// return (\n) gesendet
if (Zeichen == '\n')
{
// wenn der String SchaltungLesen leer ist
if (SchaltungLesen == "")
{
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen
mit print oder println gesendet werden
println "verschönert" den Quelltext
(erzeugt einen Zeilenumbruch im Quelltext)
" müssen mit \ maskiert werden " -> \"
*/
// HTTP-Anforderung senden
Client.println("HTTP/1.1 200 OK");
Client.println("Content-Type: text/html");
// Leerzeile zwingend erforderlich
Client.println();
/*
HTML-Seite aufbauen
die folgenden Anweisungen müssen mit print oder println gesendet werden
println "verschönert" den Quelltext
" muss mit \" maskiert werden
*/
Client.println("<!doctype html>");
Client.println("<html>");
Client.println("<body>");
// alle 60 Sekunden aktualisieren mit meta-Tag
Client.println("<meta http-equiv=\"refresh\" content=\"60\">");
Client.println("<h1> Temperatur und Luftfeuchtigkeit messen</h1>");
Client.println("<hr />");
Client.print("<h2>Letzte Messung: ");
// tm_mday -> Wochentag anzeigen
switch (Zeit.tm_wday)
{
case 0:
Client.print(F("Sonntag"));
break;
case 1:
Client.print(F("Montag"));
break;
case 2:
Client.print(F("Dienstag"));
break;
case 3:
Client.print(F("Mittwoch"));
break;
case 4:
Client.print(F("Donnerstag"));
break;
case 5:
Client.print(F("Freitag"));
break;
case 6:
Client.print(F("Samstag"));
break;
}
Client.print(", ");
// Tag: führende 0 ergänzen
if (Zeit.tm_mday < 10) Client.print("0");
Client.print(Zeit.tm_mday);
Client.print(".");
// Monat: führende 0 ergänzen
if (Zeit.tm_mon < 10) Client.print("0");
Client.print(Zeit.tm_mon + 1);
Client.print(".");
// tm_year + 1900
Client.print(Zeit.tm_year + 1900);
// Uhrzeit
Client.print(" Uhrzeit: ");
// Stunden
if (Zeit.tm_hour < 10) Client.print("0");
Client.print(Zeit.tm_hour);
Client.print(":");
// Minuten
if (Zeit.tm_min < 10) Client.print("0");
Client.print(Zeit.tm_min);
Client.print(":");
// Sekunden
if (Zeit.tm_sec < 10) Client.print("0");
Client.print(Zeit.tm_sec);
Client.println("</h2>");
Client.println("<hr />");
// Temperatur lesen und in String umwandeln
AnzeigeTemperatur = String(dht.readTemperature());
// . durch , ersetzen
AnzeigeTemperatur.replace(".", ",");
// Luftfeuchtigkeit lesen und in String umwandeln
AnzeigeLuftfeuchtigkeit = String(dht.readHumidity());
AnzeigeLuftfeuchtigkeit.replace(".", ",");
Client.print("<b>Temperatur:</b><blockquote>");
Client.println(AnzeigeTemperatur + " °C</blockquote>");
Client.println("<br>");
Client.print("<b>Luftfeuchtigkeit:</b><blockquote>");
Client.println(AnzeigeLuftfeuchtigkeit + " %</blockquote><hr>");
Client.println("<form>");
// Button formatieren
Client.print("<input style=\"font-size:16pt; font-weight:bold;");
Client.print("background-color:#55A96B;");
Client.print("display:block; cursor:pointer;\"type=\"button\"");
Client.println(" onClick=\"location.href='WiFi.localIP()'\" value=\"aktualisieren\">");
Client.println("</form>");
Client.println("<hr />");
// IPs anzeigen
Client.print(F("<b>Eigene IP: "));
Client.print(Client.remoteIP());
Client.print(F("</b>"));
Client.print(F("<br><b>IP Klient: "));
Client.print(WiFi.localIP());
Client.print(F("</b>"));
Client.println("</b>");
Client.println("</body>");
Client.print("</html>");
// HTTP-Antwort endet mit neuer Zeile
Client.println();
// Seite vollständig geladen -> loop verlassen
break;
}
else SchaltungLesen = "";
}
// bei einem anderen Zeichen als return (\r)
// -> Zeichen dem String SchaltungLesen hinzufügen
else if (Zeichen != '\r') SchaltungLesen += Zeichen;
}
}
Client.stop();
}
}
Letzte Aktualisierung: