Caută cod

Lecția 31/31: Măsurarea temperaturii și umidității prin Wi-Fi folosind DHT11 și kitul ESP01 SunFounder

Lecția 31/31: Măsurarea temperaturii și umidității prin Wi-Fi folosind DHT11 și kitul ESP01 SunFounder

Acest ghid de proiect te ghidează prin construirea unui sistem wireless de monitorizare a temperaturii și umidității folosind un modul ESP8266 (ESP-01) și un senzor DHT11. La final, vei avea un dispozitiv care își creează propriul server web, permițându-ți să vizualizezi citirile senzorului în timp real pe orice dispozitiv conectat la rețeaua ta locală, cum ar fi un smartphone, tabletă sau computer. Acesta este un proiect IoT fundamental care demonstrează cum să faci legătura între lumea fizică a senzorilor și lumea digitală a interfețelor web.

Modul ESP8266 ESP01

Abilitățile pe care le înveți aici sunt foarte transferabile. Această configurație exactă poate fi adaptată pentru o gamă largă de aplicații practice, inclusiv:

  • Construirea unei stații de monitorizare remote pentru o seră sau o grădină pentru a asigura condiții optime de creștere.
  • Crearea unui sistem simplu de automatizare a locuinței pentru a monitoriza clima într-o cameră specifică, cum ar fi o cramă sau o cameră de copil.
  • Configurarea unui data logger de mediu cu costuri reduse pentru un proiect științific școlar.
  • Dezvoltarea unui sistem de bază de securitate sau alertă care te poate notifica despre schimbări bruște de temperatură.

Hardware și componente

Pentru a urma acest proiect, vei avea nevoie de următoarele componente. Componentele principale sunt modulul ESP8266 și senzorul DHT11, dar restul sunt esențiale pentru programarea și alimentarea modulului.

  • Modul ESP8266 (ESP-01S): Microcontrolerul principal cu capacitate Wi-Fi integrată.
  • Senzor de temperatură și umiditate DHT11: Senzorul care măsoară datele de mediu.
  • Placă Arduino Uno (pentru conversie USB-to-Serial): În acest proiect, placa principală Arduino nu este folosită pentru puterea sa de procesare. În schimb, cipul său USB-to-serial este folosit pentru a programa modulul ESP8266.
  • Rezistor de 330 ohmi: Folosit pentru testul inițial de clipire a LED-ului pentru a limita curentul.
  • Rezistor de 1k-ohm la 10k-ohm: Un rezistor pull-up pentru linia de date a senzorului DHT11.
  • LED și fire de legătură (jumper wires): Pentru faza de testare și pentru realizarea tuturor conexiunilor necesare.
  • Breadboard: Pentru realizarea conexiunilor circuitului.

Ghid de cablare

Cablare ESP8266 ESP01 și DHT11 pentru lecția 31 din cursul Sunfounder 3-in-1

Procesul de cablare se face în etape. Mai întâi, vom configura circuitul de bază pentru a programa ESP-01. Aceasta implică utilizarea Arduino Uno ca programator. Videoclipul demonstrează această configurare clar. Conexiunile cheie sunt următoarele:

Pentru a intra în modul de programare, trebuie să conectezi pinul IO1 (GPIO1) la Ground (GND). Acest lucru îi spune ESP8266 să aștepte un nou firmware. Restul conexiunilor pentru programare sunt:

  • VCC (3.3V) la EN (Enable): Acest lucru activează modulul.
  • GND la GND: Ground comun pentru circuit.
  • VCC (5V) la VCC (5V): Pentru alimentarea plăcii programatorului.
  • RX (ESP) la TX (Arduino): Pentru comunicarea serială de la programator la modul.
  • TX (ESP) la RX (Arduino): Pentru comunicarea serială de la modul la programator.
  • RST (Reset) la GND: Aceasta este o conexiune temporară folosită pentru a reseta modulul după programare.

Odată ce ESP-01 este programat, cablarea pentru senzor este simplă. Senzorul DHT11 necesită un rezistor pull-up pe linia sa de date pentru a asigura o comunicare stabilă.

Pentru configurarea senzorului, cablarea este următoarea:

  • DHT11 VCC (Pin 1) la 3.3V: Alimentare pentru senzor.
  • DHT11 DATA (Pin 2) la GPIO2 (IO2) pe ESP-01: Linia de date pentru citirile senzorului. Un rezistor pull-up de 1k-ohm la 10k-ohm trebuie conectat între această linie de date și linia de alimentare de 3.3V.
  • DHT11 GND (Pin 4) la GND: Ground comun pentru senzor.

Pregătirea Arduino IDE

Pentru a programa ESP8266, trebuie mai întâi să adaugi suportul pentru placa sa în Arduino IDE. Acest lucru se face în doi pași:

  1. Adaugă URL-ul Board Manager: Mergi la File > Preferences. În câmpul "Additional Boards Manager URLs", lipește următorul URL: http://arduino.esp8266.com/stable/package_esp8266com_index.json și dă click pe "OK".
  2. Instalează pachetul pentru placa ESP8266: Navighează la Tools > Board > Boards Manager.... Caută "esp8266", găsește "esp8266 by ESP8266 Community" și dă click pe "Install". După instalare, poți selecta placa mergând la Tools > Board > ESP8266 Boards > Generic ESP8266 Module.

Instalarea bibliotecii pentru senzorul DHT

Codul se bazează pe o bibliotecă pentru a interfața cu senzorul DHT11. Această bibliotecă trebuie instalată în Arduino IDE.

  1. Mergi la Tools > Manage Libraries....
  2. Caută "DHT sensor library".
  3. Găsește biblioteca de la Adafruit și dă click pe "Install". Această bibliotecă simplifică procesul de citire a datelor de la senzor.

Proiectul 1: Test de clipire LED

Înainte de a intra în detalii despre senzor, este crucial să verificați că puteți programa cu succes ESP-01. Acest lucru se face cu exemplul clasic „Blink". Videoclipul arată un proces de exportare a binarului compilat și utilizarea unui fișier batch separat pentru a-l încărca, ceea ce este o soluție pentru configurația specifică USB-to-serial. Scopul este să vedeți LED-ul integrat clipind, confirmând că lanțul de programare funcționează. Pentru a rula modulul după programare, trebuie să deconectați firul care conectează IO1 la GND și apoi să conectați momentan pinul RST la GND pentru a reseta modulul.

Proiectul 2: Citirea DHT11 pe Monitorul Serial

Odată ce programarea este confirmată, următorul pas este conectarea senzorului DHT11 și citirea datelor sale. Acest proiect folosește exemplul DHTtester din biblioteca de senzori Adafruit DHT. Codul este configurat să utilizeze pinul și tipul de senzor corect. După încărcarea acestui program, puteți deschide Monitorul Serial (setat la 9600 baud) pentru a vedea citirile de temperatură și umiditate.

Proiectul 3: Configurarea Serverului Web

Proiectul final combină totul. ESP8266 este programat să se conecteze la rețeaua Wi-Fi locală și să găzduiască o pagină web simplă. Această pagină afișează citirile live de temperatură și umiditate. Codul este o versiune modificată a exemplului ESP8266 „HelloServer". Videoclipul demonstrează cum să accesați aceste date introducând adresa IP a dispozitivului sau numele său mDNS (de exemplu, robojaxDHT.local) într-un browser web de pe orice dispozitiv conectat la aceeași rețea.

Explicația Codului

Deoarece programul complet este disponibil pentru descărcare, această secțiune se concentrează pe variabilele cheie configurabile de utilizator pe care va trebui să le ajustați pentru propria rețea și preferințe. Codul este o versiune modificată a exemplului ESP8266 „HelloServer". Logica de bază implică citirea senzorului și formatarea unei pagini HTML pentru a afișa datele.

Iată părțile critice ale codului pe care va trebui să le modificați:

// Credențiale Wi-Fi - TREBUIE SĂ LE SCHIMBAȚI
const char* ssid = "YourWiFiSSID"; // Înlocuiți cu numele rețelei Wi-Fi
const char* password = "YourWiFiPassword"; // Înlocuiți cu parola Wi-Fi

Aceasta este cea mai importantă secțiune de schimbat. Variabilele ssid și password trebuie să se potrivească exact cu rețeaua Wi-Fi locală. Numele Wi-Fi este sensibil la majuscule, așa că asigurați-vă că îl introduceți corect.

// Configurarea senzorului DHT11
#define DHTPIN 2     // Pin digital conectat la senzorul DHT (GPIO2)
#define DHTTYPE DHT11   // Tipul senzorului DHT 11

Aceste definiții configurează senzorul. DHTPIN este pinul GPIO de pe ESP8266 la care este conectată linia de date a senzorului (care este GPIO2 în acest ghid). DHTTYPE definește modelul specific al senzorului. Dacă ați folosi un senzor DHT22, ați decomenta linia pentru DHT22 și ați comenta-o pe cea pentru DHT11.

// Variabile configurabile
const long interval = 3000; // milisecunde între citirile senzorului
char temperature[] = "00.0";
char humidity[] = "00.0";

Variabila interval controlează cât de des este citit senzorul și actualizată pagina web. Valoarea implicită este 3000 de milisecunde (3 secunde). Puteți crește această valoare la una mai mare, cum ar fi 5000 sau 10000, pentru a reduce frecvența actualizărilor.

Codul include, de asemenea, o funcție care formatează citirea temperaturii. Puteți alege să afișați temperatura în Celsius sau Fahrenheit modificând logica din funcția sendTemperature(). Videoclipul explică faptul că variabila Tvalue este setată să conțină citirea în Celsius, dar o puteți schimba pentru a folosi variabila Fahrenheit F în schimb.

Demonstrația Live a Proiectului

În videoclip, proiectul finalizat este demonstrat. După ce codul este încărcat și modulul este resetat, acesta se conectează la rețeaua Wi-Fi. Monitorul Serial afișează starea conexiunii și adresa IP a dispozitivului. Navigând la această adresă IP într-un browser web, puteți vedea o pagină simplă care arată temperatura și umiditatea curente. Demonstrația arată citirile actualizându-se în timp real. Când senzorul DHT11 este încălzit cu un pistol de aer cald, citirea temperaturii pe pagina web crește corespunzător. Dacă firul de date al senzorului este deconectat, pagina afișează „None" pentru valorile senzorului, ceea ce este o caracteristică utilă de depanare.

Capitole

  • [00:00] Introducere în Proiect
  • [01:33] Înțelegerea ESP8266 și a Serverelor Web
  • [05:47] Cablarea ESP-01 pentru Programare
  • [08:51] Instalarea Suportului pentru Plăci ESP8266 în Arduino IDE
  • [11:47] Proiectul 1: Clipirea unui LED cu ESP8266
  • [20:28] Cablarea Senzorului DHT11
  • [22:34] Instalarea Bibliotecii pentru Senzorul DHT
  • [23:13] Proiectul 2: Citirea DHT11 pe Monitorul Serial
  • [30:10] Explicația Codului pentru Proiectul Serverului Web
  • [36:14] Proiectul 3: Încărcarea Codului pentru Serverul Web
  • [38:42] Demonstrație: Vizualizarea Temperaturii prin Wi-Fi
  • [41:43] Concluzie și Depanare

Imagini

ESP8266 ESP01 module
ESP8266 ESP01 module
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
ESP8266 ESP01 and DHT11 wiring for lesson 31 Sunfounder 3-in-1 course
895-Lesson 31/31: DHT11 and ESP01 over WiFi code
Limba: C++

 /*
 * 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>&#1585;&#1591;&#1608;&#1576;&#1578; &#1608; &#1581;&#1585;&#1575;&#1585;&#1578; &#1578;&#1608;&#1587;&#1591; &#1583;&#1740; &#1575;&#1670; &#1578;&#1740;</h1>";
      
  page +="<p style=\"font-size:150px;\">&#1581;&#1585;&#1575;&#1585;&#1578;<br/>";  
  page +="<span style=\"color:red; font-size:150px;\">";
  page += String(tValue, 2);
  page +="&#176C</p>";

  page +="<p style=\"font-size:150px;\">&#1585;&#1591;&#1608;&#1576;&#1578;<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
}

Resurse și referințe

Încă nu sunt resurse.

Fișiere📁

Cod Arduino (.ino)

Fișier Fritzing

Manualul utilizatorului