Bemerkung
Hallo, willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Community auf Facebook! Tauchen Sie mit anderen Enthusiasten tiefer in Raspberry Pi, Arduino und ESP32 ein.
Warum beitreten?
Expertenunterstützung: Lösen Sie Probleme nach dem Kauf und technische Herausforderungen mit Hilfe unserer Community und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Tutorials aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und Sneak Peeks.
Sonderrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Bereit, mit uns zu entdecken und zu gestalten? Klicken Sie auf [here] und treten Sie noch heute bei!
2.14 DHT-11
Einführung
In dieser Lektion lernen Sie, wie Sie einen DHT11-Temperatur- und Luftfeuchtigkeitssensor mit einem Raspberry Pi verbinden und Daten daraus auslesen. Der DHT11 ist ein zuverlässiger und kostengünstiger digitaler Sensor, der in verschiedenen Anwendungen eingesetzt wird, beispielsweise in der Wetterüberwachung und der Umweltkontrolle. Dieses Projekt führt Sie in die Anbindung externer Sensoren, den Umgang mit Echtzeitdaten sowie die grundlegende Ausnahmebehandlung in Python ein. Am Ende wissen Sie, wie Sie Temperaturwerte (sowohl in Celsius als auch in Fahrenheit) und Luftfeuchtigkeitswerte auslesen können.
Was Sie benötigen
Hier sind die für dieses Projekt erforderlichen Komponenten:
KOMPONENTENBESCHREIBUNG |
KAUFLINK |
|---|---|
- |
|
Raspberry Pi |
- |
Schaltplan
Nachfolgend ist der schematische Schaltplan für den Anschluss des DHT11-Sensors dargestellt:
Verdrahtungsdiagramm
Bauen Sie die Schaltung wie im folgenden Verdrahtungsdiagramm dargestellt auf:
Ausführen des Beispiels
Der gesamte in diesem Tutorial verwendete Beispielcode befindet sich im Verzeichnis ai-lab-kit.
Führen Sie die folgenden Schritte aus, um das Beispiel auszuführen:
cd ~/ai-lab-kit/python/
sudo python3 2.14_DHT.py
Dieses Python-Skript liest Temperatur- und Luftfeuchtigkeitsdaten von einem DHT11-Sensor, der über GPIO-Pin 17 mit einem Fusion HAT+ verbunden ist. Bei der Ausführung:
Die Daten werden jede Sekunde in der Konsole ausgegeben und liefern so Echtzeitaktualisierungen.
Wenn das Auslesen der Daten nicht erfolgreich ist, gibt das Skript „time out“ aus, was auf einen Fehler beim Lesen der Sensordaten hinweist.
Code
Nachfolgend ist der in diesem Projekt verwendete Python-Code aufgeführt:
# Import the DHT11 temperature & humidity sensor module
from fusion_hat.modules import DHT11
# Import sleep function for delays
from time import sleep
# Create a DHT11 sensor object on GPIO pin 17
dht11 = DHT11(pin=17)
# Loop forever
while True:
# Read data from the DHT11 sensor
result = dht11.read()
# If data was successfully read, unpack humidity and temperature
if result:
humidity, temperature = result
# Print the humidity and temperature values
print("humidity: %s %%, Temperature: %s C" % (humidity, temperature))
else:
# Print timeout message if reading failed
print("time out")
# Wait 1 second before the next reading
sleep(1)
Code verstehen
Import:
# Import the DHT11 temperature & humidity sensor module from fusion_hat.modules import DHT11 # Import sleep function for delays from time import sleep
Diese Zeilen importieren die für das Skript erforderlichen Module.
Sensorinitialisierung:
dht11 = DHT11(pin=17)
Diese Zeile initialisiert den DHT11-Sensor am GPIO-Pin 17.
Daten auslesen:
while True: result = dht11.read() if result: humidity, temperature = result print ("humidity: %s %%, Temperature: %s C`" % (humidity, temperature)) else: print("time out") sleep(1)
Die Methode
readsendet ein Startsignal an den DHT11, um Temperatur- und Luftfeuchtigkeitsdaten zu erfassen.
Fehlerbehebung
Keine Ausgabe oder dauerhaft 0.0°C und 0.0 % Werte:
Ursache: Probleme mit der Sensorverbindung.
Lösung: Stellen Sie sicher, dass der DHT11-Sensor korrekt mit GPIO-Pin 17, der Stromversorgung und der Masse verbunden ist.
Skript stürzt mit ValueError ab:
Ursache: Beschädigte oder unvollständige Sensordaten.
Lösung: Überprüfen Sie, ob die Verbindungen stabil sind und ob der DHT11 ordnungsgemäß funktioniert. Stellen Sie außerdem sicher, dass die Datenleitung keine Störungen aufweist oder frei schwebt.
Hohe CPU-Auslastung:
Ursache: Kontinuierliches Abfragen des GPIO-Pins ohne Verzögerungen.
Lösung: Der Code enthält bereits eingebaute Verzögerungen (z. B.
time.sleep(2)). Stellen Sie sicher, dass diese nicht entfernt werden.
Falsche Temperatur- oder Luftfeuchtigkeitswerte:
Ursache: Kalibrierungsproblem oder defekter Sensor.
Lösung: Testen Sie den DHT11 in einer kontrollierten Umgebung, um die Genauigkeit zu überprüfen. Ersetzen Sie den Sensor, wenn das Problem weiterhin besteht.
Skript beendet sich nicht ordnungsgemäß:
Ursache: Dem Skript fehlt eine geeignete Ausnahmebehandlung für manuelle Unterbrechungen.
Lösung: Um eine saubere Beendigung zu ermöglichen, kapseln Sie die Hauptschleife in einen
try...except KeyboardInterrupt-Block.
try: while True: humidity, temperature = dht11.read() print(f"{time.time():.3f} Temperature: {temperature}°C Humidity: {humidity}%") time.sleep(2) except KeyboardInterrupt: print("Exiting gracefully...")
Erweiterungsideen
Datenprotokollierung: Speichern Sie Temperatur- und Luftfeuchtigkeitsmesswerte zur späteren Analyse in einer Datei:
with open("dht11_log.txt", "a") as log_file: log_file.write(f"{time.time():.3f}, {temperature}°C, {humidity}%\n")
Schwellwertbasierte Warnungen: Lösen Sie eine Warnung aus, wenn Temperatur oder Luftfeuchtigkeit bestimmte Grenzwerte überschreiten:
if temperature > 30: print("Warning: High temperature!") if humidity > 70: print("Warning: High humidity!")
Fazit
Dieses Projekt zeigt, wie Sie mit einem Fusion HAT+ auf den DHT11-Temperatur- und Luftfeuchtigkeitssensor zugreifen können. Wenn Sie verstehen, wie Sensordaten gelesen und verarbeitet werden, können Sie solche Sensoren in verschiedenste praktische Anwendungen integrieren – von Wetterstationen bis hin zu automatisierten Klimasteuerungssystemen.