Les 31/31: Meet Temperatuur en Humiditeit oor Wi-Fi met behulp van DHT11 en ESP01 SunFounder Kit
Hierdie projekgids neem jou stap vir stap deur die bou van 'n draadlose temperatuur- en humiditeitmoniteringstelsel met behulp van 'n ESP8266 (ESP-01) module en 'n DHT11 sensor. Aan die einde sal jy 'n toestel hê wat sy eie webwerfbediener skep, sodat jy intydse sensorlesings op enige toestel wat aan jou plaaslike netwerk gekoppel is, soos 'n slimfoon, tablet of rekenaar, kan bekyk. Dit is 'n fundamentele IoT-projek wat demonstreer hoe om die fisiese wêreld van sensors met die digitale wêreld van webkoppelvlakke te oorbrug.
Die vaardighede wat jy hier aanleer, is hoogs oordraagbaar. Hierdie presiese opstelling kan aangepas word vir 'n wye reeks praktiese toepassings, insluitend:
- Die bou van 'n afgeleë moniteringstasie vir 'n kweekhuis of tuin om optimale groeitoestande te verseker.
- Die skep van 'n eenvoudige huisoutomatiseringstelsel om die klimaat in 'n spesifieke kamer, soos 'n wynkelder of 'n baba se kwekery, te monitor.
- Die opstel van 'n laekoste omgewingsdataregistreerder vir 'n skoolwetenskapprojek.
- Die ontwikkeling van 'n basiese sekuriteits- of waarskuwingstelsel wat jou van skielike temperatuurveranderinge kan verwittig.
Hardeware en Komponente
Om hierdie projek te volg, sal jy die volgende komponente nodig hê. Die primêre komponente is die ESP8266 module en die DHT11 sensor, maar die res is noodsaaklik vir die programmering en kragvoorsiening van die module.
- ESP8266 (ESP-01S) Module: Die kernmikrobeheerder met ingeboude Wi-Fi-vermoë.
- DHT11 Temperatuur- en Humiditeitsensor: Die sensor wat die omgewingsdata meet.
- Arduino Uno-bord (vir USB-na-reeks-omskakeling): In hierdie projek word die hoof Arduino-bord nie vir sy verwerkingskrag gebruik nie. In plaas daarvan word sy USB-na-reeks-skyfie gebruik om die ESP8266 module te programmeer.
- 330-ohm-weerstand: Word gebruik vir die aanvanklike LED-flikkertoets om stroom te beperk.
- 1k-ohm tot 10k-ohm-weerstand: 'n Optrekweerstand vir die DHT11 sensor se datalyne.
- LED en Springdrade: Vir die toetsfase en om alle nodige verbindings te maak.
- Broodbord: Vir die skep van die stroombaanverbindings.
Bedradingsgids
Die bedradingsproses word in fases gedoen. Eerstens sal ons die basiese stroombaan opstel om die ESP-01 te programmeer. Dit behels die gebruik van die Arduino Uno as 'n programmeerder. Die video demonstreer hierdie opstelling duidelik. Die sleutelverbindings is soos volg:
Om programmeringsmodus te betree, moet jy die IO1 (GPIO1)-pen aan Grond (GND) koppel. Dit sê vir die ESP8266 om op nuwe firmware te wag. Die res van die verbindings vir programmering is:
- VCC (3.3V) aan EN (Enable): Dit aktiveer die module.
- GND aan GND: Gemeenskaplike grond vir die stroombaan.
- VCC (5V) aan VCC (5V): Om die programmeerbord van krag te voorsien.
- RX (ESP) aan TX (Arduino): Vir reekskommunikasie van die programmeerder na die module.
- TX (ESP) aan RX (Arduino): Vir reekskommunikasie van die module na die programmeerder.
- RST (Reset) aan GND: Dit is 'n tydelike verbinding wat gebruik word om die module na programmering terug te stel.
Sodra die ESP-01 geprogrammeer is, is die bedrading vir die sensor eenvoudig. Die DHT11 sensor vereis 'n optrekweerstand op sy datalyne om stabiele kommunikasie te verseker.
Vir die sensoropstelling is die bedrading soos volg:
- DHT11 VCC (Pen 1) aan 3.3V: Krag vir die sensor.
- DHT11 DATA (Pen 2) aan GPIO2 (IO2) op ESP-01: Die datalyne vir sensorlesings. 'n 1k-ohm tot 10k-ohm optrekweerstand moet tussen hierdie datalyne en die 3.3V-kraglyn gekoppel word.
- DHT11 GND (Pen 4) aan GND: Gemeenskaplike grond vir die sensor.
Voorbereiding van die Arduino IDE
Om die ESP8266 te programmeer, moet jy eers sy bordondersteuning by jou Arduino IDE voeg. Dit word in twee stappe gedoen:
- Voeg die Board Manager-URL by: Gaan na
File > Preferences. In die "Additional Boards Manager URLs"-veld, plak die volgende URL:http://arduino.esp8266.com/stable/package_esp8266com_index.jsonen klik "OK". - Installeer die ESP8266-bordpakket: Navigeer na
Tools > Board > Boards Manager.... Soek vir "esp8266", vind "esp8266 by ESP8266 Community", en klik "Install". Na installasie kan jy die bord kies deur naTools > Board > ESP8266 Boards > Generic ESP8266 Modulete gaan.
Installeer die DHT-sensorbiblioteek
Die kode maak staat op 'n biblioteek om met die DHT11 sensor te kommunikeer. Hierdie biblioteek moet in jou Arduino IDE geïnstalleer word.
- Gaan na
Tools > Manage Libraries.... - Soek vir "DHT sensor library".
- Vind die biblioteek deur Adafruit en klik "Install". Hierdie biblioteek vereenvoudig die proses om data van die sensor te lees.
Projek 1: LED-flikkertoets
Voordat jy in die sensor duik, is dit noodsaaklik om te verifieer dat jy die ESP-01 suksesvol kan programmeer. Dit word gedoen met die klassieke "Blink"-voorbeeld. Die video wys 'n proses van die uitvoer van die saamgestelde binêre lêer en die gebruik van 'n aparte bondellêer om dit te flits, wat 'n oplossing is vir die spesifieke USB-na-seriale opstelling. Die doel is om die aanboord-LED te sien flikker, wat bevestig dat die programmeringsketting werk. Om die module na programmering te laat loop, moet jy die draad wat IO1 aan GND verbind, ontkoppel en dan die RST-pen kortliks aan GND koppel om die module terug te stel.
Projek 2: Lees van DHT11 op die Seriële Monitor
Sodra die programmering bevestig is, is die volgende stap om die DHT11-sensor te koppel en sy data te lees. Hierdie projek gebruik die DHTtester-voorbeeld uit die Adafruit DHT-sensorbiblioteek. Die kode is gekonfigureer om die korrekte pen en sensortipe te gebruik. Nadat hierdie program geflits is, kan jy die Seriële Monitor (gestel op 9600 baud) oopmaak om die temperatuur- en humiditeitslesings te sien.
Projek 3: Opstel van die Webbediener
Die finale projek kombineer alles. Die ESP8266 word geprogrammeer om aan jou plaaslike Wi-Fi-netwerk te koppel en 'n eenvoudige webblad te bedien. Hierdie blad vertoon die lewendige temperatuur- en humiditeitslesings. Die kode is 'n gewysigde weergawe van die ESP8266 "HelloServer"-voorbeeld. Die video demonstreer hoe om hierdie data te bekom deur die toestel se IP-adres of sy mDNS-naam (bv. robojaxDHT.local) in 'n webblaaier op enige toestel wat aan dieselfde netwerk gekoppel is, in te tik.
Kodeverduideliking
Aangesien die volledige program beskikbaar is vir aflaai, fokus hierdie afdeling op die belangrikste gebruikerskonfigureerbare veranderlikes wat jy sal moet aanpas vir jou eie netwerk en voorkeure. Die kode is 'n gewysigde weergawe van die ESP8266 "HelloServer"-voorbeeld. Die kernlogika behels die lees van die sensor en die formatering van 'n HTML-bladsy om die data te vertoon.
Hier is die kritieke dele van die kode wat jy sal moet wysig:
// Wi-Fi-geloofsbriewe - JY MOET HIERDIE VERANDER
const char* ssid = "YourWiFiSSID"; // Vervang met jou Wi-Fi-netwerknaam
const char* password = "YourWiFiPassword"; // Vervang met jou Wi-Fi-wagwoord
Dit is die belangrikste afdeling om te verander. Die ssid- en password-veranderlikes moet presies ooreenstem met jou plaaslike Wi-Fi-netwerk. Die Wi-Fi-naam is hooflettergevoelig, so maak seker dat jy dit korrek invoer.
// DHT11-sensorkonfigurasie
#define DHTPIN 2 // Digitale pen gekoppel aan die DHT-sensor (GPIO2)
#define DHTTYPE DHT11 // DHT 11-sensortipe
Hierdie definisies stel die sensor op. DHTPIN is die GPIO-pen op die ESP8266 waaraan die sensor se datalyndraad gekoppel is (wat GPIO2 in hierdie gids is). DHTTYPE definieer die spesifieke sensormodel. As jy 'n DHT22-sensor gebruik, sou jy die lyn vir DHT22 ontkommentaar maak en die een vir DHT11 kommentaar maak.
// Konfigureerbare veranderlikes
const long interval = 3000; // millisekondes tussen sensorlesings
char temperature[] = "00.0";
char humidity[] = "00.0";
Die interval-veranderlike beheer hoe gereeld die sensor gelees word en die webblad opgedateer word. Die verstek is 3000 millisekondes (3 sekondes). Jy kan dit verhoog na 'n hoër waarde soos 5000 of 10000 om die frekwensie van opdaterings te verminder.
Die kode sluit ook 'n funksie in wat die temperatuurlesing formateer. Jy kan kies om die temperatuur in Celsius of Fahrenheit te vertoon deur die logika in die sendTemperature()-funksie te wysig. Die video verduidelik dat die veranderlike Tvalue gestel is om die Celsius-lesing te hou, maar jy kan dit verander om die Fahrenheit-veranderlike F in plaas daarvan te gebruik.
Lewendige Projekdemonstrasie
In die video word die voltooide projek gedemonstreer. Nadat die kode geflits is en die module teruggestel is, koppel dit aan die Wi-Fi-netwerk. Die Seriële Monitor vertoon die koppelingstatus en die toestel se IP-adres. Deur na hierdie IP-adres in 'n webblaaier te navigeer, kan jy 'n eenvoudige bladsy sien wat die huidige temperatuur en humiditeit wys. Die demonstrasie wys die lesings wat intyds opdateer. Wanneer die DHT11-sensor met 'n hittegeweer verhit word, styg die temperatuurlesing op die webblad dienooreenkomstig. As die sensor se datadraad ontkoppel word, vertoon die bladsy "None" vir die sensorwaardes, wat 'n nuttige probleemoplossingskenmerk is.
Hoofstukke
- [00:00] Inleiding tot die Projek
- [01:33] Verstaan van die ESP8266 en Webbedieners
- [05:47] Bedrading van die ESP-01 vir Programmering
- [08:51] Installeer ESP8266-bordondersteuning in Arduino IDE
- [11:47] Projek 1: Laat 'n LED flikker met ESP8266
- [20:28] Bedrading van die DHT11-sensor
- [22:34] Installeer die DHT-sensorbiblioteek
- [23:13] Projek 2: Lees van DHT11 op die Seriële Monitor
- [30:10] Kodeverduideliking vir die Webbedienerprojek
- [36:14] Projek 3: Flits van die Webbedienerkode
- [38:42] Demonstrasie: Vertoon van Temperatuur oor Wi-Fi
- [41:43] Gevolgtrekking en Probleemoplossing
/*
* 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
Hulpbronne en verwysings
Geen hulpbronne nog.
Lêers📁
Arduino-kode (.ino)
-
ESP8266_ESP1_DHT111 codes for Lesson 31 of Sunfounder's 3-in-1
ESP8266_ESP1_DHT111_all.zip9.31 MB
Fritzing-lêer
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
Gebruikershandleiding
-
DHT11 User's Manual
robojax-DHT11_manual.pdf0.82 MB