Inhaltsverzeichnis:

DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), schnelle einfache Bedienung - Gunook
DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), schnelle einfache Bedienung - Gunook

Video: DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), schnelle einfache Bedienung - Gunook

Video: DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), schnelle einfache Bedienung - Gunook
Video: #34 VINDRIKTNING | Modifying to the next level as Standalone / Home Assistant Connected Multi Sensor 2024, November
Anonim
DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), Schnelle und einfache Verwendung
DHT12 (i2c Günstiger Feuchtigkeits- und Temperatursensor), Schnelle und einfache Verwendung

Updates und anderes findet ihr auf meiner Seite

Ich mag einen Sensor, der mit 2 Drähten verwendet werden kann (i2c-Protokoll), aber ich liebe den preiswerten.

Dies ist eine Arduino- und esp8266-Bibliothek für die DHT12-Serie von sehr kostengünstigen Temperatur- / Feuchtigkeitssensoren (weniger als 1 $), die mit i2c oder einer Drahtverbindung arbeiten.

Sehr nützlich, wenn Sie esp01 verwenden möchten (wenn Sie seriell verwenden, haben Sie nur 2 Pins), um Luftfeuchtigkeit und Temperatur zu lesen und auf dem i2c-LCD anzuzeigen.

AI hat gelesen, dass manchmal eine Kalibrierung erforderlich ist, aber ich habe einen Baum davon und erhalte einen Wert, der dem von DHT22 sehr ähnlich ist. Wenn Sie dieses Problem kalibrieren haben, öffnen Sie das Problem auf github und ich füge die Implementierung hinzu.

Schritt 1: Wie I2c funktioniert

So funktioniert I2c
So funktioniert I2c

I2C arbeitet mit seinen zwei Drähten, SDA (Datenleitung) und SCL (Taktleitung).

Beide Leitungen sind Open-Drain, werden aber mit Widerständen hochgezogen.

Normalerweise gibt es einen Master und einen oder mehrere Slaves an der Leitung, obwohl es mehrere Master geben kann, aber darüber werden wir später sprechen.

Sowohl Master als auch Slaves können Daten senden oder empfangen, daher kann sich ein Gerät in einem dieser vier Zustände befinden: Master senden, Master empfangen, Slave senden, Slave empfangen.

Schritt 2: Bibliothek

Hier finden Sie meine Bibliothek.

Herunterladen

Klicken Sie oben rechts auf die Schaltfläche DOWNLOADS, benennen Sie den unkomprimierten Ordner DHT12 um.

Überprüfen Sie, ob der DHT-Ordner DHT12.cpp und DHT12.h enthält.

Platzieren Sie den DHT-Bibliotheksordner in Ihrem /libraries/-Ordner.

Möglicherweise müssen Sie den Unterordner Bibliotheken erstellen, wenn es sich um Ihre erste Bibliothek handelt.

Starten Sie die IDE neu.

Schritt 3: Verhalten

Diese Bibliothek versucht, das Verhalten von Standard-DHT-Bibliothekssensoren zu emulieren (und eine Menge Code zu kopieren), und ich füge den Code hinzu, um i2c auf dieselbe Weise zu verwalten.

Die Methode ist die gleiche wie beim DHT-Bibliothekssensor, wobei einige wie die Taupunktfunktion hinzugefügt werden.

Schritt 4: I2c-Nutzung

Zur Verwendung mit i2c (Standardadresse und Standard-SDA-SCL-Pin) lautet der Konstruktor:

DHT12 dht12;

und nehmen Sie den Standardwert für den SDA-SCL-Pin.

(Es ist möglich, mit dem angegebenen Konstruktor für esp8266 neu zu definieren, das für ESP-01 benötigt wird). oder

DHT12 dht12(uint8_t AdresseOrPin)

AdresseOrPin -> Adresse

Adresse zu ändern.

Schritt 5: Ein-Draht-Nutzung

So verwenden Sie einen Draht:

DHT12 dht12(uint8_t addressOrPin, true)

AdresseOrPin -> Pin

boolescher Wert ist die Auswahl des oneWire- oder i2c-Modus.

Schritt 6: Implizites Lesen

Sie können es mit "implizit", "simple read" oder "fullread" verwenden: Implizit, nur der erste Read führt einen echten Read des Sensors durch, der andere Read, der in 2 Sekunden erfolgt. Intervall sind der gespeicherte Wert des ersten Lesevorgangs.

// Das Lesen des Sensors hat 2 Sekunden verstrichene Zeit, es sei denn, Sie übergeben den Force-Parameter

// Temperatur als Celsius lesen (Standard) float t12 = dht12.readTemperature (); // Temperatur als Fahrenheit lesen (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormesswerte können auch bis zu 2 Sekunden alt sein (es ist ein sehr langsamer Sensor) float h12 = dht12.readHumidity (); // Wärmeindex in Fahrenheit berechnen (Standard) float hif12 = dht12.computeHeatIndex(f12, h12); // Wärmeindex in Celsius berechnen (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Taupunkt in Fahrenheit berechnen (Standard) float dpf12 = dht12.dewPoint(f12, h12); // Taupunkt in Celsius berechnen (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Schritt 7: Einfaches Lesen

Einfaches Lesen, um einen Lesestatus zu erhalten.

// Das Lesen des Sensors hat 2 Sekunden verstrichene Zeit, es sei denn, Sie übergeben den Force-Parameter

bool chk = dht12.read(); // True Read ist ok, False Read Problem

// Temperatur als Celsius lesen (Standard)

float t12 = dht12.readTemperature(); // Temperatur als Fahrenheit lesen (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormesswerte können auch bis zu 2 Sekunden alt sein (es ist ein sehr langsamer Sensor) float h12 = dht12.readHumidity (); // Wärmeindex in Fahrenheit berechnen (Standard) float hif12 = dht12.computeHeatIndex(f12, h12); // Wärmeindex in Celsius berechnen (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Taupunkt in Fahrenheit berechnen (Standard) float dpf12 = dht12.dewPoint(f12, h12); // Taupunkt in Celsius berechnen (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Schritt 8: Vollständiges Lesen

Vollständiger Lesevorgang, um einen bestimmten Status abzurufen.

// Das Lesen des Sensors hat 2 Sekunden verstrichene Zeit, es sei denn, Sie übergeben den Force-Parameter

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print (F("\nSensor lesen: ")); Schalter (chk) { Fall DHT12::OK: Serial.println (F ("OK")); brechen; Fall DHT12::ERROR_CHECKSUM: Serial.println(F("Prüfsummenfehler")); brechen; Fall DHT12::ERROR_TIMEOUT: Serial.println(F("Timeout-Fehler")); brechen; Fall DHT12::ERROR_TIMEOUT_LOW: Serial.println (F ("Timeout-Fehler bei niedrigem Signal, versuchen Sie einen hohen Pullup-Widerstand")); brechen; Fall DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("Timeout-Fehler bei niedrigem Signal, versuchen Sie einen niedrigen Pullup-Widerstand zu setzen")); brechen; Fall DHT12::ERROR_CONNECT: Serial.println(F("Verbindungsfehler")); brechen; Fall DHT12::ERROR_ACK_L: Serial.println(F("AckL-Fehler")); brechen; Fall DHT12::ERROR_ACK_H: Serial.println(F("AckH-Fehler")); brechen; Fall DHT12::ERROR_UNKNOWN: Serial.println(F("Unbekannter Fehler DETECTED")); brechen; Fall DHT12::NONE: Serial.println (F ("Kein Ergebnis")); brechen; Standard: Serial.println (F ("Unbekannter Fehler")); brechen; }

// Temperatur als Celsius lesen (Standard)

float t12 = dht12.readTemperature(); // Temperatur als Fahrenheit lesen (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensormesswerte können auch bis zu 2 Sekunden alt sein (es ist ein sehr langsamer Sensor) float h12 = dht12.readHumidity (); // Wärmeindex in Fahrenheit berechnen (Standard) float hif12 = dht12.computeHeatIndex(f12, h12); // Wärmeindex in Celsius berechnen (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Taupunkt in Fahrenheit berechnen (Standard) float dpf12 = dht12.dewPoint(f12, h12); // Taupunkt in Celsius berechnen (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Schritt 9: Anschlussdiagramm

Mit Beispielen gibt es den Anschlussplan, es ist wichtig, den richtigen Pullup-Widerstand zu verwenden.

Danke an Bobadas, dplasa und adafruit, um den Code in github zu teilen (wo ich Code und Ideen nehme).

Schritt 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Schritt 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Schritt 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Schritt 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Schritt 14: Danke

Arduino-Spielplatz (https://playground.arduino.cc/Main/DHT12SensorLibrary)

i2c-Projektreihe (Sammlung):

  • Temperatur-Feuchtesensor
  • Analoger Expander
  • Digitaler Expander
  • LCD Bildschirm

Empfohlen: