In diesem Beitrag möchte ich dir zeigen, wie du den digitalen Temperatursensor DS18B20 am ESP32 mit MicroPython programmierst.
Zunächst einmal zeige ich dir wie du den digitalen Temperatursensor mit dem ESP32 verbindest und danach wie du dir ein einfaches Programm schreibst und die Werte des Sensors auf der Konsole anzeigen lassen kannst.
Bezug eines DS18B20
Den Temperatursensor DS18B20 erhältst du in zwei Ausführungen (jedenfalls kenne ich diese beiden), zum einen als offenes Bauteil oder aber als vergossenes, wasserdichtes Gehäuse.
Sensor | ebay.de | amazon.de | aliexpress.com* | conrad.de | reichelt.de | elv.de |
---|---|---|---|---|---|---|
DS18B20, offenes Bauteil | 2,75€ | 4,87€ | 0,32€ | 4,82€ | 2.20€ | – |
DS18B20, wasserdichtes Gehäuse | 3,95€ | 3,82€ | 0,90€ | 7,13€ | 6,99€ | 5,95€ |
* Auf der Plattform aliexpress.com erhält man kleine Elektronikartikel sehr günstig jedoch muss man bei den Versandkosten aufpassen, diese können sehr stark variieren.
Für die Plattformen ebay.de sowie amazon.de habe ich dir passende Links zu den Suchen hinterlegt.
Technische Daten des Temperatursensors DS18B20
Den digitalen Temperatursensor habe ich bereits im Beitrag Arduino Lektion 48: Temperatursensor DS18B20 für den Arduino UNO vorgestellt, in diesem Beitrag verwende ich das gleiche Bauteil und somit ergeben sich auch folgende technische Daten:
- Betriebsspannung – 3.0V bis 5.5V
- Messbarer Temperaturbereich von -55°C bis +125°C
- Toleranz – ±0.5°C
- Auflösung des Thermometers von 9 bis 12bit
- jeder Sensor hat einen eindeutigen und einmaligen 64bit Code auf dem onboard ROM
Aufbau & Schaltung – ESP32 mit DS18B20
Der Temperatursensor DS18B20 verfügt über 3 Beinchen welche wie folgt belegt sind:
Für den Aufbau der Schaltung benötigst du:
- einen ESP32,
- einen digitalen Temperatursensor DS18B20,
- ein 4,7 kOhm Widerstand,
- drei Breadboardkabel,
- ein 400 Pin Breadboard
An Werkzeugen benötigst du ggf. nur einen Seitenschneider um die Beinchen des Widerstandes etwas zu kürzen, ansonsten werden alle Bauteile auf das Breadboard, lötfrei gesteckt.
Schaltung auf dem Breadboard
Programmieren des Temperatursensors DS18B20 am ESP32 mit MicroPython
from machine import Pin from onewire import OneWire from ds18x20 import DS18X20 from time import sleep #digitaler Temperatursensor DS18B20 am GPIO 4 angeschlossen pin = Pin(4) #erstellen eines Objektes zum Zugriff auf die / den Temperatursensor tempSensor = DS18X20(OneWire(pin)) #suchen der Sensoren sensors = tempSensor.scan() #ausgeben der Liste der gefundenen Sensoren print('gefundende(r) Sensor / Sensoren: ', len(sensors)) #Wenn min. 1 Sensor gefunden wurde dann... if(sensors): #Ausgabe der Tabellenüberschriften print("Sensor\t\t\t|Celsius\t|Fahrenheit\t|Kelvin") #eine Endlosschleife starten while True: #empfangen und umwandeln des Sensorwertes tempSensor.convert_temp() #eine kleine Pause von 0,5 Sekunden sleep(0.5) #Anzahl der Nachkommastellen für das runden der Temperaturwerte digits = 2 #Für jeden gefundenen Sensor mache... for sensor in sensors: #lesen und runden des Temperaturwertes in Grad Celsius tempCelsius = round(tempSensor.read_temp(sensor),digits) #berechnen des Temperaturwertes in Grad Fahrenheit aus Grad Celsius tempFahrenheit = round((tempCelsius * 9/5)+32,digits) #berechnen des Temperaturwertes in Grad Kelvin aus Grad Celsius tempKelvin = round(tempCelsius + 273.15, digits) #Ausgeben der Temperaturwerte print(sensor, "\t|", tempCelsius,"\t|", tempFahrenheit,"\t|", tempKelvin ) #eine kleine Pause von 2 Sekunden sleep(2) else: #Wenn keine Temperatursensoren vom Typ DS18B20 gefunden wurden dann soll eine Fehlermeldung ausgegeben werden. print("Es wurden keine Sensoren vom Typ DS18B20 gefunden!")
Das ist ja richtig einfach. Folgende Fragen noch dazu:
Kann man die Ausgabe auch in eine Datei umleiten (am besten durch Anhängen)?
Kann man auch Datum und Uhrzeit angeben?
Kann man das ganze Programm (etwa ab ’suchen der Sensoren‘ in einer Endlosschleife nach jeder Stunde – also 3600 sek) ablaufen lassen?
Danke
Hi Manfred,
dein kleines Projekt hört sich recht easy an (jedenfalls für mich, sorry).
Du benötigst dann entweder eine RealTimeClock DS3231 oder du nutzt die WiFi-Funktion
des ESP32 und holst dir den Zeitstempel von einem NTP-Server.
Um die Daten auf eine SD-Card zu schreiben, benötigst du ein entsprechendes Modul, diese gibt es
für beide Formfaktoren, welche jedoch gleichermaßen per SPI verbunden wird.
Gruß, Stefan