Wet­ter­sta­ti­on BME280 mit UNO R4 Wifi

#include "Wire.h"
#include "SPI.h"
#include "Adafruit_Sensor.h"
#include "Adafruit_BME280.h"
#include "WiFiS3.h"
#include "NTP.h"

// Luftdruck auf Meereshöhe
#define LuftdruckMeeresHoehe (1013.25)
Adafruit_BME280 bme;

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

int Status = WL_IDLE_STATUS;
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);
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(500);
    Serial.print(".");
  }

  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"));

  // I2C über SCL/SDA oder A5/A4
  // if (!bme.begin()

  // I2C über QWIIC-Verbindung
  // Adresse und Wire1-Bus
  if (!bme.begin(0x77, &Wire1)) 
  {
    Serial.println("Kein BME280-Modul gefunden");
    while (true);
  } 
  else Serial.println("BME280-Modul gefunden");

  Serial.println();
}

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: ");

          // Zeit aktualisieren
          ntp.update();

          // 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(bme.readTemperature());
          Temperatur.replace(".", ",");
          WiFiClient.print("<b>Temperatur:</b><blockquote>");
          WiFiClient.println(Temperatur + " &deg;C</blockquote>");
          WiFiClient.println("<br>");

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

          // Luftdruck
          String Luftdruck = String(bme.readPressure() / 100);
          Luftdruck.replace(".", ",");
          WiFiClient.print("<b>Luftdruck:</b><blockquote>");
          WiFiClient.println(Luftdruck + " hPa</blockquote>");
          WiFiClient.println("<br>");

          // Höhe
          String Hoehe = String(bme.readAltitude(LuftdruckMeeresHoehe));
          Hoehe.replace(".", ",");
          WiFiClient.println("<b>Ungef&auml;hre H&ouml;he:</b><blockquote>");

          WiFiClient.println(Hoehe + " m</blockquote>");
          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: 28. Dez 2023 @ 10:04