Sommario:

DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce: 14 passaggi
DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce: 14 passaggi

Video: DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce: 14 passaggi

Video: DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce: 14 passaggi
Video: ESP32 Tutorial - DHT11/DHT22 (Temperature and Humidity Sensor) 2024, Dicembre
Anonim
DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce
DHT12 (sensore di umidità e temperatura economico i2c), utilizzo facile e veloce

Puoi trovare aggiornamenti e altro sul mio sito

Mi piace il sensore che può essere utilizzato con 2 fili (protocollo i2c), ma adoro quello economico.

Questa è una libreria Arduino ed esp8266 per la serie DHT12 di sensori di temperatura/umidità a bassissimo costo (meno di 1$) che funzionano con i2c o connessione a un filo.

Molto utile se vuoi usare esp01 (se usi seriale hai solo 2 pin) per leggere umidità e temperatura e visualizzarla su i2c LCD.

AI letto che a volte sembra che necessiti di calibrazione, ma ho un albero di questo e ottengo un valore molto simile a DHT22. Se hai la calibrazione di questo problema, apri il problema su github e aggiungo l'implementazione.

Passaggio 1: come funziona I2c

Come funziona I2c
Come funziona I2c

I2C funziona con i suoi due fili, SDA (linea dati) e SCL (linea di clock).

Entrambe queste linee sono open-drain, ma sono tirate su con resistori.

Di solito c'è un master e uno o più slave sulla linea, anche se possono esserci più master, ma ne parleremo più avanti.

Sia i master che gli slave possono trasmettere o ricevere dati, quindi un dispositivo può trovarsi in uno di questi quattro stati: trasmissione master, ricezione master, trasmissione slave, ricezione slave.

Passaggio 2: libreria

Puoi trovare la mia libreria qui.

Scaricare

Fare clic sul pulsante DOWNLOAD nell'angolo in alto a destra, rinominare la cartella non compressa DHT12.

Verificare che la cartella DHT contenga DHT12.cpp e DHT12.h.

Posiziona la cartella della libreria DHT nella tua cartella /libraries/.

Potrebbe essere necessario creare la sottocartella delle librerie se è la tua prima libreria.

Riavvia l'IDE.

Passaggio 3: comportamento

Questa libreria cerca di emulare il comportamento dei sensori della libreria DHT standard (e copia molto codice), e aggiungo il codice per gestire anche i2c allo stesso modo.

Il metodo è lo stesso del sensore della libreria DHT, con alcune aggiunte come la funzione del punto di rugiada.

Passaggio 4: utilizzo di I2c

Da utilizzare con i2c (indirizzo predefinito e pin SDA SCL predefinito) il costruttore è:

DHT12 dht12;

e prendi il valore predefinito per il pin SDA SCL.

(È possibile ridefinire con il costruttore specificato per esp8266, necessario per ESP-01). o

DHT12 dht12(uint8_t addressOrPin)

indirizzoOPin -> indirizzo

per cambiare indirizzo.

Passaggio 5: utilizzo di un filo

Per utilizzare un filo:

DHT12 dht12(uint8_t addressOrPin, true)

indirizzoOPin -> pin

valore booleano è la selezione della modalità oneWire o i2c.

Passaggio 6: lettura implicita

Puoi usarlo con "implicit", "simple read" o "fullread": Implicit, solo la prima lettura esegue una lettura vera del sensore, l'altra lettura che diventa in 2sec. interval sono il valore memorizzato della prima lettura.

// La lettura del sensore ha 2 secondi di tempo trascorso, a meno che non si passi il parametro di forza

// Legge la temperatura come Celsius (impostazione predefinita) float t12 = dht12.readTemperature(); // Legge la temperatura come Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Le letture del sensore possono anche essere "vecchie" fino a 2 secondi (è un sensore molto lento) float h12 = dht12.readHumidity(); // Calcola l'indice di calore in Fahrenheit (predefinito) float hif12 = dht12.computeHeatIndex(f12, h12); // Calcola l'indice di calore in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Calcola il punto di rugiada in Fahrenheit (predefinito) float dpf12 = dht12.dewPoint(f12, h12); // Calcola il punto di rugiada in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Passaggio 7: lettura semplice

Lettura semplice per ottenere uno stato di lettura.

// La lettura del sensore ha 2 secondi di tempo trascorso, a meno che non si passi il parametro di forza

bool chk = dht12.read(); // la lettura vera è ok, problema di lettura falsa

// Legge la temperatura in gradi Celsius (impostazione predefinita)

float t12 = dht12.readTemperature(); // Legge la temperatura come Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Le letture del sensore possono anche essere "vecchie" fino a 2 secondi (è un sensore molto lento) float h12 = dht12.readHumidity(); // Calcola l'indice di calore in Fahrenheit (predefinito) float hif12 = dht12.computeHeatIndex(f12, h12); // Calcola l'indice di calore in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Calcola il punto di rugiada in Fahrenheit (predefinito) float dpf12 = dht12.dewPoint(f12, h12); // Calcola il punto di rugiada in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Passaggio 8: lettura completa

Lettura completa per ottenere uno stato specificato.

// La lettura del sensore ha 2 secondi di tempo trascorso, a meno che non si passi il parametro di forza

DHT12::ReadStatus chk = dht12.readStatus(); Serial.print(F("\nLeggi sensore: ")); switch (chk) { case DHT12::OK: Serial.println(F("OK")); rottura; case DHT12::ERROR_CHECKSUM: Serial.println(F("errore di checksum")); rottura; case DHT12::ERROR_TIMEOUT: Serial.println(F("Errore di timeout")); rottura; case DHT12::ERROR_TIMEOUT_LOW: Serial.println(F("Errore di timeout su segnale basso, prova a mettere un'alta resistenza di pullup")); rottura; case DHT12::ERROR_TIMEOUT_HIGH: Serial.println(F("Errore di timeout su segnale basso, prova a mettere una resistenza di pullup bassa")); rottura; case DHT12::ERROR_CONNECT: Serial.println(F("Errore di connessione")); rottura; case DHT12::ERROR_ACK_L: Serial.println(F("AckL error")); rottura; case DHT12::ERROR_ACK_H: Serial.println(F("AckH error")); rottura; case DHT12::ERROR_UNKNOWN: Serial.println(F("Errore sconosciuto RILEVATO")); rottura; case DHT12::NONE: Serial.println(F("Nessun risultato")); rottura; default: Serial.println(F("Errore sconosciuto")); rottura; }

// Legge la temperatura in gradi Celsius (impostazione predefinita)

float t12 = dht12.readTemperature(); // Legge la temperatura come Fahrenheit (isFahrenheit = true) float f12 = dht12.readTemperature(true); // Le letture del sensore possono anche essere "vecchie" fino a 2 secondi (è un sensore molto lento) float h12 = dht12.readHumidity(); // Calcola l'indice di calore in Fahrenheit (predefinito) float hif12 = dht12.computeHeatIndex(f12, h12); // Calcola l'indice di calore in Celsius (isFahreheit = false) float hic12 = dht12.computeHeatIndex(t12, h12, false); // Calcola il punto di rugiada in Fahrenheit (predefinito) float dpf12 = dht12.dewPoint(f12, h12); // Calcola il punto di rugiada in Celsius (isFahreheit = false) float dpc12 = dht12.dewPoint(t12, h12, false);

Passaggio 9: schema di collegamento

Con gli esempi, ci sono lo schema di collegamento, è importante utilizzare la resistenza di pullup corretta.

Grazie a Bobadas, dplasa e adafruit, per condividere il codice in github (dove prendo del codice e delle idee).

Passaggio 10: Arduino: OneWire

Arduino: OneWire
Arduino: OneWire

Passaggio 11: Arduino: I2c

Arduino: I2c
Arduino: I2c

Passaggio 12: Esp8266 (D1Mini) OneWire

Esp8266 (D1Mini) OneWire
Esp8266 (D1Mini) OneWire

Passaggio 13: Esp8266 (D1Mini) I2c

Esp8266 (D1Mini) I2c
Esp8266 (D1Mini) I2c

Passaggio 14: grazie

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

Serie di progetti i2c (Collezione):

  • Sensore di umidità della temperatura
  • Espansore analogico
  • Espansore digitale
  • Display LCD

Consigliato: