DS18B20 Temperatursensor am ESP8266 mit 2 AA Batterien verwenden

Veröffenticht am 09.02.2017    von     in der Kategorie ESP8266     bisher 8 Reaktionen    Zuletzt überarbeitet am 31.12.2018


ESP8266-12E Modul mit einem DS18B20 Sensor in einer Batteriehalterung Dieser Artikel befasst sich mit der Temperaturermittlung über einen DS18B20 Sensor an einem ESP8266 Modul. Zur Speicherung und weiteren Verwendung werden die Daten über einen Request an ein PHP-Skript übergeben und mit diesem in einer Datenbank gespeichert. Eine zukünftige Verwendung der Temperaturdaten könnte zum Beispiel wie im folgenden Video demonstriert, die Abfrage über ein Alexa Skill mittels eines Amazon Echo oder Echo Dot sein.

 

Projekt Demonstration

 

Bauteile

  • 1 ESP8266 Version 12E – ich habe mich für dieses Modell entschieden, da man diese Version im Gegensatz zur Version 01 in den Tiefschlaf versetzten kann. Gegen ein NodeMCU Board habe ich mich wegen der größeren Abmessung und den durch die Bauteile vorhandenen höheren Stromverbrauch entschieden.
  • 1 DS18B20 Temperatursensor
  • 2 Widerstände 10 Kiloohm
  • 1 Widerstand 4,7 Kiloohm
  • 1 BC 341 Batteriehalter – die einzelnen Kontakte lassen sich ohne großen Aufwand aus dem Gehäuse entfernen und gut für unsere Anforderungen anpassen.
  • diverse Kleinteile: Kupferdraht, Buchsenleiste, Lochrasterplatine

 

Anpassung Batteriehalter

  • Batteriebox im Lieferzustand

Aufbau

Neben der Stromversorgung des ESP8266 und des DS8266 über VCC und GND wird der Sensor an GPIO12 angeschlossen. Der 4,7 Kiloohm Widerstand wird zwischen der VCC- und der Datenleitung geschaltet.Die 10 Kiloohm Widerstände werden zwischen GPIO15 Port zu GND (Minus) und CH_PD, bei manchen Modellen auch EN zu VCC (Plus) geschaltet. Damit der Chip aus dem Tiefschlaf aufgeweckt werden kann, muss der Reset und GPIO16 Port verbunden werden.

 

 

Die fritzing Projektdatei habe ich für dich zum Download bereitgestellt.

 

Software

Die Programmierung des ESP8266 erfolgt über die Arduino IDE mit hinzugefügten ESP8266-Boardverwalter. Zur Ansteuerung bzw. dem Auslesen des Temperatursensors greife ich auf die auf GitHub veröffentlichte Bibliotheken <OneWire.h> und <DallasTemperature.h> zurück. Die beiden Bibliotheksordner müssen in den Ordner /libraries der Arduino IDE kopiert werden.

 

Programm

Anpassungen

Im Bereich //Konstantendefinition musst du deine Daten für NETZWERKNAME, WLAN-SCHLÜSSEL und IP-ODER-WEBADRESSE eintragen. Der Wert serverPort=80 muss eventuell auch angepasst werden. Der Dateiname für das aufgerufene PHP-Skript hinterlege ich erst im Bereich // Aufbau des URL-Request.

Die Befehle zur Ausgabe über die serielle Schnittstelle kann man entfernen. Zuvor solltest du im Bereich //Batteriespannung messen den Korrektur anpassen. Hierzu vergleiche den ausgegebenen Wert mit der tatsächlichen, von dir am Chip gemessenen Spannung.

 

Das PHP-Skript zur Speicherung in einer MySQL Datenbank könnte wie folgt aussehen.

 

Anmerkung zur Laufzeit

Mit den verwendeten 2700 mAH Akkus komme ich bei einer viertelstündigen Messung mit Datenübertragung auf eine Laufzeit von aktuell vier Tagen und 2 Stunden. Nicht gerade viel, allerdings kann man die Laufzeit bei entsprechender Verringerung der Messanzahl bzw. Verlängerung des Tiefschlafzyklus bestimmt etwas verlängern. Oder man wechselt auf eine andere Stromquelle (18650 Lithium-Ionen Akkus), wie ich es für ein anderes Projekt in Planung habe.

 

In diesem Beitrag verwende ich Affiliate Links zum Amazon Partnerprogramm. Für dich entstehen dadurch keine Mehrkosten.



Servus, ich bin Wolfgang.

Blogger – Maker – web & mobile Developer – Dobermann Besitzer.

Mit meinem über die Jahre gesammelten Wissen als Webworker möchte ich dir Hilfestellungen und Anregungen zur Nutzung der sich aus dem digital Lifestyle ergebenden Möglichkeiten und Notwendigkeiten geben.

Einen aktuellen Schwerpunkt auf meinem Blog bildet das Thema IoT im Zusammenspiel mit dem Raspberry Pi.


Unterstützen

Dieser Beitrag hat dir gefallen und konnte dir bei deinem Projekt oder Problem behilflich sein? Dann würde ich mich sehr freuen, wenn du dich mit einer noch so kleinen Spende erkenntlich zeigen möchtest.


Hinterlasse einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Notwendige Felder sind mit * markiert.

8 Reaktionen (6 Kommentare)

  • Gordon Lehmann schrieb am 4. Mai 2019:

    Erst einmal spitze Programmierung.
    Doch will die Arduino IDE den Code nicht akzeptieren.

    Code/

    Alexa-Temp-Abfrage:21:1: error: ‘WiFiClient’ does not name a type
    WiFiClient client;
    ^
    /Users/gordonlehmann/Documents/Arduino/Alexa-Temp-Abfrage/Alexa-Temp-Abfrage.ino: In function ‘void setup()’:
    Alexa-Temp-Abfrage:34:1: error: ‘WiFi’ was not declared in this scope
    WiFi.begin(ssid, pass);
    ^
    Alexa-Temp-Abfrage:37:25: error: ‘WL_CONNECTED’ was not declared in this scope
    while (WiFi.status() != WL_CONNECTED) {
    ^
    Alexa-Temp-Abfrage:45:22: error: ‘WL_CONNECTED’ was not declared in this scope
    if (WiFi.status() == WL_CONNECTED) {
    ^
    Alexa-Temp-Abfrage:58:6: error: ‘client’ was not declared in this scope
    if (!client.connect(serverIp, serverPort)) {
    ^
    Alexa-Temp-Abfrage:97:8: error: ‘Technik’ was not declared in this scope
    url += Technik;
    ^
    Alexa-Temp-Abfrage:105:1: error: ‘client’ was not declared in this scope
    client.print(String(“GET “) + url + ” HTTP/1.1\r\n” +
    ^
    exit status 1
    ‘WiFiClient’ does not name a type

    /Code

    Was läuft da falsch?
    Vllt ist der Fehler ja schon aufgefallen und es gibt eine Lösung.
    und wo packe ich die php Datei hin???

    Gruß Gordon

    • Wolfgang schrieb am 27. Mai 2019:

      Hallo Gordon,
      eventuell hat sich dein Problem schon gelöst. Leider komme ich erst heute zu einer Beantwortung deiner Frage. Die Fehlermeldung lässt eine fehlende Library vermuten. In der ersten Zeile bindest du die notwendige Library in das Programm ein #include . Damit die Einbindung möglich ist, musst du in der Arduino IDE den ESP8266 in die Boardverwaltung einbinden.
      Füge hierzu unter Datei->Voreinstellungen->Zusätzliche Boardverwalter-URLs folgenden Link ein:
      http://arduino.esp8266.com/stable/package_esp8266com_index.json
      Danach installierst du über den Boardverwalter, zu finden unter Tools->Board->Boardmanager, das ESP Paket.
      Danach müsste dein Problem im Programmcode behoben sein.

      Die PHP-Datei packst du auf Rechner / Server, der die Speicherung der enpfangenen Daten in der Datenbank übernimmt.
      Viele Grüße
      Wolfgang

  • Thomas schrieb am 1. Dezember 2018:

    Hallo,
    in der Fritzing Darstellung ist der DS18B20 nicht korrekt angeschlossen. Die Verbindung vom GPIO12 muss auf den Anschluss in der Mitte und nicht auf den rechten.
    Thomas

    • Wolfgang schrieb am 31. Dezember 2018:

      Hallo Thomas,
      vielen Dank für Deinen Hinweis. Da ist mir tatsächlich ein Fehler unterlaufen. Die Daten habe ich ausgetauscht.
      Viele Grüße
      Wolfgang

  • Rudi schrieb am 20. September 2018:

    ist an der kurzen Laufzeit der DS18B20 schuld? Ist die LED auf dem esp ausgelötet? Ich komme rechnerich auf ca. 300 Tage ohne den DS18DS20. Wenn der soviel braucht, dann muss ich mir was anderes einfallen lassen…

    • Wolfgang schrieb am 20. September 2018:

      Hallo Rudi,
      die meiste Energie geht für die WLAN-Verbindung drauf. Eine Verlängerung der Laufzeit kann man durch eine Verringerung der Messungen und deren Übertragung erreichen.
      Viele Grüße
      Wolfgang