ESP32 Temperatur messen

z.B. WebServer, Docker, VirtualBox, VMware, Azure, etc.
Antworten
Benutzeravatar
asp
Site Admin
Beiträge: 64
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

ESP32 Temperatur messen

Beitrag von asp »

Die Temperatur misst man am besten mit einem DS18B20
DS18B20-2.jpg
DS18B20-2.jpg (3.38 KiB) 10414 mal betrachtet
Der DS18B20 ist ein digitaler Temperatursensor mit einer einstellbaren Auflösung von 9-12bit und eine Messgenauigkeit von ±0.5°C im Bereich von -10°C bis +85°C. Am besten versorgt man den Sensor mit 5V. Dann benötigt man noch einen Pull-Up Widerstand von 4,7K Ohm zwischen 5V und GND. Die Datenleitung zum ESP32
ESP32-USB.jpg
ESP32-USB.jpg (32.56 KiB) 10405 mal betrachtet
schliesst man an D4 (GIOP4) an.
tmperatur.jpg
tmperatur.jpg (33.61 KiB) 10334 mal betrachtet
Dieses Micro-Python-Programm erkennt wie viele Sensoren angeschlossen sind und gibt die Temperatur im Terminal aus.

Code: Alles auswählen

from machine import Pin
import onewire
import ds18x20
import time

# DS18B20 an GPIO 4 (D4) initialisieren
datapin = Pin(4)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(datapin))

# Sensoren suchen
roms = ds_sensor.scan()
print('Gefundene DS18B20 Sensoren:', roms)

def read_temperature():
    try:
        ds_sensor.convert_temp()
        time.sleep_ms(750)  # Warten auf Messung
        for rom in roms:
            temp = ds_sensor.read_temp(rom)
            return temp
    except Exception as e:
        print('Fehler beim Auslesen:', e)
        return None

# Dauerschleife
while True:
    temperature = read_temperature()
    if temperature is not None:
        print('Temperatur: {:.2f}°C'.format(temperature))
    else:
        print('Fehler beim Auslesen der Temperatur')
    
    time.sleep(2)

Benutzeravatar
asp
Site Admin
Beiträge: 64
Registriert: 22 Feb 2025, 19:44
Wohnort: Lohn-Ammannsegg
Kontaktdaten:

Re: ESP32 Temperatursensor DS18B20

Beitrag von asp »

Screenshot_2025-10-22_12-23-15.jpg
Screenshot_2025-10-22_12-23-15.jpg (7.35 KiB) 10249 mal betrachtet
Ich arbeite gerne mit Klassen welche ich mit Thonny auf dem ESO32-Board speichere und dann einfach aufrufe:
PS: DS1820=9Bit, DS18B20=9..12Bit Auflösung


Ich nenne die Klasse DS18B20_temp_class.py

Code: Alles auswählen

from machine import Pin
import onewire
import ds18x20
import time

class DS18B20:
    def __init__(self, pin_num=4):
        self.datapin = Pin(pin_num)
        self.ds_sensor = ds18x20.DS18X20(onewire.OneWire(self.datapin))
        self.roms = self.ds_sensor.scan()
        print(f"Gefundene Sensoren: {self.roms}")
    
    def read_temp(self):
        try:
            self.ds_sensor.convert_temp()
            time.sleep_ms(750)
            temperatures = []
            for rom in self.roms:
                temp = self.ds_sensor.read_temp(rom)
                temperatures.append(temp)
            return temperatures
        except Exception as e:
            print('Fehler:', e)
            return None

und das Programm in welchem ich die Klasse aufrufe

Code: Alles auswählen

from DS18B20_temp_class import DS18B20
import time

# Verwendung
sensor = DS18B20(4) # Sensor instanzieren

while True:
    temps = sensor.read_temp() # Temperatur messen
    if temps:
        for i, temp in enumerate(temps):
            print(f'Sensor {i}: {temp:.1f}°C') # und formatiert ausgeben
    time.sleep(2) # im 2 Sekunden Takt
PS. Am gleichen Bus können auch mehrere Sensoren parallel angeschlossen werden.
Antworten