Lezione 31/31: Misura Temperatura e Umidità tramite Wi-Fi usando DHT11 e Kit ESP01 SunFounder
Questa guida di progetto ti accompagna nella costruzione di un sistema di monitoraggio wireless di temperatura e umidità utilizzando un modulo ESP8266 (ESP-01) e un sensore DHT11. Alla fine, avrai un dispositivo che crea il proprio server web, permettendoti di visualizzare le letture dei sensori in tempo reale su qualsiasi dispositivo connesso alla tua rete locale, come smartphone, tablet o computer. Questo è un progetto IoT fondamentale che dimostra come collegare il mondo fisico dei sensori con il mondo digitale delle interfacce web.
Le competenze che acquisirai qui sono altamente trasferibili. Questa configurazione esatta può essere adattata a un'ampia gamma di applicazioni pratiche, tra cui:
- Costruire una stazione di monitoraggio remoto per una serra o un giardino per garantire condizioni di crescita ottimali.
- Creare un semplice sistema di automazione domestica per monitorare il clima in una stanza specifica, come una cantina per vini o la cameretta di un bambino.
- Configurare un registratore di dati ambientali a basso costo per un progetto scientifico scolastico.
- Sviluppare un sistema di sicurezza o allarme di base che possa avvisarti di improvvisi cambiamenti di temperatura.
Hardware e Componenti
Per seguire questo progetto, avrai bisogno dei seguenti componenti. I componenti principali sono il modulo ESP8266 e il sensore DHT11, ma gli altri sono essenziali per programmare e alimentare il modulo.
- Modulo ESP8266 (ESP-01S): Il microcontrollore principale con capacità Wi-Fi integrata.
- Sensore di Temperatura e Umidità DHT11: Il sensore che misura i dati ambientali.
- Scheda Arduino Uno (per conversione USB-Seriale): In questo progetto, la scheda Arduino principale non viene utilizzata per la sua potenza di elaborazione. Invece, il suo chip USB-seriale viene utilizzato per programmare il modulo ESP8266.
- Resistenza da 330 ohm: Utilizzata per il test iniziale del lampeggio del LED per limitare la corrente.
- Resistenza da 1k-ohm a 10k-ohm: Una resistenza di pull-up per la linea dati del sensore DHT11.
- LED e Cavi Jumper: Per la fase di test e per effettuare tutte le connessioni necessarie.
- Breadboard: Per creare le connessioni del circuito.
Guida al Cablaggio
Il processo di cablaggio viene eseguito in fasi. Prima, configureremo il circuito di base per programmare l'ESP-01. Questo comporta l'utilizzo dell'Arduino Uno come programmatore. Il video dimostra chiaramente questa configurazione. Le connessioni chiave sono le seguenti:
Per entrare in modalità di programmazione, devi collegare il pin IO1 (GPIO1) a Ground (GND). Questo dice all'ESP8266 di attendere nuovo firmware. Il resto delle connessioni per la programmazione sono:
- VCC (3.3V) a EN (Enable): Questo abilita il modulo.
- GND a GND: Massa comune per il circuito.
- VCC (5V) a VCC (5V): Per alimentare la scheda del programmatore.
- RX (ESP) a TX (Arduino): Per la comunicazione seriale dal programmatore al modulo.
- TX (ESP) a RX (Arduino): Per la comunicazione seriale dal modulo al programmatore.
- RST (Reset) a GND: Questa è una connessione temporanea utilizzata per resettare il modulo dopo la programmazione.
Una volta programmato l'ESP-01, il cablaggio per il sensore è semplice. Il sensore DHT11 richiede una resistenza di pull-up sulla sua linea dati per garantire una comunicazione stabile.
Per la configurazione del sensore, il cablaggio è il seguente:
- DHT11 VCC (Pin 1) a 3.3V: Alimentazione per il sensore.
- DHT11 DATA (Pin 2) a GPIO2 (IO2) sull'ESP-01: La linea dati per le letture del sensore. Una resistenza di pull-up da 1k-ohm a 10k-ohm deve essere collegata tra questa linea dati e la linea di alimentazione a 3.3V.
- DHT11 GND (Pin 4) a GND: Massa comune per il sensore.
Preparazione dell'Arduino IDE
Per programmare l'ESP8266, devi prima aggiungere il supporto della scheda al tuo Arduino IDE. Questo viene fatto in due passaggi:
- Aggiungi l'URL del Board Manager: Vai su
File > Preferenze. Nel campo "URL aggiuntive per il Board Manager", incolla il seguente URL:http://arduino.esp8266.com/stable/package_esp8266com_index.jsone clicca "OK". - Installa il pacchetto della scheda ESP8266: Vai su
Strumenti > Scheda > Gestore Schede.... Cerca "esp8266", trova "esp8266 by ESP8266 Community" e clicca "Installa". Dopo l'installazione, puoi selezionare la scheda andando suStrumenti > Scheda > Schede ESP8266 > Generic ESP8266 Module.
Installazione della Libreria del Sensore DHT
Il codice si basa su una libreria per interfacciarsi con il sensore DHT11. Questa libreria deve essere installata nel tuo Arduino IDE.
- Vai su
Strumenti > Gestione Librerie.... - Cerca "DHT sensor library".
- Trova la libreria di Adafruit e clicca "Installa". Questa libreria semplifica il processo di lettura dei dati dal sensore.
Progetto 1: Test di Lampeggio del LED
Prima di addentrarci nel sensore, è fondamentale verificare di poter programmare con successo l'ESP-01. Questo viene fatto con il classico esempio "Blink". Il video mostra un processo di esportazione del binario compilato e l'uso di un file batch separato per il flashing, che è una soluzione alternativa per la specifica configurazione USB-serial. L'obiettivo è vedere il LED integrato lampeggiare, confermando che la catena di programmazione funziona. Per eseguire il modulo dopo la programmazione, è necessario scollegare il filo che collega IO1 a GND e poi collegare momentaneamente il pin RST a GND per resettare il modulo.
Progetto 2: Lettura del DHT11 sul Monitor Seriale
Una volta confermata la programmazione, il passo successivo è collegare il sensore DHT11 e leggere i suoi dati. Questo progetto utilizza l'esempio DHTtester della libreria Adafruit per sensori DHT. Il codice è configurato per utilizzare il pin e il tipo di sensore corretti. Dopo aver caricato questo programma, puoi aprire il Monitor Seriale (impostato a 9600 baud) per vedere le letture di temperatura e umidità.
Progetto 3: Configurazione del Server Web
Il progetto finale combina tutto. L'ESP8266 è programmato per connettersi alla tua rete Wi-Fi locale e ospitare una semplice pagina web. Questa pagina mostra le letture in tempo reale di temperatura e umidità. Il codice è una versione modificata dell'esempio "HelloServer" dell'ESP8266. Il video dimostra come accedere a questi dati inserendo l'indirizzo IP del dispositivo o il suo nome mDNS (ad esempio, robojaxDHT.local) in un browser web su qualsiasi dispositivo connesso alla stessa rete.
Spiegazione del Codice
Poiché il programma completo è disponibile per il download, questa sezione si concentra sulle variabili chiave configurabili dall'utente che dovrai adattare alla tua rete e alle tue preferenze. Il codice è una versione modificata dell'esempio "HelloServer" dell'ESP8266. La logica principale coinvolge la lettura del sensore e la formattazione di una pagina HTML per visualizzare i dati.
Ecco le parti critiche del codice che dovrai modificare:
// Credenziali Wi-Fi - DEVI CAMBIARLE
const char* ssid = "YourWiFiSSID"; // Sostituisci con il nome della tua rete Wi-Fi
const char* password = "YourWiFiPassword"; // Sostituisci con la password della tua rete Wi-Fi
Questa è la sezione più importante da modificare. Le variabili ssid e password devono corrispondere esattamente alla tua rete Wi-Fi locale. Il nome Wi-Fi è sensibile alle maiuscole, quindi assicurati di inserirlo correttamente.
// Configurazione del sensore DHT11
#define DHTPIN 2 // Pin digitale collegato al sensore DHT (GPIO2)
#define DHTTYPE DHT11 // Tipo di sensore DHT 11
Queste definizioni configurano il sensore. DHTPIN è il pin GPIO sull'ESP8266 a cui è collegata la linea dati del sensore (che in questa guida è GPIO2). DHTTYPE definisce il modello specifico del sensore. Se stessi usando un sensore DHT22, dovresti decommentare la riga per DHT22 e commentare quella per DHT11.
// Variabili configurabili
const long interval = 3000; // millisecondi tra le letture del sensore
char temperature[] = "00.0";
char humidity[] = "00.0";
La variabile interval controlla la frequenza con cui il sensore viene letto e la pagina web viene aggiornata. Il valore predefinito è 3000 millisecondi (3 secondi). Puoi aumentarlo a un valore più alto come 5000 o 10000 per ridurre la frequenza degli aggiornamenti.
Il codice include anche una funzione che formatta la lettura della temperatura. Puoi scegliere di visualizzare la temperatura in Celsius o Fahrenheit modificando la logica nella funzione sendTemperature(). Il video spiega che la variabile Tvalue è impostata per contenere la lettura in Celsius, ma puoi cambiarla per usare la variabile Fahrenheit F.
Dimostrazione del Progetto dal Vivo
Nel video, il progetto completato viene dimostrato. Dopo che il codice è stato caricato e il modulo è stato resettato, si connette alla rete Wi-Fi. Il Monitor Seriale mostra lo stato della connessione e l'indirizzo IP del dispositivo. Navigando a questo indirizzo IP in un browser web, puoi vedere una semplice pagina che mostra la temperatura e l'umidità attuali. La dimostrazione mostra le letture che si aggiornano in tempo reale. Quando il sensore DHT11 viene riscaldato con una pistola termica, la lettura della temperatura sulla pagina web aumenta di conseguenza. Se il filo dati del sensore viene scollegato, la pagina mostra "None" per i valori del sensore, che è una funzione utile per la risoluzione dei problemi.
Capitoli
- [00:00] Introduzione al Progetto
- [01:33] Comprendere l'ESP8266 e i Server Web
- [05:47] Cablaggio dell'ESP-01 per la Programmazione
- [08:51] Installazione del Supporto per la Scheda ESP8266 nell'Arduino IDE
- [11:47] Progetto 1: Lampeggio di un LED con ESP8266
- [20:28] Cablaggio del Sensore DHT11
- [22:34] Installazione della Libreria per Sensori DHT
- [23:13] Progetto 2: Lettura del DHT11 sul Monitor Seriale
- [30:10] Spiegazione del Codice per il Progetto del Server Web
- [36:14] Progetto 3: Caricamento del Codice del Server Web
- [38:42] Dimostrazione: Visualizzazione della Temperatura tramite Wi-Fi
- [41:43] Conclusione e Risoluzione dei Problemi
/*
* Display temperature using DHT11, DHT22 with NodeMCU ESP8266
* over WiFi in local network on computer o mobile devices
*
* Written by Ahmad Shamshiri on Sep 27, 2019
* in Ajax, Ontario, Canada
* Watch video instruciton for this video: https://youtu.be/1A4-6hDARQc
*
* I have combined DHT library of Adafruit with ESP8266 WebServer both links
* Adafruit DHT library on GitHub: https://github.com/adafruit/DHT-sensor-library
* and
* ESP8266 on GitHub : https://github.com/esp8266/Arduino
* Download and resource page https://robojax.com/RJT614
*
Get this code and other Arduono codes from Robojax.com
* Code is available at https://robojax.com/RJT614
* This code is "AS IS" without warranty or liability. Free to be used as long as you keep this note intact.*
* This code has been download from Robojax.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
const int refresh=3;//3 seconds
// DHT settings starts
#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)
DHT dht(DHTPIN, DHTTYPE);
float tValue, hValue;//
char *simipleName="robojaxDHT";//android
// ****** DHT settings end (Robojax.com )
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#ifndef STASSID
#define STASSID "Robojax" // Your WiFi SSID
#define STAPSK "100%Right" //Your WiFi password
#endif
const char* ssid = STASSID;
const char* password = STAPSK;
ESP8266WebServer server(80);
void sendTemp() {
String page = "<!DOCTYPE html>";
page +=" <meta http-equiv='refresh' content='";
page += String(refresh);// how often temperature is read
page +="'/>";
page +="<html dir=\"rtl\">";
page +="<body>";
page +="<h1>رطوبت و حرارت توسط دی اچ تی</h1>";
page +="<p style=\"font-size:150px;\">حرارت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(tValue, 2);
page +="°C</p>";
page +="<p style=\"font-size:150px;\">رطوبت<br/>";
page +="<span style=\"color:red; font-size:150px;\">";
page += String(hValue, 2);
page +="%</p>";
page +="</body>";
page +="</html>";
server.send(200, "text/html",page);
}
void handleNotFound() {
String message = "File Not Found";
message += "URI: ";
message += server.uri();
message += "Method: ";
message += (server.method() == HTTP_GET) ? "GET" : "POST";
message += "Arguments: ";
message += server.args();
message += "";
for (uint8_t i = 0; i < server.args(); i++) {
message += " " + server.argName(i) + ": " + server.arg(i) + "";
}
server.send(404, "text/plain", message);
}
void setup(void) {
// Robojax.com code for ESP8266 and DHT11 DHT22
dht.begin();
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
if (WiFi.status() == WL_CONNECTED)
{
uint8_t macAddr[6];
WiFi.macAddress(macAddr);
Serial.printf("Connected, mac address: %02x:%02x:%02x:%02x:%02x:%02x", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]);
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
if (MDNS.begin(simipleName)) {
Serial.print("or view http://");
Serial.println(simipleName);
}
server.on("/", sendTemp);
server.on("/inline", []() {
server.send(200, "text/plain", "this works as well");
});
server.onNotFound(handleNotFound);
server.begin();
Serial.println("HTTP server started");
}
void loop(void) {
// Robojax.com code for ESP8266 and DHT11 DHT22
server.handleClient();
MDNS.update();//multicast DNS
float c = dht.readTemperature();// Read temperature as Celsius (the default)
float h = dht.readHumidity();// Reading humidity
float f = dht.readTemperature(true);// Read temperature as Fahrenheit (isFahrenheit = true)
Serial.print(c);
Serial.println(F("°C "));
tValue =c;//save temperature for display
hValue =h;//save humidity for display
delay(300);// change this to larger value (1000 or more) if you don't need very often reading
// Robojax.com code for ESP8266 and DHT11 DHT22
}
Common Course Links
Common Course Files
Risorse e riferimenti
Nessuna risorsa ancora.
File📁
Codice Arduino (.ino)
-
ESP8266_ESP1_DHT111 codes for Lesson 31 of Sunfounder's 3-in-1
ESP8266_ESP1_DHT111_all.zip9.31 MB
File Fritzing
-
Sensore di Umidità e Temperatura DHT11 (3 pin)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Manuale dell'utente
-
Manuale dell'utente DHT11
robojax-DHT11_manual.pdf0.82 MB