Zum Inhalt springen

Sensordaten an PC senden

    Der Vollständigkeit halber, hier ein kurzer Überblick über vorangegangene Beiträge, in denen ich folgendes ausführlich beschrieben hatte:

    Nun soll das Finale folgen und wir werden unseren ESP32 ans WLAN bringen und die Sensordaten, wie im Beitrag Sensordaten an Webserver senden beschrieben an unseren eigenen Webserver senden und in der Datenbank abspeichern.

    Fritzing Schaltung ESP32 mit SHT31 verbunden
    Logo Fitzing.org

    Voraussetzung ist die Schaltung, wie im Beitrag
    Temperaturmessung mit dem SH3x bereits beschrieben. Da ist auch genau beschrieben, wie du untenstehenden Sketch per Arduino IDE auf deinen ESP bekommst.


    Bevor du den Sketch auf das Board lädst, musst du noch die IP-Adresse deines Rechners herausbekommen.
    Das kannst du an deinem Router prüfen oder öffne das Programm cmd auf deinem Rechner und gib den Befehl IPconfig ein. Die Adresse ist so ähnlich aufgebaut -> 192.xxx.xx.xx. Diese IP-Adresse gib bitte bei der Variable const char* serverName hinter http:// statt „deine_IP“ ein. Für die WLAN-Verbindung ist hier auch WLAN Name und Passwort auszutauschen. Wichtig: Der PC muss im selben WLAN-Netz angemeldet sein, in dem sich der ESP32 eingeloggt hat.

    //Code Eckhard Gerwien - Dieser Code steht zur freien Verfügung
    // Einbinden der erforderlichen Libraries
    #include <WiFi.h>
    #include <HTTPClient.h>
    #include <Wire.h>
    #include <SPI.h>
    #include <Adafruit_SHT31.h>
    // WLAN-Einstellungen
    const char* ssid = "DEIN_SSID";
    const char* password = "DEIN_PASSWORT";
    // Webserver-URL
    const char* serverName = "http://Deine_IP/sensordaten/empfangsscript.php";
    // Erstellen eines Objekts für den SHT31 Sensor
    Adafruit_SHT31 sht31 = Adafruit_SHT31();
    void setup() {
      // Initialisierung der seriellen Kommunikation für Debugging
      Serial.begin(115200);
      // Initialisierung des I2C-Bus
      Wire.begin();
      // Initialisierung des SHT31 Sensors
      if (!sht31.begin(0x44)) {  // 0x44 ist die I2C-Adresse des SHT31
        Serial.println("Konnte SHT31 nicht finden, überprüfe die Verkabelung!");
        while (1) delay(1);
      }
      Serial.println("SHT31 Sensor gefunden!");
      // Verbindung zum WLAN herstellen
      WiFi.begin(ssid, password);
      Serial.print("Verbinde mit WLAN");
      while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
      }
      //Ausgaben an die serielle Schnittstelle
      Serial.println("");
      Serial.println("WLAN verbunden");
      Serial.print("IP-Adresse: ");
      Serial.println(WiFi.localIP());
    }
    //Code der regelmäßig in einer Schleife ausgeführt wird
    void loop() {
      // Auslesen der Temperatur
      float temperature = sht31.readTemperature();
      // Auslesen der Luftfeuchtigkeit
      float humidity = sht31.readHumidity();
      // Überprüfen, ob die Messwerte gültig sind
      if (!isnan(temperature)) {  // isnan überprüft, ob der Wert 'NaN' (Not a Number) ist
        Serial.print("Temperatur: ");
        Serial.print(temperature);
        Serial.println(" °C");
      } else {
        Serial.println("Fehler beim Auslesen der Temperatur!");
      }
      if (!isnan(humidity)) {
        Serial.print("Luftfeuchtigkeit: ");
        Serial.print(humidity);
        Serial.println(" %");
      } else {
        Serial.println("Fehler beim Auslesen der Luftfeuchtigkeit!");
      }
      // Senden der Daten an den Webserver
      if (WiFi.status() == WL_CONNECTED) {
        HTTPClient http;
        http.begin(serverName);
        http.addHeader("Content-Type", "application/x-www-form-urlencoded");
        // Übernahme der Messwerte in den String zum Senden
        String postData = "temperature=" + String(temperature) + "&humidity=" + String(humidity);
        int httpResponseCode = http.POST(postData);
        if (httpResponseCode > 0) {
          String response = http.getString();
          Serial.println(httpResponseCode);
          Serial.println(response);
        } else {
          Serial.print("Error on sending POST: ");
          Serial.println(httpResponseCode);
        }
        http.end();
      } else {
        Serial.println("WiFi nicht verbunden");
      }
      // Wartezeit von 10 Sekunden vor der nächsten Messung
      delay(10000);
    }

    Lade oben stehenden Sketch bitte auf deinen ESP.
    Falls du nochmals nachlesen musst, gehe zu diesem Beitrag.


    Server- und Verzeichniseinstellungen

    Gehe in dein Installationsverzeichnis von xampp. Dort findest du den Ordner htdocs – öffne ihn bitte.
    Lege ein neues Verzeichnis z.B. sensordaten an. In dieses Verzeichnis kommen alle Dateien, die für eine Website benötigt werden. In unserem Fall legst du jetzt unser php-Skript hinein, was die vom ESP32 gesendeten Sensordaten empfangen soll und weiter an die Datenbank schickt.
    Beachte bitte, dass die 4 Variablen am Anfang des Skriptes mit deinen Werten gefüllt werden.

    Wenn du unter phpMyAdmin keine Einstellungen an den Rechten vorgenommen hast, sollte der Username „root“ und kein Passwort vergeben sein. Vergebe dann noch den DB-Namen deiner angelegten Datenbank. Bei mir sensordaten.

    ?php
    //PHP Skript für das Extrahieren der Daten aus dem HTTP-Request und Speichern in eine Datenbank
    // Logindaten für die Datenbankverbindung bereitstellen
    $servername = "localhost";
    $username = "########"; // dein User - Standard root
    $password = "#######";  // dein Passwort - Standard keins vergeben
    $dbname = "sensordaten"; // dein Datenbankname
    
    // Verbindung zur Datenbank herstellen
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Verbindung überprüfen
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    }
    // Daten aus dem POST-Request auslesen
    $temperature = $_POST['temperature'];
    $humidity = $_POST['humidity'];
    // SQL-Abfrage zum Einfügen der Daten vorbereiten
    $sql = $conn->prepare("INSERT INTO sht31_daten (temperature, humidity) VALUES (?, ?)");
    $sql->bind_param("ss", $temperature, $humidity); // "ss" bedeutet, dass zwei String-Werte gebunden werden
    // Prüfen ob die Daten in die Datenbank geschrieben wurden
    if ($sql->execute()) {
        echo "New record created successfully";
    } else {
        echo "Error: " . $sql->error;
    }
    // Datenbankverbindung wieder schließen
    $sql->close();
    $conn->close();
    ?>

    Wenn alles geklappt hat, solltest du folgendes zu sehen bekommen. HTTP Response code: 200 sagt uns -> OK! Hat geklappt.

    11:57:12.089 -> SHT31 Sensor gefunden!
    11:57:12.188 -> Verbinde mit WLAN…..
    11:57:14.667 -> WLAN verbunden
    11:57:14.667 -> IP-Adresse: 192.xxx.x.xxx
    11:57:14.698 -> Temperatur: 27.43 °C
    11:57:14.731 -> Luftfeuchtigkeit: 51.28 %
    11:57:14.827 -> HTTP Response code: 200
    11:57:14.827 -> New record created successfully
    11:57:24.870 -> Temperatur: 27.42 °C
    11:57:24.870 -> Luftfeuchtigkeit: 51.60 %
    11:57:24.934 -> HTTP Response code: 200
    11:57:24.934 -> New record created successfully

    Sollte irgendetwas schief gehen, bekommst du eine Fehlermeldung. Hier ist es wichtig zu verstehen, an welcher Stelle geht etwas schief. Temperatur und Luftfeuchte haben wir bekommen. Also der Sketch auf dem ESP32 scheint zu laufen. Prüfe bitte, ob die richtige IP-Adresse eingetragen ist. Es besteht auch die Möglichkeit, den Link http://Deine_IP/sensordaten/empfangsscript.php direkt im Browser in das Adressfeld zu legen. Damit weißt du schon mal, ob das Skript auch erreichbar ist.

    11:57:18.089 -> SHT31 Sensor gefunden!
    11:57:18.188 -> Verbinde mit WLAN…..
    11:57:18.667 -> WLAN verbunden
    11:57:18.667 -> IP-Adresse: 192.xxx.x.xxx
    11:57:19.338 -> Temperatur: 27.28 °C
    11:57:19.338 -> Luftfeuchtigkeit: 50.93 %
    11:57:24.318 -> Error on sending POST: -1

    Gehe wieder in phpMyAdmin zu deiner angelegten Datenbank und du solltest ebenfalls die abgespeicherten Werte in der Datenbank sehen.

    Datenbankausgabe gespeicherter Sensordaten

    In diesem DIYTechAdventure hast du gesehen, wie Sensordaten von einem Sensor über dein WLAN-Router zu deinem PC gesendet werden können. Durch einen Datenbankserver, wie xampp ihn mitbringt, bist du unabhängig vom WEB und kannst deine Projekte entwickeln und ausgiebig testen. Schreibe mir in den Kommentaren, wie du im diesem Beitrag zurecht gekommen bist. so kann ich auch lerne, Beiträge besser zu gestalten.


    0 Kommentare
    Inline Feedbacks
    View all comments