WeMos D1 mini DHT22 ti mostra come usare il sensore di temperatura DHT22 con l’ESP8266.
Il web è ricco di informazioni sul sensore di temperatura ed umidità DHT22 e, forse, solo io non lo avevo ancora trattato tra i molti sensori in mio possesso.
Puoi associare il DHT22 a tanti microcontrollori e l’uso con la WeMos si ricollega alla serie di articoli che sto dedicando a questa board:
Ringrazio l’amico catoplepa che hoa pubblicato un ottimo tutorial sull’utilizzo del DHT22 con l’ESP8266: http://www.instructables.com/id/ESP8266-12-blynk-wireless-temperature-e-humidity-D-1/
Realizzazione della WeMos Shield DHT22
Ho realizzato la shield dht22 per la WeMos partendo dallo schema di base ed una proto shield per wemos d1:
in modo da ottenere un circuito di monitoraggio temperatura e umidità basato su questo sensore AM2302 o meglio noto come DHT22.
Libreria per il DHT22 by Adafruit
Le librerie per il DHT22 che puoi utilizzare con l’IDE arduino, ed i micro controllori supportati, sono ufficialmente tre, ad oggi:
ed ho scelto di utilizzare la prima perché ha due specifiche interessanti:
- la prima motivazione è che è stata scritta e resa pubblica da Adafruit ( Lady Ada );
- la seconda è che è compatibile non solo con il DHT22 ma anche con il DHT11 e DHT21;
clicca sul pulsante di installazione della prima libreria ed otterrai l’installazione come da procedura guidata dell’IDE Arduino:
Come primo test esegui uno degli esempi presenti nella libreria: DHTtester
WeMos D1 mini DHT22 sketch
L’esempio DHTtester rilasciato con la libreria ti permette di leggere i dati di temperatura e umidità dal sensore e di visualizzarli sul monitor seriale del WeMos D1 mini DHT22.
Ecco lo sketch:
// Example testing sketch for various DHT humidity/temperature sensors // Written by ladyada, public domain #include "DHT.h" #define DHTPIN 2 // what digital pin we're connected to // Uncomment whatever type you're using! //#define DHTTYPE DHT11 // DHT 11 #define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321 //#define DHTTYPE DHT21 // DHT 21 (AM2301) // Connect pin 1 (on the left) of the sensor to +5V // NOTE: If using a board with 3.3V logic like an Arduino Due connect pin 1 // to 3.3V instead of 5V! // Connect pin 2 of the sensor to whatever your DHTPIN is // Connect pin 4 (on the right) of the sensor to GROUND // Connect a 10K resistor from pin 2 (data) to pin 1 (power) of the sensor // Initialize DHT sensor. // Note that older versions of this library took an optional // third parameter to tweak the timings for faster processors. // This parameter is no longer needed as the current DHT reading // algorithm adjusts itself to work on faster procs. DHT dht(DHTPIN, DHTTYPE); void setup() { Serial.begin(9600); Serial.println("DHTxx test!"); dht.begin(); } void loop() { // Wait a few seconds between measurements. delay(2000); // Reading temperature or humidity takes about 250 milliseconds! // Sensor readings may also be up to 2 seconds 'old' // (its a very slow sensor) float h = dht.readHumidity(); // Read temperature as Celsius (the default) float t = dht.readTemperature(); // Read temperature as Fahrenheit (isFahrenheit = true) float f = dht.readTemperature(true); // Check if any reads failed and exit early (to try again). if (isnan(h) || isnan(t) || isnan(f)) { Serial.println("Failed to read from DHT sensor!"); return; } // Compute heat index in Fahrenheit (the default) float hif = dht.computeHeatIndex(f, h); // Compute heat index in Celsius (isFahreheit = false) float hic = dht.computeHeatIndex(t, h, false); Serial.print("Humidity: "); Serial.print(h); Serial.print(" %\t"); Serial.print("Temperature: "); Serial.print(t); Serial.print(" *C "); Serial.print(f); Serial.print(" *F\t"); Serial.print("Heat index: "); Serial.print(hic); Serial.print(" *C "); Serial.print(hif); Serial.println(" *F"); }
la linea 04: include la libreria DHT.h di Adafruit;
le linea 06: definisci il pin a cui è collegato il DHT22, nello schema sopra hai letto D4 e secondo questa immagine che io stesso ho pubblicato qualche mese fa:
il pin D4 corrisponde al pin 2 nell’IDE arduino;
linea 10: togli il commento al tipo di sensore che desideri interrogare;
linea 25: instanzia l’oggetto dht passandole sia il pin a cui il sensore è connesso sia il tipo di sensore;
linea 31: inizializza l’oggetto dht usando il metodo begin() della libreria;
linea 36: prima di avviare ogni ciclo imponi un delay() di 2sec;
linea 41: leggi il valore di umidità relativa usando il metodo readHumidity() della libreria;
linea 43: leggi il valore di temperatura usando il metodo readTemperature() della libreria;
linea 45: leggi il valore di temperatura in Fahrenheit usando il parametro true passato al metodo readTemperature(true);
linee 48-51: se uno dei tre valori rilevati alle linee 41-45 scrivi sul monitor seriale la frase: “Failed to read from DHT sensor!” ed esce dalla funzione loop() con un return;
linea 54: interroga la libreria DHT.h passandole il valore di umidità e temperatura attraverso il metodo computeHeatIndex(f, h) per ottenere il valore di temperatura percepita in funzione dei due valori passati;
linea 56: interroga il metodo computeHeatIndex(f, h, false) passando un ulteriore terzo parametro false che indica alla funzione di restituire il valore in Fahrenheit;
linee 58-70: scrivi sul monitor seriale i valori letti sul sensore, otterrai un risultato simile al seguente:
in cui sono visualizzati i dati rilevati dal WeMos D1 mini DHT22.
6 commenti
Vai al modulo dei commenti
Ciao Mauro, scusami se ti disturbo, ma sto cercando di comunicare via serial3 dei dati;
Sto utilizzando una scheda Mega 2560 + WEMOS D1 R2 + wifi + ESP8266
sul lato ESP8266 ho giusto 2 righe di codice per un serverweb, mentre sul lato ATMEGA, gira un sketch dove ho collegato dei sensori, e io vorrei inviare tramite la serial3, dei dati al ESP8266, per poi recuperarli da web.
Per caso mi potresti aiutare, perchè non so come fare!!
Grazie
Autore
Ciao Lorenzo,
mi sembra alquanto complesso quello che desideri fare, mi racconti meglio l’esigenza che ti porta a complicarti con tutti questi strati ?
Non puoi usare direttamene la WeMos per fare sia da lettore dei sensori sia da interfacci WebServer ?
Ciao Mauro , ho un d1mini che deve leggere i dati per poi inviarli a Home assistant installato su raspberry pi3 , ho dei convertitori ttl to rs485 , pensavo di far comunicare i 2 con il protocollo modbus , tu hai qualche esempio per capire da dove iniziare
Autore
Ciao Mino,
penso che la tua scelta di usare un bus seriale sia legata da un lato alla voglia di sperimentare con questo protocollo dall’altra dall’evitare l’uso del wifi per qualche motivo.
Premesso che non ho scritto articoli in merito al modbus, non ho mai sperimentato con tale protocollo, ti posso consigliare di leggere i miei ultimi articoli sul DHT22, il D1mini e Home Assistant.
Ciao Ciao Mauro , ho un d1mini che deve leggere i dati da un dht22 , ma succede una cosa strana , quando gli invio il programma non legge fino a quando non tolgo alimentazione .
Mi sai dare qualche indicazione .
Grazie
Mino
Autore
Ciao Mino,
dopo aver trasferito il codice sulla board d1 mini dovrebbe resettarsi per passare in modalità di esecuzione del programma, di solito lo fa da sola e te lo dice nell’IDE; nel tuo caso è possibile che per qualche problema Hw o Sw non accada così e devi eseguire il reset tu a mano.