Forum: Mikrocontroller und Digitale Elektronik ESP Temperaturmodul mit DS18B20 und Web-Ansicht


von Peter R. (peter_r689)


Angehängte Dateien:

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

: Bearbeitet durch User
von Benedikt L. (Firma: Dem Ben seine Leiche) (dembenseineleiche) Flattr this


Lesenswert?

Haste fein gemacht!
Mir gefällt das sehr gut! Auch mal was anderes als die generalitäten 
Tasmotar oder EspEasy!

von Wolle G. (wolleg)


Lesenswert?

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

von Peter R. (peter_r689)


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

von Uwe D. (monkye)


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.

von Neumann (mralfred)


Lesenswert?

Nett!

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

von Peter R. (peter_r689)


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

von Peter R. (peter_r689)


Angehängte Dateien:

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

: Bearbeitet durch User
von Neumann (mralfred)


Angehängte Dateien:

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?

von Peter R. (peter_r689)


Angehängte Dateien:

Lesenswert?

Neumann schrieb:
> Das rumgehopse soll einbrennen verhindern?

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.

Wenn man genug wartet, wird das Video auch angezeigt, bzw. kann man sich 
das runterladen.

Gruß Peter

: Bearbeitet durch User
von Rene K. (xdraconix)


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.

von Wolle G. (wolleg)


Angehängte Dateien:

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)

: Bearbeitet durch User
von Falk B. (falk)


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!

von Peter R. (peter_r689)


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

von Kolja L. (kolja82)


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.

von Neumann (mralfred)


Angehängte Dateien:

Lesenswert?

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

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

: Bearbeitet durch User
von Kolja L. (kolja82)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.