ESP Temperaturmodul mit DS18B20 und Web-Ansicht

OP #7358220
Lesenswert?

Projekt für ESP Arduino: Temperatur messen mit ESP8266 und aufzeichnen mit Server Nutzbar zum Messen für Außentemperaturen, Raumtemperaturen, Heizungstemperaturen... oder irgendwelche Temperaturen zwischen -55 und 125°C

Design für WIFI Kit 8 (es gehen auch andere Module, nach Anpassungen) Futures:

  • Auslesen von bis zu 4 Temperatursensoren (DS18B20 oder ähnliche 1-wire Typen)
  • Web-Oberfläche zur Anzeige
  • Namen für Sendemodul und der bis zu 4 Sensoren einstellbar und speicherbar
  • Target-Server einstellbar und speicherbar, wohin die Daten gesendet werden
  • alle Einstellungen sind im internen Dateisystem gespeichert und nach Unterbrechung der Spannung wieder vorhanden
  • Daten senden an Server, als JSON oder URL-encoded alle 15 Minuten
  • Senden per HTTP oder HTTPS, allerdings ohne Zertifikatskontrolle
  • Abfrage vom Server als JSON, z.B. Home-Assistant, ioBroker oder ähnliche Server
  • Hintergrund Aktuallisierung der Web-Oberfläche per js
  • WiFi Einstellung per Handy, Tablet durch tzapu (Web-Oberfläche)
  • OTA Update, Firmware update vom Web-Server (Target-Server/firmware/version.bin)
  • Interne Uhr mit Zeitsyncronisation per NTP (um 23:05:10 Uhr)
  • OLED Anzeige bei Nutzung des WIFI Kit 8 Modul (bei Änderungen auch andere Displays möglich)
  • OLED Anzeige nicht star an einer Stelle, sondern übers Display wandern

Nicht hier mit enthalten:

  • Script des Servers (Target-Server)
  • grafische Darstellung
  • script für OTA
  • Datenbank Speichermodul (mysql)

Aufbau:

  • beim WIFI Kit 8 (oder andere Eingänge ohne pull-up Widerstand) muss zwischen D7 und +3,3V ein Widerstand 4,7k eingebaut werden
  • Sensor Pluspol (DS18B20) an +3,3V anschließen
  • Sensor Minuspol an Masse anschließen
  • 1-wire Leitung an D7 (WIFI Kit 8) anschließen (da wo der Widerstand angeschlossen ist)
  • Spannungsversorgung an den Stromanschluss (bei WIFI Kit 8 ein USB-Netzteil)

ESP-Module sind sehr gut hier beschrieben: http://stefanfrings.de/esp8266/

Tja... ich denke, das war es erstmal ;-) Fragen gerne hier im Forum stellen. Es kann aber ein paar Tage dauern, bis zur Antwort.

Gruß Peter

Angehängte Dateien:
OP #7358259
Lesenswert?

Wolle G. schrieb:

Für welche Anwendungen ist das Auslesen von 4x DS18B20 beispielsweise gedacht?

Na, das steht doch in der Beschreibung. Temperaturmessung von irgendetwas. Kann doch jeder selber entscheiden, was gemessen werden soll. Ich nutze das zurzeit für Außentemperaturen, Heizkessel, Heizkörper, Raumtemperatur oder einfach nur für eine Überwachung von irgendwelchen Temperaturen. Na klar kann man sich dafür auch ein fertiges Produkt kaufen... Hier geht es um individuelle Lösungen für Bastler und Nerds!

Gruß Peter

#7358263
Lesenswert?

Wolle G. schrieb:

Mal eine Frage: Für welche Anwendungen ist das Auslesen von 4x DS18B20 beispielsweise gedacht?

Bei mir überwintern die empfindlichen Fische im isolierten Großtank im Gartenhaus. Da will ich sicher sein, dass die Temperatur im Wasser, im Gartenhaus, im Filter stimmen und die Heizung (inkl. Verbrauch) auch bei Frost ordnungsgemäß arbeitet.

Allerdings baue ich dafür keine „Inseln“ und verwende eine Automatisierungslösung. Und auch die vorgeschlagenen fertigen Teile mit Tasmota und Co.

OP #7358279
Lesenswert?

Neumann schrieb:

Warum nur 4 sensoren? Machst du die graphik im server?

Ich denke 4 Sensoren sind erstmal ausreichend. Bei Erweiterung der Software sind bis zu 127 Sensoren möglich. Aber die Verkabelung könnte sich schwierig gestalten ;-) Die Grafik wird im Endgerät per js (Canvas) generiert. Der Server speichert nur die Daten inner SQL-Datenbank und liefert die an das Endgerät.

Gruß Peter

OP #7358296
Lesenswert?

so sieht das derzeit aus.

Im Schuppen habe ich auch dazu noch ein Relaismodul, welches bei Unterschreitung eines Schwellwertes die Heizung einschaltet, um den Schuppen Frostfrei zu halten. Allerdings kostet das Energie... bei den jetzigen Strompreisen :-O

Ich glaube... Videos sind hier nicht darstellbar :-O

Grus Peter

Angehängte Dateien:
#7358303
Lesenswert?

Peter R. schrieb:

Die Grafik wird im Endgerät per js (Canvas) generiert.

Ich mach die graphik direkt im esp8266 als .svg. Interessiert mich immer wie andere das machen. Daten länger als 24h kann meins nicht. Das mit mqtt und DB auf einem 24/7 server ist mir zu kompliziert.

Peter R. schrieb:

Videos sind hier nicht darstellbar

Das rumgehopse soll einbrennen verhindern?

Angehängte Dateien:
#7358348
Lesenswert?

Neumann schrieb:

Ich mach die graphik direkt im esp8266 als .svg. Interessiert mich immer wie andere das machen. Daten länger als 24h kann meins nicht. Das mit mqtt und DB auf einem 24/7 server ist mir zu kompliziert.

Ich mache das extern. Ich rufe mit einem Pico (aber auch über Ardunio programmiert, quasi das gleiche wie beim ESP) eine Webseite meines Servers auf und lasse dort die Daten schreiben:

1
if ((WiFiMulti.run() == WL_CONNECTED)) {
2
  HTTPClient http;
3
  SendSTR = "http://10.10.10.14/todb.php?SenID=1&typ=1&name='humi'&value=" + Humi;
4
  if (http.begin(SendSTR)) {  // HTTP
5
      int httpCode = http.GET();
6
      if (httpCode > 0) {
7
        Serial.printf("[HTTP] GET... code: %d\n", httpCode);
8
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
9
          String payload = http.getString();
10
          Serial.println(payload);
11
        }
12
      } else {
13
        Serial.printf("[HTTP] GET... failed, error: %s\n", http.errorToString(httpCode).c_str());
14
      }
15
      http.end();
16
    } else {
17
      Serial.printf("[HTTP} Unable to connect\n");
18
    }    
19
}

auf dem Webserver liegt dann die todb.php

1
<?php
2

3
    $servername = "Jaja";
4
    $username = "Jaja";
5
    $password = "Jaja";
6
    $dbname = "Jaja";   
7
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
8
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
9
    
10
    if(isset($_GET['SenID']) && isset($_GET['typ']) && isset($_GET['name']) && isset($_GET['value']))
11
    {
12
  $stmt = $pdo->prepare("
13
    INSERT INTO mqtt_data (SenID, typ, name, value) 
14
              VALUES (:SenID, :typ, :name, :value)
15
  ");
16
        $stmt->bindParam(':SenID',$_GET['SenID']);
17
        $stmt->bindParam(':typ',$_GET["typ"]);
18
    $stmt->bindParam(':name',$_GET["name"]);
19
        $stmt->bindParam(':value',$_GET["value"]);
20
      $stmt->execute();
21
  echo "OK";
22
    } else {
23
  echo "NOK";
24
    }
25
?>

Der Pico bekommt dann entweder OK oder NOK okay zurück, falls etwas mit der DB nicht stimmt.

Die Daten kann ich dann mit Grafana oder völlig wurst was auswerten.

P.s.: MQTT war mir auch völlig zu hoch und kompliziert für diese Anwendung.

#7358771
Lesenswert?

Peter R. schrieb:

Wolle G. schrieb:

Für welche Anwendungen ist das Auslesen von 4x DS18B20 beispielsweise gedacht?

Na, das steht doch in der Beschreibung. Temperaturmessung von irgendetwas. Kann doch jeder selber entscheiden, was gemessen werden soll. Ich nutze das zurzeit für Außentemperaturen, Heizkessel, Heizkörper, Raumtemperatur oder einfach nur für eine Überwachung von irgendwelchen Temperaturen.

Na ja, und ich dachte, es wäre eine besondere Anwendung. Da hatte und habe ich vermutlich Probleme bei der Deutung des Textes. Z.b. „Design für WIFI Kit 8“ oder „Target-Server einstellbar..“ oder …

Wenn ich es jetzt richtig verstanden habe, dann werden mittels eines ESP8266 4 Temperaturfühler DS18B20 ausgelesen und vermutlich die Werte abgespeichert. Oder was fehlt noch?

Bei mir sieht es z.B. so aus (Abtastzeit 8s): (max. Speicherzeitraum beträgt ca. 1 Jahr bei 8 Kanälen, ist noch erweiterbar)

Angehängte Dateien:
#7358828
Lesenswert?

Peter R. schrieb:

Ja ;-) OLED haben das Problem, das immer die gleiche Stelle zum nachlassen der Helligkeit von einzelnen Pixeln führen. Ob es was bringt, wird die Zukunft zeigen.

Man kann das OLED auch einfach ausschalten nun nur auf Knopfdruck kurz aktivieren. Zu 99,9% der Zeit interessiert sich keine Sau dafür. Die Zappelzahlen sind nerdig^3!

OP #7358836
Lesenswert?

Falk B. schrieb:

Zu 99,9% der Zeit interessiert sich keine Sau dafür. Die Zappelzahlen sind nerdig^3!

Ist auch eine Lösung ;-) Es gibt auf dem Board 2 Taster (WiFi Kit 8). Einen für Reset -> der ist nicht geeignet, und einem an GPOI 0 -> der wird zurzeit zum Reset des WiFi genutzt, aber wenn man den länger als 5s gedrückt hält. Also alles darunter Schaltet das Display an. In der Loop-Routine ist die Tasterabfrage schon eingebaut:

checkButton(); // set new SSID (WLAN Setup)

Ok, kann man so machen. Mich stört das Gezappel aber nicht ;-)

Gruß Peter

#7358853
Lesenswert?

Neumann schrieb:

Ich mach die graphik direkt im esp8266 als .svg. Interessiert mich immer wie andere das machen. Daten länger als 24h kann meins nicht. Das mit mqtt und DB auf einem 24/7 server ist mir zu kompliziert.

Ich musste / durfte schon ein paar mal Daten vom ESP visualisieren. Da es sich meist um längere Messungen handelte und ich mit einfachen Webanwendungen ganz gut klarkomme, war mein weg immer: ESP ruft Webserver mit Messdaten als URL Parameter auf, Webserver speichert Daten (meist in SQLite), die Darstellung dann mittels irgendeiner JavaScript Bibliothek.

Vorteile:

ESP muss nur Daten senden und kann danach wieder schlafen, wenn vom Server keine Erfolgsmeldung als Antwort kommt, sendet er nochmal (nie implementiert, aber könnte man)

Die Daten können vor der Darstellung auf dem Server bearbeitet werden, um zum Beispiel zusammengesetzte Messgrößen (Energie) darzustellen.

Datenmenge spielt quasi keine Rolle.

Nachteile:

Irgenein Server (PHP, Python, Node) mit fester IP (oder Domain) ist von Nöten, genauso, wie ein wenig Erfahrung mit den verwendeten Sprachen.

Hab irgendwo noch ein Repo auf github, falls das als Vorlage interessant sein könnte.

#7359959
Lesenswert?

Neumann schrieb:

Ist das die richtung für meinen openwrt $15 xiaomi 4C router? uHTTPD, SQLite und php?

PHP hat einen eigenen kleinen Server und SQLite integriert. Das sollte auch auf deinem Router funktionieren, aber:

Das ding hat keine sd-karte, müsste alles im ram speichern. NoGo?

Ja und warum?

Domain mit webspace und PHP kostet dich nichts bis 1-2€ im Monat.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren