Wet­ter­sta­ti­on DHT11/DHT22 und UNO R4 WiFi

#include "DHT.h"
#include "WiFiS3.h"
#include "NTP.h"

// Pin des Sensors
int SENSOR_DHT = 7;

// DHT11
#define SensorTyp DHT11

// DHT22
// #define SensorTyp DHT22

// Sensor einen Namen zuweisen
DHT dht(SENSOR_DHT, SensorTyp); 

// SSID und Passwort des Routers
char Router[] = "Router_SSID";
char Passwort[] = "xxxxxxxx";

WiFiServer WiFiServer(80);
WiFiClient WiFiClient;
WiFiUDP wifiUdp;
NTP ntp(wifiUdp);

void setup()
{
  Serial.begin(9600);
  while (!Serial);
  delay(1000);

  // Verbindung aufbauen
  WiFi.begin(Router, Passwort);
  if (WiFi.status() == WL_NO_MODULE) 
  {
    Serial.println(F("Verbindungsaufbau gescheitert!"));
  }
  Serial.print("Verbindung aufbauen mit ");
  Serial.println(Router);

  // Webserver starten
  WiFiServer.begin();

  // IP des Servers/des verbundenen Computers anzeigen
  Serial.print("Server: ");
  Serial.println(WiFi.SSID());

  // IP des Arduinos anzeigen
  Serial.print("IP Adresse Arduino DHCP: ");
  Serial.println(WiFi.localIP());

  /*
    Zeitzone
    CEST: Central European Summertime
    Beginn europäische Sommerzeit letzter Sonntag im März 2 Uhr GMT + 2 Stunden
  */
  ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);

  // CET: Central European Time
  // Beginn Normalzeit letzter Sonntag im Oktober 3 Uhr GMT + 1 Stunde
  ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);

  // ntp starten
  ntp.begin();

  // Zeit holen
  ntp.update();

  // Zeit mit formatedTime() anzeigen:
  // %d = Tag, %m = Monat, %Y = Jahr, %T = Zeit in Stunden, Minuten, Sekunden
  Serial.println(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
  dht.begin();
}

void loop()
{
  WiFiClient = WiFiServer.available();
  if (WiFiClient) 
  {
    // Seite aufbauen wenn SeiteAufbauen true ist
    boolean SeiteAufbauen = true;
    while (WiFiClient.connected())
    {
      if (WiFiClient.available())
      {
        char Zeichen = WiFiClient.read();
        if (Zeichen == '\n' && SeiteAufbauen)
        {
          // HTTP-Anforderung senden
          WiFiClient.println("HTTP/1.1 200 OK");
          WiFiClient.println("Content-Type: text/html");
          // Leerzeile zwingend erforderlich
          WiFiClient.println();

          /*
            HTML-Seite aufbauen
            die folgenden Anweisungen müssen mit print oder println gesendet werden
            println "verschönert" den Quelltext
            " muss mit \" maskiert werden
          */
          WiFiClient.println("<!doctype html>");
          WiFiClient.println("<html>");
          WiFiClient.println("<body>");

          // alle 60 Sekunden aktualisieren mit meta-Tag
          WiFiClient.println("<meta http-equiv=\"refresh\" content=\"60\">");
          WiFiClient.println("<h1> Temperatur und Luftfeuchtigkeit messen</h1>");
          WiFiClient.println("<hr />");
          WiFiClient.print("<h2>Letzte Messung: ");

          // formatedTime() zeigt Wochentage in englischer Sprache
          // -> müssen einzeln abgefragt werden
          switch (ntp.weekDay())
          {
            case 0:
              WiFiClient.print("Sonntag");
              break;
            case 1:
              WiFiClient.print("Montag");
              break;
            case 2:
              WiFiClient.print("Dienstag");
              break;
            case 3:
              WiFiClient.print("Mittwoch");
              break;
            case 4:
              WiFiClient.print("Donnerstag");
              break;
            case 5:
              WiFiClient.print("Freitag");
              break;
            case 6:
              WiFiClient.print("Samstag");
              break;
          }
          WiFiClient.print(", ");
          WiFiClient.print(ntp.formattedTime("%d.%m.%Y Uhrzeit: %T"));
          WiFiClient.println("</h2>");
          WiFiClient.println("<hr />");

          // Temperatur
          String Temperatur = String(dht.readTemperature());
          Temperatur.replace(".", ",");
          WiFiClient.print("<b>Temperatur:</b><blockquote>");
          WiFiClient.println(Temperatur + " &deg;C</blockquote>");

          WiFiClient.println("<br>");

          // Luftfeuchtigkeit
          String Luftfeuchtigkeit = String(dht.readHumidity());
          Luftfeuchtigkeit.replace(".", ",");
          WiFiClient.print("<b>Luftfeuchtigkeit:</b><blockquote>");
          WiFiClient.println(Luftfeuchtigkeit + " %</blockquote>");
          WiFiClient.println("<br>");
         
          WiFiClient.println("<hr>");
          WiFiClient.println("<form>");

          // Button formatieren
          WiFiClient.print("<input style=\"font-size:16pt; font-weight:bold;");
          WiFiClient.print("background-color:#55A96B;");
          WiFiClient.print("display:block; cursor:pointer;\"type=\"button\"");
          WiFiClient.println(" onClick=\"location.href='WiFi.localIP()'\" value=\"aktualisieren\">");
          WiFiClient.println("</form>");
          WiFiClient.println("<hr />");

          // IPs anzeigen
          WiFiClient.print(F("<b>Eigene IP: "));
          WiFiClient.print(WiFiClient.remoteIP());
          WiFiClient.print(F("</b>"));
          WiFiClient.print(F("<br><b>IP Klient: "));
          WiFiClient.print(WiFi.localIP());
          WiFiClient.print(F("</b>"));
          WiFiClient.println("</b>");
          WiFiClient.println("</body>");
          WiFiClient.print("</html>");
          
          // HTTP-Antwort endet mit neuer Zeile
          WiFiClient.println();
          
          // Seite vollständig geladen -> loop verlassen
          break;
        }
        if (Zeichen == '\n') SeiteAufbauen = true;
        else if (Zeichen != '\r') SeiteAufbauen = false;
      }
    }
    delay(1);
    WiFiClient.stop();
  }
}

Letzte Aktualisierung: 22. Okt 2024 @ 11:38