Cuprins:

DHT12 (senzor i2c de umiditate și temperatură ieftină), utilizare ușoară rapidă: 14 pași
DHT12 (senzor i2c de umiditate și temperatură ieftină), utilizare ușoară rapidă: 14 pași

Video: DHT12 (senzor i2c de umiditate și temperatură ieftină), utilizare ușoară rapidă: 14 pași

Video: DHT12 (senzor i2c de umiditate și temperatură ieftină), utilizare ușoară rapidă: 14 pași
Video: ESP32 Tutorial - DHT11/DHT22 (Temperature and Humidity Sensor) 2024, Noiembrie
Anonim
DHT12 (senzor de umiditate și temperatură i2c ieftin), utilizare ușoară rapidă
DHT12 (senzor de umiditate și temperatură i2c ieftin), utilizare ușoară rapidă

Puteți găsi actualizări și altele pe site-ul meu

Îmi place senzorul care poate fi utilizat cu 2 fire (protocol i2c), dar îl iubesc pe cel ieftin.

Aceasta este o bibliotecă Arduino și esp8266 pentru seria DHT12 de senzori de temperatură / umiditate foarte mici (mai puțin de 1 $) care funcționează cu i2c sau o conexiune cu un singur fir.

Foarte util dacă doriți să utilizați esp01 (dacă utilizați serial aveți doar 2 pini) pentru a citi umiditatea și temperatura și a le afișa pe LCD i2c.

AI a citit că uneori pare că este nevoie de calibrare, dar am arborele acestui și obțin o valoare foarte asemănătoare cu DHT22. Dacă aveți calibrarea acestei probleme, deschideți problema pe github și adaug implementarea.

Pasul 1: Cum funcționează I2c

Cum funcționează I2c
Cum funcționează I2c

I2C funcționează cu cele două fire, SDA (linia de date) și SCL (linia de ceas).

Ambele linii sunt deschise, dar sunt trase cu rezistențe.

De obicei, există un maestru și unul sau mai mulți sclavi pe linie, deși pot exista mai mulți maeștri, dar despre asta vom vorbi mai târziu.

Atât stăpânii, cât și sclavii pot transmite sau primi date, prin urmare, un dispozitiv poate fi în una dintre aceste patru stări: transmiterea master, recepția master, transmiterea slave, recepția slave.

Pasul 2: Biblioteca

Puteți găsi biblioteca mea aici.

A descărca

Faceți clic pe butonul DESCĂRCĂRI din colțul din dreapta sus, redenumiți folderul necomprimat DHT12.

Verificați dacă folderul DHT conține DHT12.cpp și DHT12.h.

Plasați folderul bibliotecă DHT / bibliotecile / folderul dvs.

Poate fi necesar să creați subfolderul bibliotecilor dacă este prima dvs. bibliotecă.

Reporniți IDE-ul.

Pasul 3: Comportament

Acest libray încearcă să imite comportamentul senzorilor de bibliotecă DHT standard (și să copieze o mulțime de cod) și adaug codul pentru a gestiona i2c și în același mod.

Metoda este aceeași cu senzorul bibliotecii DHT, cu unele adăugând funcția de punct de rouă.

Pasul 4: Utilizarea I2c

Pentru a utiliza cu i2c (adresa implicită și pinul SDL SCA implicit), constructorul este:

DHT12 dht12;

și luați valoarea implicită pentru pinul SDA SCL.

(Este posibil să se redefinească cu un controlor specificat pentru esp8266, necesar pentru ESP-01). sau

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> address

pentru a schimba adresa.

Pasul 5: utilizarea unui fir

Pentru a utiliza un fir:

DHT12 dht12 (uint8_t addressOrPin, true)

addressOrPin -> pin

valoarea booleană este selectarea modului oneWire sau i2c.

Pasul 6: citire implicită

Îl puteți folosi cu „implicit”, „citire simplă” sau „citire completă”: implicit, doar prima citire care face o citire adevărată a senzorului, cealaltă citire care devine în 2 secunde. interval sunt valoarea stocată a primei citiri.

// Citirea senzorului are 2 secunde de timp scurs, cu excepția cazului în care treceți parametrul forței

// Citiți temperatura ca Celsius (implicit) plutitor t12 = dht12.readTemperature (); // Citiți temperatura ca Fahrenheit (isFahrenheit = true) plutitor f12 = dht12.readTemperature (true); // Citirile senzorilor pot fi, de asemenea, de până la 2 secunde „vechi” (este un senzor foarte lent) plutitor h12 = dht12.readHumidity (); // Calculați indicele de căldură în Fahrenheit (implicit) float hif12 = dht12.computeHeatIndex (f12, h12); // Calculați indicele de căldură în Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calculați punctul de rouă în Fahrenheit (implicit) float dpf12 = dht12.dewPoint (f12, h12); // Calculați punctul de rouă în Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Pasul 7: Citire simplă

Citire simplă pentru a obține un statut de citire.

// Citirea senzorului are 2 secunde de timp scurs, cu excepția cazului în care treceți parametrul forței

bool chk = dht12.read (); // citirea adevărată este ok, problema de citire falsă

// Citiți temperatura în grade Celsius (implicit)

plutitor t12 = dht12.readTemperature (); // Citiți temperatura ca Fahrenheit (isFahrenheit = true) plutitor f12 = dht12.readTemperature (true); // Citirile senzorilor pot fi, de asemenea, de până la 2 secunde „vechi” (este un senzor foarte lent) plutitor h12 = dht12.readHumidity (); // Calculați indicele de căldură în Fahrenheit (implicit) float hif12 = dht12.computeHeatIndex (f12, h12); // Calculați indicele de căldură în Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calculați punctul de rouă în Fahrenheit (implicit) float dpf12 = dht12.dewPoint (f12, h12); // Calculați punctul de rouă în Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Pasul 8: Citire completă

Citire completă pentru a obține o stare specificată.

// Citirea senzorului are 2 secunde de timp scurs, cu excepția cazului în care treceți parametrul forței

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nCitește senzorul:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); pauză; caz DHT12:: ERROR_CHECKSUM: Serial.println (F ("Checksum error")); pauză; caz DHT12:: ERROR_TIMEOUT: Serial.println (F ("Timeout error")); pauză; caz DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Eroare de expirare la semnal scăzut, încercați să puneți rezistență ridicată la tragere")); pauză; caz DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Eroare de expirare la semnal scăzut, încercați să puneți rezistență scăzută la tragere")); pauză; caz DHT12:: ERROR_CONNECT: Serial.println (F ("Eroare conectare")); pauză; caz DHT12:: ERROR_ACK_L: Serial.println (F ("eroare AckL")); pauză; caz DHT12:: ERROR_ACK_H: Serial.println (F ("eroare AckH")); pauză; caz DHT12:: ERROR_UNKNOWN: Serial.println (F ("Eroare necunoscută DETECTATĂ")); pauză; caz DHT12:: NONE: Serial.println (F ("Fără rezultat")); pauză; implicit: Serial.println (F ("Eroare necunoscută")); pauză; }

// Citiți temperatura în grade Celsius (implicit)

plutitor t12 = dht12.readTemperature (); // Citiți temperatura ca Fahrenheit (isFahrenheit = true) plutitor f12 = dht12.readTemperature (true); // Citirile senzorilor pot fi, de asemenea, de până la 2 secunde „vechi” (este un senzor foarte lent) plutitor h12 = dht12.readHumidity (); // Calculați indicele de căldură în Fahrenheit (implicit) float hif12 = dht12.computeHeatIndex (f12, h12); // Calculați indicele de căldură în Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Calculați punctul de rouă în Fahrenheit (implicit) float dpf12 = dht12.dewPoint (f12, h12); // Calculați punctul de rouă în Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Pasul 9: Diagrama conexiunii

Cu exemple, există diagrama de conectare, este important să utilizați rezistență de tragere corectă.

Mulțumesc lui Bobadas, dplasa și adafruit, pentru a împărtăși codul în github (unde iau niște cod și idei).

Pasul 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Pasul 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Pasul 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Pasul 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Pasul 14: Mulțumesc

Loc de joacă Arduino (https://playground.arduino.cc/Main/DHT12SensorLibrary)

Seria de proiecte i2c (Colecție):

  • Senzor de umiditate a temperaturii
  • Expander analogic
  • Expander digital
  • Ecran LCD

Recomandat: