DHT22 Tem­pe­ra­tur mit Wemos D1 mit NTP im Brow­ser anzeigen

// 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 + " &deg;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: 17. Jun 2023 @ 9:57