DHT12 (i2c billig fuktighets- og temperatursensor), rask enkel bruk: 14 trinn
DHT12 (i2c billig fuktighets- og temperatursensor), rask enkel bruk: 14 trinn
Anonim
DHT12 (i2c billig fuktighets- og temperatursensor), rask og enkel bruk
DHT12 (i2c billig fuktighets- og temperatursensor), rask og enkel bruk

Du kan finne oppdateringer og annet på nettstedet mitt

Jeg liker sensor som kan brukes med 2 -leder (i2c -protokoll), men jeg elsker den rimelige.

Dette er et Arduino- og esp8266 -bibliotek for DHT12 -serien med svært lave temperatur-/fuktighetssensorer (mindre enn 1 $) som fungerer med i2c eller en ledningstilkobling.

Veldig nyttig hvis du vil bruke esp01 (hvis du bruker seriell har du bare 2 pinner) for å lese fuktighet og temperatur og vise den på i2c LCD.

AI leste at det en gang ser ut til at det er behov for kalibrering, men jeg har et tre av dette og får mye lik DHT22. Hvis du har kalibrering av dette problemet, åpner du problemet på github, og jeg legger til implementering.

Trinn 1: Slik fungerer I2c

Slik fungerer I2c
Slik fungerer I2c

I2C fungerer med sine to ledninger, SDA (datalinje) og SCL (klokke linje).

Begge disse ledningene er åpne-drenering, men trekkes opp med motstander.

Vanligvis er det en mester og en eller flere slaver på linjen, selv om det kan være flere mestere, men vi snakker om det senere.

Både mestere og slaver kan overføre eller motta data, derfor kan en enhet befinne seg i en av disse fire tilstandene: masteroverføring, mastermottak, slaveoverføring, slavemottak.

Trinn 2: Bibliotek

Du finner biblioteket mitt her.

For å laste ned

Klikk på DOWNLOADS -knappen øverst til høyre, gi nytt navn til den ukomprimerte mappen DHT12.

Kontroller at DHT -mappen inneholder DHT12.cpp og DHT12.h.

Plasser DHT -biblioteksmappen din / biblioteker / mappe.

Du må kanskje opprette undermappen biblioteker hvis det er ditt første bibliotek.

Start IDE på nytt.

Trinn 3: Behaivor

Denne biblioteket prøver å etterligne oppførselen til standard DHT -bibliotekssensorer (og kopiere mye kode), og jeg legger til koden for å administrere i2c olso på samme måte.

Metoden er den samme som DHT -bibliotekssensor, med noen tillegg som duggpunktfunksjon.

Trinn 4: I2c -bruk

For å bruke med i2c (standardadresse og standard SDA SCL -pin) er konstruktøren:

DHT12 dht12;

og ta standardverdien for SDA SCL -pin.

(Det er mulig å omdefinere med spesifisert konstruktør for esp8266, nødvendig for ESP-01). eller

DHT12 dht12 (uint8_t addressOrPin)

addressOrPin -> adresse

for å endre adresse.

Trinn 5: Bruk av én tråd

Slik bruker du én ledning:

DHT12 dht12 (uint8_t addressOrPin, true)

addressOrPin -> pin

boolsk verdi er valget av oneWire- eller i2c -modus.

Trinn 6: Implisitt lesing

Du kan bruke den med "implisitt", "enkel lesing" eller "fullread": Implisitt, bare den første lesingen gjør en sann lesing av sensoren, den andre lesingen som blir på 2 sekunder. intervall er den lagrede verdien for første avlesning.

// Lesingen av sensoren har 2 sekunder med forløpt tid, med mindre du passerer kraftparameteren

// Les temperaturen som Celsius (standard) float t12 = dht12.readTemperature (); // Les temperaturen som Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensoravlesninger kan også være opptil 2 sekunder 'gamle' (det er en veldig treg sensor) flyte h12 = dht12.readHumidity (); // Beregn varmeindeks i Fahrenheit (standard) float hif12 = dht12.computeHeatIndex (f12, h12); // Beregn varmeindeks i Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Beregn duggpunkt i Fahrenheit (standard) float dpf12 = dht12.dewPoint (f12, h12); // Beregn duggpunkt i Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Trinn 7: Enkel lesing

Enkel lesing for å få statusen lese.

// Lesingen av sensoren har 2 sekunder med forløpt tid, med mindre du passerer kraftparameteren

bool chk = dht12.read (); // true read er ok, feil lese problem

// Les temperaturen som Celsius (standard)

float t12 = dht12.readTemperature (); // Les temperaturen som Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensoravlesninger kan også være opptil 2 sekunder 'gamle' (det er en veldig treg sensor) flyte h12 = dht12.readHumidity (); // Beregn varmeindeks i Fahrenheit (standard) float hif12 = dht12.computeHeatIndex (f12, h12); // Beregn varmeindeks i Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Beregn duggpunkt i Fahrenheit (standard) float dpf12 = dht12.dewPoint (f12, h12); // Beregn duggpunkt i Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Trinn 8: Full lest

Fullstendig lest for å få en spesifisert status.

// Lesingen av sensoren har 2 sekunder med forløpt tid, med mindre du passerer kraftparameteren

DHT12:: ReadStatus chk = dht12.readStatus (); Serial.print (F ("\ nLes sensor:")); switch (chk) {case DHT12:: OK: Serial.println (F ("OK")); gå i stykker; case DHT12:: ERROR_CHECKSUM: Serial.println (F ("Checksum -feil")); gå i stykker; sak DHT12:: ERROR_TIMEOUT: Serial.println (F ("Timeout error")); gå i stykker; case DHT12:: ERROR_TIMEOUT_LOW: Serial.println (F ("Timeout -feil på lavt signal, prøv å sette høy pullup -motstand")); gå i stykker; case DHT12:: ERROR_TIMEOUT_HIGH: Serial.println (F ("Timeout -feil på lavt signal, prøv å sette lav pullup -motstand")); gå i stykker; sak DHT12:: ERROR_CONNECT: Serial.println (F ("Tilkoblingsfeil")); gå i stykker; sak DHT12:: ERROR_ACK_L: Serial.println (F ("AckL -feil")); gå i stykker; sak DHT12:: ERROR_ACK_H: Serial.println (F ("AckH -feil")); gå i stykker; sak DHT12:: ERROR_UNKNOWN: Serial.println (F ("Ukjent feil DETEKTERT")); gå i stykker; sak DHT12:: INGEN: Serial.println (F ("Ingen resultat")); gå i stykker; standard: Serial.println (F ("Ukjent feil")); gå i stykker; }

// Les temperaturen som Celsius (standard)

float t12 = dht12.readTemperature (); // Les temperaturen som Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature (true); // Sensoravlesninger kan også være opptil 2 sekunder 'gamle' (det er en veldig sakte sensor) float h12 = dht12.readHumidity (); // Beregn varmeindeks i Fahrenheit (standard) float hif12 = dht12.computeHeatIndex (f12, h12); // Beregn varmeindeks i Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex (t12, h12, false); // Beregn duggpunkt i Fahrenheit (standard) float dpf12 = dht12.dewPoint (f12, h12); // Beregn duggpunkt i Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint (t12, h12, false);

Trinn 9: Tilkoblingsdiagram

Med eksempler er det tilkoblingsdiagrammet, det er viktig å bruke riktig pullup -motstand.

Takk til Bobadas, dplasa og adafruit, for å dele koden i github (hvor jeg tar litt kode og ideer).

Trinn 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Trinn 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Trinn 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Trinn 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Trinn 14: Takk

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

i2c -prosjektserie (samling):

  • Temperaturfuktighetssensor
  • Analog ekspander
  • Digital ekspander
  • LCD-skjerm

Anbefalt: