Bemerkung
Hallo und willkommen in der SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasten-Gemeinschaft auf Facebook! Tauchen Sie tiefer ein in die Welt von Raspberry Pi, Arduino und ESP32 mit anderen Enthusiasten.
Warum beitreten?
Expertenunterstützung: Lösen Sie Nachverkaufsprobleme und technische Herausforderungen mit Hilfe unserer Gemeinschaft und unseres Teams.
Lernen & Teilen: Tauschen Sie Tipps und Anleitungen aus, um Ihre Fähigkeiten zu verbessern.
Exklusive Vorschauen: Erhalten Sie frühzeitigen Zugang zu neuen Produktankündigungen und exklusiven Einblicken.
Spezialrabatte: Genießen Sie exklusive Rabatte auf unsere neuesten Produkte.
Festliche Aktionen und Gewinnspiele: Nehmen Sie an Gewinnspielen und Feiertagsaktionen teil.
👉 Sind Sie bereit, mit uns zu erkunden und zu erschaffen? Klicken Sie auf [hier] und treten Sie heute bei!
Lektion 19: Temperatur- und Feuchtigkeitssensor-Modul (DHT11)
In dieser Lektion lernen Sie, wie Sie einen DHT11 Temperatur- und Feuchtigkeitssensor mit einem Raspberry Pi verbinden und Daten auslesen. Sie lernen, wie Sie den Sensor einrichten, die Temperatur in Celsius und Fahrenheit auslesen und Feuchtigkeitswerte erhalten. Dieses Projekt führt Sie in die Arbeit mit externen Sensoren, die Handhabung von Echtzeitdaten und grundlegendes Exception-Handling in Python ein.
Erforderliche Komponenten
In diesem Projekt benötigen wir die folgenden Komponenten.
Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:
Name |
ITEMS IN THIS KIT |
LINK |
|---|---|---|
Universal Maker Sensor Kit |
94 |
Sie können sie auch einzeln über die untenstehenden Links kaufen.
Component Introduction |
Purchase Link |
|---|---|
Raspberry Pi 5 |
|
Verkabelung
Bemerkung
Das Kit kann unterschiedliche Versionen des DHT11-Moduls enthalten. Bitte überprüfen Sie die Verdrahtungsmethode entsprechend dem Modul, das Sie haben.
Bibliothek installieren
Bemerkung
Die adafruit-circuitpython-dht-Bibliothek hängt von Blinka ab, stellen Sie also sicher, dass Blinka installiert ist. Um Bibliotheken zu installieren, siehe Installation von Adafruit_Blinka (CircuitPython) - Optional.
Bevor Sie die Bibliothek installieren, stellen Sie bitte sicher, dass die virtuelle Python-Umgebung aktiviert ist:
source ~/env/bin/activate
Installieren Sie die adafruit-circuitpython-dht-Bibliothek:
pip install adafruit-circuitpython-dht
Code
Bemerkung
Stellen Sie sicher, dass Sie die Python-Bibliothek installiert haben, die für die Ausführung des Codes gemäß den Schritten in „Bibliothek installieren“ erforderlich ist.
Bevor Sie den Code ausführen, stellen Sie bitte sicher, dass die virtuelle Python-Umgebung mit installiertem Blinka aktiviert ist. Sie können die virtuelle Umgebung mit einem Befehl wie diesem aktivieren:
source ~/env/bin/activate
Finden Sie den Code für diese Lektion im Verzeichnis
universal-maker-sensor-kit-main/pi/oder kopieren Sie den unten stehenden Code direkt und führen Sie ihn mit den folgenden Befehlen im Terminal aus:python 19_dht11_module.py
import time
import board
import adafruit_dht
# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT11(board.D17)
while True:
try:
# Print the values to the serial port
temperature_c = dhtDevice.temperature
temperature_f = temperature_c * (9 / 5) + 32
humidity = dhtDevice.humidity
print(
"Temp: {:.1f} F / {:.1f} C Humidity: {}% ".format(
temperature_f, temperature_c, humidity
)
)
except RuntimeError as error:
# Errors happen fairly often, DHT's are hard to read, just keep going
print(error.args[0])
time.sleep(2.0)
continue
except Exception as error:
dhtDevice.exit()
raise error
time.sleep(2.0)
Code-Analyse
Bibliotheken importieren:
Der Code beginnt mit dem Import der notwendigen Bibliotheken:
timefür die Verwaltung von Verzögerungen,boardfür den Zugriff auf die GPIO-Pins des Raspberry Pi undadafruit_dhtfür die Interaktion mit dem DHT11-Sensor. Weitere Details zuradafruit_dht-Bibliothek finden Sie unter adafruit/Adafruit_CircuitPython_DHT.import time import board import adafruit_dht
Initialisierung des Sensors:
Der DHT11-Sensor wird mit dem Datenpin an GPIO 17 des Raspberry Pi initialisiert. Diese Konfiguration ist entscheidend, damit der Sensor mit dem Raspberry Pi kommunizieren kann.
dhtDevice = adafruit_dht.DHT11(board.D17)
Lesen der Sensordaten in einer Schleife:
Die
while True-Schleife ermöglicht es dem Programm, kontinuierlich nach neuen Daten vom Sensor zu prüfen.while True:
Try-Except-Blöcke:
Innerhalb der Schleife wird ein Try-Except-Block verwendet, um potenzielle Laufzeitfehler zu behandeln. Das Lesen von DHT-Sensoren kann oft zu Fehlern führen, die auf Timing-Probleme oder Sensoreigenheiten zurückzuführen sind.
try: # Sensor data reading code here except RuntimeError as error: # Handling common sensor reading errors print(error.args[0]) time.sleep(2.0) continue except Exception as error: # Handling other exceptions and exiting dhtDevice.exit() raise error
Lesen und Ausgeben der Sensordaten:
Die Temperatur und die Luftfeuchtigkeit werden vom Sensor ausgelesen und in ein menschenlesbares Format umgewandelt. Die Temperatur wird auch von Celsius in Fahrenheit umgerechnet.
temperature_c = dhtDevice.temperature temperature_f = temperature_c * (9 / 5) + 32 humidity = dhtDevice.humidity print("Temp: {:.1f} F / {:.1f} C Humidity: {}% ".format(temperature_f, temperature_c, humidity))
Behandeln von Lesefehlern:
Der DHT11-Sensor kann oft Fehler zurückgeben, daher verwendet der Code einen Try-Except-Block, um diese zu behandeln. Wenn ein Fehler auftritt, wartet das Programm 2 Sekunden, bevor es erneut versucht, vom Sensor zu lesen.
except RuntimeError as error: print(error.args[0]) time.sleep(2.0) continue
Allgemeine Ausnahmebehandlung:
Andere auftretende Ausnahmen werden behandelt, indem der Sensor sicher beendet und der Fehler erneut ausgelöst wird. Dies stellt sicher, dass das Programm nicht in einem instabilen Zustand weiterläuft.
except Exception as error: dhtDevice.exit() raise error
Verzögerung zwischen den Messungen:
Am Ende der Schleife wird eine Verzögerung von 2 Sekunden hinzugefügt, um ein ständiges Abfragen des Sensors zu vermeiden, was zu fehlerhaften Messwerten führen kann.
time.sleep(2.0)