Lekcia 31/31: Meranie teploty a vlhkosti cez Wi-Fi pomocou DHT11 a ESP01 SunFounder Kit
Tento projektový sprievodca vás prevedie stavbou bezdrôtového systému na monitorovanie teploty a vlhkosti pomocou modulu ESP8266 (ESP-01) a senzora DHT11. Na konci budete mať zariadenie, ktoré vytvorí vlastný webový server, umožňujúci vám zobraziť údaje zo senzorov v reálnom čase na akomkoľvek zariadení pripojenom k vašej lokálnej sieti, napríklad na smartfóne, tablete alebo počítači. Toto je základný IoT projekt, ktorý demonštruje, ako prepojiť fyzický svet senzorov s digitálnym svetom webových rozhraní.
Zručnosti, ktoré sa tu naučíte, sú vysoko prenosné. Toto presné zapojenie možno prispôsobiť širokému spektru praktických aplikácií, vrátane:
- Vybudovanie vzdialenej monitorovacej stanice pre skleník alebo záhradu na zabezpečenie optimálnych podmienok na pestovanie.
- Vytvorenie jednoduchého systému domácej automatizácie na monitorovanie klímy v konkrétnej miestnosti, napríklad vo vinnej pivnici alebo v detskej izbe.
- Nastavenie nízkonákladového dátového logera environmentálnych údajov pre školský vedecký projekt.
- Vyvinutie základného bezpečnostného alebo výstražného systému, ktorý vás môže upozorniť na náhle zmeny teploty.
Hardvér a komponenty
Na sledovanie tohto projektu budete potrebovať nasledujúce komponenty. Hlavnými komponentmi sú modul ESP8266 a senzor DHT11, ale ostatné sú nevyhnutné na programovanie a napájanie modulu.
- Modul ESP8266 (ESP-01S): Základný mikrokontrolér so zabudovanou Wi-Fi schopnosťou.
- Teplotný a vlhkostný senzor DHT11: Senzor, ktorý meria environmentálne údaje.
- Doska Arduino Uno (na USB-to-sériovú konverziu): V tomto projekte sa hlavná doska Arduino nepoužíva na jej výpočtový výkon. Namiesto toho sa jej USB-to-sériový čip používa na programovanie modulu ESP8266.
- Rezistor 330 ohmov: Používa sa na počiatočný test blikania LED na obmedzenie prúdu.
- Rezistor 1k-ohm až 10k-ohm: Pull-up rezistor pre dátový vodič senzora DHT11.
- LED a prepojovacie vodiče: Na testovaciu fázu a vytvorenie všetkých potrebných spojení.
- Nepájivé pole: Na vytvorenie obvodových spojení.
Sprievodca zapojením
Proces zapojenia sa vykonáva v etapách. Najprv nastavíme základný obvod na programovanie ESP-01. To zahŕňa použitie Arduino Uno ako programátora. Video jasne demonštruje toto nastavenie. Kľúčové spojenia sú nasledovné:
Aby ste vstúpili do programovacieho režimu, musíte pripojiť IO1 (GPIO1) pin na Ground (GND). Toto povie ESP8266, aby čakal na nový firmvér. Ostatné spojenia na programovanie sú:
- VCC (3.3V) na EN (Enable): Toto aktivuje modul.
- GND na GND: Spoločná zem pre obvod.
- VCC (5V) na VCC (5V): Na napájanie programátorskej dosky.
- RX (ESP) na TX (Arduino): Pre sériovú komunikáciu z programátora do modulu.
- TX (ESP) na RX (Arduino): Pre sériovú komunikáciu z modulu do programátora.
- RST (Reset) na GND: Toto je dočasné spojenie používané na resetovanie modulu po programovaní.
Po naprogramovaní ESP-01 je zapojenie senzora jednoduché. Senzor DHT11 vyžaduje pull-up rezistor na svojom dátovom vodiči, aby sa zabezpečila stabilná komunikácia.
Pre nastavenie senzora je zapojenie nasledovné:
- DHT11 VCC (Pin 1) na 3.3V: Napájanie pre senzor.
- DHT11 DATA (Pin 2) na GPIO2 (IO2) na ESP-01: Dátový vodič pre údaje zo senzora. Medzi tento dátový vodič a 3.3V napájací vodič by mal byť pripojený pull-up rezistor 1k-ohm až 10k-ohm.
- DHT11 GND (Pin 4) na GND: Spoločná zem pre senzor.
Príprava Arduino IDE
Na programovanie ESP8266 musíte najprv pridať podporu dosky do vášho Arduino IDE. Toto sa vykoná v dvoch krokoch:
- Pridanie URL adresy Board Manager: Prejdite na
Súbor > Predvoľby. Do poľa "Additional Boards Manager URLs" vložte nasledujúcu URL adresu:http://arduino.esp8266.com/stable/package_esp8266com_index.jsona kliknite na "OK". - Inštalácia balíka dosky ESP8266: Prejdite na
Nástroje > Doska > Board Manager.... Vyhľadajte "esp8266", nájdite "esp8266 by ESP8266 Community" a kliknite na "Install". Po inštalácii môžete vybrať dosku prejdením naNástroje > Doska > ESP8266 Boards > Generic ESP8266 Module.
Inštalácia knižnice DHT senzora
Kód sa spolieha na knižnicu na komunikáciu so senzorom DHT11. Táto knižnica musí byť nainštalovaná vo vašom Arduino IDE.
- Prejdite na
Nástroje > Spravovať knižnice.... - Vyhľadajte "DHT sensor library".
- Nájdite knižnicu od Adafruit a kliknite na "Install". Táto knižnica zjednodušuje proces čítania údajov zo senzora.
Projekt 1: Test blikania LED
Predtým, než sa pustíte do senzora, je kľúčové overiť, že dokážete úspešne naprogramovať ESP-01. Toto sa robí pomocou klasického príkladu „Blink“. Video ukazuje proces exportu skompilovaného binárneho súboru a použitie samostatného dávkového súboru na jeho nahranie, čo je obchádzka pre konkrétne USB-to-serial nastavenie. Cieľom je vidieť blikať vstavanú LED, čo potvrdzuje, že programovací reťazec funguje. Po naprogramovaní modulu musíte na jeho spustenie odpojiť vodič spájajúci IO1 s GND a potom krátko pripojiť pin RST na GND, aby sa modul resetoval.
Projekt 2: Čítanie DHT11 na Sériovom Monitore
Keď je programovanie potvrdené, ďalším krokom je pripojiť senzor DHT11 a čítať jeho dáta. Tento projekt používa príklad DHTtester z knižnice Adafruit DHT sensor. Kód je nakonfigurovaný na použitie správneho pinu a typu senzora. Po nahratí tohto programu môžete otvoriť Sériový Monitor (nastavený na 9600 baud) a vidieť hodnoty teploty a vlhkosti.
Projekt 3: Nastavenie Webového Servera
Posledný projekt spája všetko dohromady. ESP8266 je naprogramovaný tak, aby sa pripojil k vašej lokálnej Wi-Fi sieti a hostil jednoduchú webovú stránku. Táto stránka zobrazuje živé hodnoty teploty a vlhkosti. Kód je upravenou verziou príkladu ESP8266 „HelloServer“. Video ukazuje, ako sa k týmto dátam dostanete zadaním IP adresy zariadenia alebo jeho mDNS mena (napr. robojaxDHT.local) do webového prehliadača na akomkoľvek zariadení pripojenom k rovnakej sieti.
Vysvetlenie Kódu
Keďže celý program je k dispozícii na stiahnutie, táto časť sa zameriava na kľúčové používateľom konfigurovateľné premenné, ktoré budete musieť upraviť pre svoju sieť a preferencie. Kód je upravenou verziou príkladu ESP8266 „HelloServer“. Základná logika zahŕňa čítanie senzora a formátovanie HTML stránky na zobrazenie dát.
Tu sú kritické časti kódu, ktoré budete musieť upraviť:
// Wi-Fi prihlasovacie údaje - TOTO MUSÍTE ZMENIŤ
const char* ssid = "YourWiFiSSID"; // Nahraďte názvom vašej Wi-Fi siete
const char* password = "YourWiFiPassword"; // Nahraďte heslom vašej Wi-Fi siete
Toto je najdôležitejšia časť na zmenu. Premenné ssid a password musia presne zodpovedať vašej lokálnej Wi-Fi sieti. Názov Wi-Fi rozlišuje veľké a malé písmená, preto sa uistite, že ho zadávate správne.
// Konfigurácia senzora DHT11
#define DHTPIN 2 // Digitálny pin pripojený k DHT senzoru (GPIO2)
#define DHTTYPE DHT11 // Typ senzora DHT 11
Tieto definície nastavujú senzor. DHTPIN je GPIO pin na ESP8266, ku ktorému je pripojený dátový vodič senzora (v tomto návode je to GPIO2). DHTTYPE definuje konkrétny model senzora. Ak by ste používali senzor DHT22, odkomentovali by ste riadok pre DHT22 a zakomentovali riadok pre DHT11.
// Konfigurovateľné premenné
const long interval = 3000; // milisekundy medzi čítaniami senzora
char temperature[] = "00.0";
char humidity[] = "00.0";
Premenná interval riadi, ako často sa senzor číta a webová stránka aktualizuje. Predvolená hodnota je 3000 milisekúnd (3 sekundy). Môžete ju zvýšiť na vyššiu hodnotu, napríklad 5000 alebo 10000, aby ste znížili frekvenciu aktualizácií.
Kód tiež obsahuje funkciu, ktorá formátuje hodnotu teploty. Môžete si vybrať, či sa teplota zobrazí v stupňoch Celzia alebo Fahrenheita, úpravou logiky vo funkcii sendTemperature(). Video vysvetľuje, že premenná Tvalue je nastavená tak, aby obsahovala hodnotu v Celziach, ale môžete ju zmeniť na použitie Fahrenheitovej premennej F.
Živá Demonštrácia Projektu
Vo videu je hotový projekt demonštrovaný. Po nahratí kódu a resetovaní modulu sa pripojí k Wi-Fi sieti. Sériový Monitor zobrazuje stav pripojenia a IP adresu zariadenia. Zadaním tejto IP adresy do webového prehliadača môžete vidieť jednoduchú stránku zobrazujúcu aktuálnu teplotu a vlhkosť. Demonštrácia ukazuje hodnoty aktualizované v reálnom čase. Keď sa senzor DHT11 zahreje teplovzdušnou pištoľou, hodnota teploty na webovej stránke sa zodpovedajúco zvýši. Ak je dátový vodič senzora odpojený, stránka zobrazí „None“ pre hodnoty senzora, čo je užitočná funkcia na riešenie problémov.
Kapitoly
- [00:00] Úvod do projektu
- [01:33] Pochopenie ESP8266 a webových serverov
- [05:47] Zapojenie ESP-01 na programovanie
- [08:51] Inštalácia podpory dosky ESP8266 v Arduino IDE
- [11:47] Projekt 1: Blikanie LED pomocou ESP8266
- [20:28] Zapojenie senzora DHT11
- [22:34] Inštalácia knižnice DHT senzora
- [23:13] Projekt 2: Čítanie DHT11 na Sériovom Monitore
- [30:10] Vysvetlenie kódu pre projekt webového servera
- [36:14] Projekt 3: Nahrávanie kódu webového servera
- [38:42] Demonštrácia: Zobrazenie teploty cez Wi-Fi
- [41:43] Záver a riešenie problémov
/*
* 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
Resources & references
No resources yet.
Files📁
Arduino Code (.ino)
-
ESP8266_ESP1_DHT111 codes for Lesson 31 of Sunfounder's 3-in-1
ESP8266_ESP1_DHT111_all.zip9.31 MB
Fritzing File
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
User’s Manual
-
DHT11 User's Manual
robojax-DHT11_manual.pdf0.82 MB