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!

2.2.3 DHT-11

Einführung

In dieser Lektion lernen Sie, wie Sie einen DHT11 Temperatur- und Feuchtigkeitssensor mit einem Raspberry Pi verbinden und Daten davon ablesen. Sie werden erfahren, wie Sie den Sensor einrichten, die Temperatur sowohl in Celsius als auch in Fahrenheit ablesen und Feuchtigkeitsmessungen durchführen können. Dieses Projekt führt Sie in die Arbeit mit externen Sensoren, die Handhabung von Echtzeitdaten und die Grundlagen der Ausnahmebehandlung in Python ein.

Erforderliche Komponenten

Für dieses Projekt benötigen wir die folgenden Komponenten.

../_images/list_2.2.3_dht-11.png

Es ist definitiv praktisch, ein ganzes Kit zu kaufen, hier ist der Link:

Name

ARTIKEL IN DIESEM KIT

LINK

Raphael Kit

337

Raphael Kit

Sie können sie auch einzeln über die untenstehenden Links kaufen.

KOMPONENTENÜBERSICHT

KAUF-LINK

GPIO Extension Board

KAUFEN

Steckbrett

KAUFEN

Jumper-Kabel

KAUFEN

Widerstand

KAUFEN

Feuchtigkeits- und Temperatursensor Modul

KAUFEN

Schaltplan

../_images/image326.png

Experimentelle Verfahren

Schritt 1: Bauen Sie den Schaltkreis.

../_images/image207.png

Schritt 2: Gehen Sie zum Ordner des Codes.

cd ~/raphael-kit/python

Schritt 3: Führen Sie die ausführbare Datei aus.

sudo python3 2.2.3_DHT.py

Nachdem der Code ausgeführt wurde, wird das Programm die von DHT11 erkannte Temperatur und Feuchtigkeit auf dem Computerbildschirm anzeigen.

Code

Bemerkung

Sie können den untenstehenden Code modifizieren/zurücksetzen/kopieren/ausführen/stoppen. Aber bevor Sie das tun, müssen Sie zum Quellcodepfad wie raphael-kit/python gehen. Nachdem Sie den Code geändert haben, können Sie ihn direkt ausführen, um den Effekt zu sehen.

from gpiozero import OutputDevice, InputDevice
import time


class DHT11():
   MAX_DELAY_COUINT = 100
   BIT_1_DELAY_COUNT = 10
   BITS_LEN = 40

   def __init__(self, pin, pull_up=False):
      self._pin = pin
      self._pull_up = pull_up


   def read_data(self):
      bit_count = 0
      delay_count = 0
      bits = ""

      # -------------- send start --------------
      gpio = OutputDevice(self._pin)
      gpio.off()
      time.sleep(0.02)

      gpio.close()
      gpio = InputDevice(self._pin, pull_up=self._pull_up)

      # -------------- wait response --------------
      while gpio.value == 1:
            pass

      # -------------- read data --------------
      while bit_count < self.BITS_LEN:
            while gpio.value == 0:
               pass

            # st = time.time()
            while gpio.value == 1:
               delay_count += 1
               # break
               if delay_count > self.MAX_DELAY_COUINT:
                  break
            if delay_count > self.BIT_1_DELAY_COUNT:
               bits += "1"
            else:
               bits += "0"

            delay_count = 0
            bit_count += 1

      # -------------- verify --------------
      humidity_integer = int(bits[0:8], 2)
      humidity_decimal = int(bits[8:16], 2)
      temperature_integer = int(bits[16:24], 2)
      temperature_decimal = int(bits[24:32], 2)
      check_sum = int(bits[32:40], 2)

      _sum = humidity_integer + humidity_decimal + temperature_integer + temperature_decimal

      # print(bits)
      # print(humidity_integer, humidity_decimal, temperature_integer, temperature_decimal)
      # print(f'sum:{_sum}, check_sum:{check_sum}')
      # print()

      if check_sum != _sum:
            humidity = 0.0
            temperature = 0.0
      else:
            humidity = float(f'{humidity_integer}.{humidity_decimal}')
            temperature = float(f'{temperature_integer}.{temperature_decimal}')

      # -------------- return --------------
      return humidity, temperature


if __name__ == '__main__':
   dht11 = DHT11(17)
   while True:
      humidity, temperature = dht11.read_data()
      print(f"{time.time():.3f}  temperature:{temperature}°C  humidity: {humidity}%")
      time.sleep(2)

Code Erklärung

def read_data(self):
    bit_count = 0
    delay_count = 0
    bits = ""

    # -------------- send start --------------
    gpio = OutputDevice(self._pin)
    gpio.off()
    time.sleep(0.02)

    gpio.close()
    gpio = InputDevice(self._pin, pull_up=self._pull_up)
    #...

Diese Funktion wird verwendet, um die Funktionen von DHT11 zu implementieren. Es speichert die erkannten Daten im Array bits[] . DHT11 überträgt Daten von jeweils 40 Bit. Die ersten 16 Bits beziehen sich auf die Luftfeuchtigkeit, die mittleren 16 Bits auf die Temperatur und die letzten acht Bits werden zur Überprüfung verwendet. Das Datenformat ist:

8bit Feuchtigkeits-Integer-Daten + 8bit Feuchtigkeits-Dezimaldaten `` + ``8bit Temperatur-Integer-Daten + 8bit Temperatur-Dezimaldaten + 8bit Prüfbit .

Wenn die Gültigkeit über das Prüfbit erkannt wird, gibt die Funktion zwei Ergebnisse zurück: 1. Fehler; 2. Luftfeuchtigkeit und Temperatur.

_sum = humidity_integer + humidity_decimal + temperature_integer + temperature_decimal

if check_sum != _sum:
   humidity = 0.0
   temperature = 0.0
else:
   humidity = float(f'{humidity_integer}.{humidity_decimal}')
   temperature = float(f'{temperature_integer}.{temperature_decimal}')

Wenn die empfangenen Daten beispielsweise 00101011``(8-Bit-Wert der Feuchtigkeits-Ganzzahl) ``00000000 (8-Bit-Wert der Feuchtigkeits-Dezimalzahl) 00111100 (8-Bit-Wert der Temperatur-Ganzzahl) 00000000 (8-Bit-Wert der Temperatur-Dezimalzahl) 01100111 (Bit prüfen)

Berechnung:

00101011+00000000+00111100+00000000=01100111.

Wenn das Endergebnis den Prüfbitdaten entspricht, ist die Datenübertragung abnormal: return False.

Wenn das Endergebnis den Prüfbitdaten entspricht, sind die empfangenen Daten korrekt, dann werden humidity und temperature zurückgegeben und Humidity = 43% , Temperature = 60 °C ausgegeben.

Phänomen-Bild

../_images/image209.jpeg