Il progetto realizza una stazione di monitoraggio dell'umidità e della temperatura basata su una scheda ESP8266 NodeMCU interfacciata con il sensore DHT11. La scheda, collegata ad Internet tramite il modulo WiFi integrato, invia i dati rilevati ad un database MySql remoto
Vai alla pagina dei downloads Categoria: Arduino ESP8266 IoT
Codice sketch Arduino Ide rileva_ht.ino
/* Prof. Mauro De Berardis 2021 * ----------------------------------------------------------------------------------------- * Il progetto realizza una stazione di monitoraggio basata su una scheda ESP8266 NodeMCU * interfacciata con un sensore DHT11. La scheda, collegata ad Internet * tramite il modulo WiFi integrato al suo interno, ad intervalli regolari di tempo rileva umidità H * e temperatura T e invia i valori letti ad un database MySql remoto. */ #include <ESP8266WiFi.h> //permette la connessione della scheda alla rete WiFi #include <ESP8266HTTPClient.h> #include <DHT.h> //libreria necessaria per utilizzare il sensore DHT11 #define sensorePin D3 // pin di ESP8266 NodeMCU collegato all'uscita (pin OUT) del sensore DHT11 #define tipoDHT DHT11 /* definisce il tipo di sensore della famiglia DHT: in questo caso viene selezionato DHT11, ma esistono sono altri sensori quali DHT21 e DHT22 */ DHT dht(sensorePin,tipoDHT); //Istanzia l'oggetto dht della classe DHT float h; //umidità float t; //temperatur #define Led1 D1 // Led verde #define Led2 D2 // Led rosso //***Configurazione WiFI: impostazione delle credenziali di rete const char* ssid = "mySSID"; //Inserire qui l'SSID const char* password = "myPassword"; //Inserire qui la password WiFi //WiFiClient client; unsigned long time_last = 0; // time ultima rilevazione unsigned long time_current; // time corrente const long interval = 900000; // fisso l'intervallo tra una rilevazione e l'altra ad esempio a 15 minuti // 900000ms = 9000s=15 minuti void setup() { delay(1000); pinMode(Led1,OUTPUT); pinMode(Led2,OUTPUT); // apre una connessione seriale. A scopo di debug inviamo messaggi al monitor seriale Serial.begin(115200); WiFi.begin(ssid, password); //Si connette al router WiFi Serial.println("Connessione al WiFi in corso.."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("ESP8266 NodeMCU connessa alla rete WiFI: "); Serial.print(ssid); Serial.print(" con il numero IP : "); Serial.println(WiFi.localIP());//l'IP di ESP8266 viene assegnato dal DHCP Serial.println(); digitalWrite(Led1, 1); // si accende il led 1 che indica che il Wifi è attivo delay(500); rileva_invia(); // chiamata alla funzione che rileva umidità H e temperatura T e invia i dati allo script // PHP del server remoto con una richiesta HTTP GET } //----chiude setup()------------------------------------------------------------------ void loop() { time_current = millis(); if (time_current - time_last >= interval) // se è trascorso il tempo impostato in interval { time_last = time_current; // aggiorno il time ultima rilevazione rileva_invia(); // chiamata alla funzione che rileva umidità H e temperatura T e invia i dati allo script // PHP del server remoto con una richiesta HTTP GET // il led 2 si accende per 2 secondi segnalando che è stata fatta una lettura digitalWrite(Led2, 1); delay(2000); digitalWrite(Led2, 0); } } void rileva_invia() { // faccio 3 letture in modo che i valori letti dal sensore DHT11 , che non è velocissimo, // si stabilizzino for(int i=0;i<3;i++) { h = dht.readHumidity(); // Lettura dell'umidità t = dht.readTemperature(); // Lettura della temperatura in gradi Celsius delay(300); } if (isnan(h) || isnan(t)) //Verifica se si presenta un errore di lettura { Serial.println("Errore di lettura..."); h=0.0; t=0.0; } String s="Umidità= "+String(h)+" Temperatura="+String(t); Serial.println(s); String s2=String(h)+"#"+String(t)+"#"; HTTPClient http; //Dichiara l'oggetto http della classe HTTPClient String richiestaHTTP, link,risposta; richiestaHTTP = "?h=" + String(h)+"&t="+String(t); // querystring da inviare nell'URL della richiesta HTTP GET // utilizzo un server di hosting remoto ad esempio www.maurodeberardis.it // link= "http://www.maurodeberardis.it/CodiciPHP/registra_ht.php"+richiestaHTTP; // utilizzo un server WAMP su un pc con IP 192.168.1.3 link = "http://192.168.1.3/prove/registra_ht.php"+richiestaHTTP; http.begin(link); //Specifica la destinazione della richiesta HTTP GET int httpCode = http.GET(); //Invia la richiesta HTTP GET if (httpCode==HTTP_CODE_OK) { risposta= http.getString(); //Ottiene la risposta dal Server Serial.print("HTTP code: "); Serial.println(httpCode); Serial.println("Dati salvati correttamente sul DB remoto"); } else { Serial.println("Errore"); Serial.print("HTTP code: "); Serial.println(httpCode); Serial.println(link); Serial.println(); } }