Search Code

Lekcia 31/31: Meranie teploty a vlhkosti cez Wi-Fi pomocou DHT11 a ESP01 SunFounder Kit

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í.

Modul ESP8266 ESP01

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

Zapojenie esp8266 ESP01 a DHT11 pre lekciu 31 kurzu Sunfounder 3-v-1

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:

  1. 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.json a kliknite na "OK".
  2. 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 na Ná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.

  1. Prejdite na Nástroje > Spravovať knižnice....
  2. Vyhľadajte "DHT sensor library".
  3. 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

Images

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
Language: 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
}

Resources & references

No resources yet.

Files📁

Arduino Code (.ino)

Fritzing File

User’s Manual