Hľadať kód

Návod na ESP32 28/55 - DHT11 teplotný senzor s LCD | SunFounder's ESP32 IoT výučbová súprava

Návod na ESP32 28/55 - DHT11 teplotný senzor s LCD | SunFounder's ESP32 IoT výučbová súprava

V tomto návode si ukážeme, ako pripojiť DHT11 senzor teploty a vlhkosti k mikrokontroléru ESP32. Pomocou tohto zapojenia budeme merať okolitú teplotu a vlhkosť, pričom výsledky zobrazíme na sériovom monitore aj na LCD obrazovke. Okrem toho implementujeme bzučiak, ktorý sa aktivuje, keď teplota prekročí určitú hranicu.

ESP32-28_dht_temperature-sensor-main

Tento projekt nielenže demonštruje použitie DHT11 senzora, ale tiež ukazuje všestrannosť ESP32, ktorý obsahuje vstavané Wi-Fi a Bluetooth možnosti. Na konci tohto návodu budete mať funkčné zapojenie, ktoré nepretržite monitoruje podmienky prostredia a poskytuje spätnú väzbu v reálnom čase.

Pre vizuálny návod si pozrite video, ktoré sprevádza tento tutoriál (vo videu v čase 00:00). Poďme na to!

Vysvetlenie hardvéru

Hlavné komponenty použité v tomto projekte sú mikrokontrolér ESP32, senzor DHT11 a LCD displej. ESP32 bude slúžiť ako mozog operácie, spracovávať dáta zo senzora DHT11 a riadiť výstup na LCD.

Senzor DHT11 meria vlhkosť a teplotu, pričom poskytuje hodnoty cez jediný dátový vodič. Vyžaduje napájanie 3,3V až 5,5V a má nízku spotrebu prúdu, vďaka čomu je vhodný pre aplikácie napájané batériou. LCD zobrazí hodnoty teploty a vlhkosti v reálnom čase.

Podrobnosti z datasheetu

Výrobca GROVE
Označenie dielu DHT11
Logické/IO napätie 3,3 – 5,5 V
Napájacie napätie 3,3 V
Výstupný prúd (na kanál) 0,5 mA typ.
Špičkový prúd (na kanál) 2,5 mA max.
Odporúčanie pre PWM frekvenciu N/A
Vstupné logické prahy 0,3 VCC (nízka), 0,7 VCC (vysoká)
Pokles napätia / RDS(on) / saturácia Nepoužiteľné
Tepelné limity 0°C až 60°C
Puzdro DIP-4
Poznámky / varianty Rozlíšenie: 1°C / 1% RH

 

  • Použite pull-up rezistor (odporúčaných 5 kΩ) na dátovom vodiči.
  • Udržujte vodiče senzora krátke (menej ako 20 m), aby ste zabezpečili presné merania.
  • Napájajte DHT11 napätím 3,3V pre optimálny výkon.
  • Perióda vzorkovania by nemala byť kratšia ako 1 sekunda.
  • Skontrolujte zapojenie, ak merania zlyhajú (napr. nie je pripojené, nesprávny pin).

Pokyny na zapojenie

ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer

Na zapojenie senzora DHT11 k ESP32 začnite pripojením pinu VCC senzora DHT11 (najľavejší pin) k 3,3V výstupu ESP32. Ďalej pripojte uzemňovací pin (štvrtý pin) k uzemňovaciemu (GND) pinu na ESP32. Dátový pin (druhý pin) by mal byť pripojený k GPIO pinu 14 na ESP32.

Pre LCD pripojte pin VCC k 5V výstupu ESP32. Uzemňovací pin by mal byť pripojený k uzemňovaciemu pinu na ESP32. Piny SDA a SCL LCD by mali byť pripojené k GPIO pinom 21 a 22. Uistite sa, že všetky spojenia sú pevné, aby ste predišli problémom pri čítaní dát.

Príklady kódu a vysvetlenie

V prvej časti kódu inicializujeme DHT senzor a nastavíme číslo pinu pomocou #define DHTPIN 14. Tento identifikátor nám umožňuje jednoducho odkazovať na pin pripojený k dátovému vodiču DHT11 v celom kóde.

#include "DHT.h"

#define DHTPIN 14  // Nastavte pin pripojený k dátovému pinu DHT11
#define DHTTYPE DHT11 // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  dht.begin();
}

Vo funkcii setup() inicializujeme sériovú komunikáciu pre ladenie a spustíme DHT senzor. Hlavná slučka obsahuje oneskorenie 2 sekundy, aby sme zabezpečili, že senzor nepreťažíme požiadavkami.

Ďalej čítame hodnoty vlhkosti a teploty pomocou float humidity = dht.readHumidity(); a float temperature = dht.readTemperature();. Tieto identifikátory ukladajú namerané hodnoty pre neskoršie použitie.

void loop() {
  delay(2000);
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();
}

Nakoniec skontrolujeme prípadné chyby čítania a vytlačíme hodnoty na sériový monitor pomocou Serial.print(). To nám umožňuje pozorovať hodnoty v reálnom čase.

if (isnan(humidity) || isnan(temperature)) {
  Serial.println("Nepodarilo sa prečítať z DHT senzora!");
  return;
}
Serial.print("Vlhkosť: "); 
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Teplota: "); 
Serial.print(temperature);
Serial.println(" *C");

V LCD kóde inicializujeme LCD a zobrazíme teplotu a vlhkosť na obrazovke pomocou funkcie lcd.print(). To poskytuje vizuálnu reprezentáciu dát zozbieraných senzorom DHT11.

Demonštrácia / Čo očakávať

Keď je všetko správne zapojené a kód je nahraný do ESP32, mali by ste vidieť hodnoty teploty a vlhkosti zobrazené na sériovom monitore a LCD obrazovke. Ak teplota prekročí 30°C, bzučiak sa aktivuje a poskytne zvukový alarm.

Buďte opatrní pri obrátených pripojeniach a zaistite, aby senzor nebol vystavený extrémnym podmienkam, pretože to môže ovplyvniť namerané hodnoty. Možno budete musieť upraviť prah pre bzučiak podľa vašich požiadaviek (vo videu v čase 15:30).

Časové značky videa

  • 00:00 Začiatok
  • 1:57 Úvod k DHT11
  • 6:18 Zapojenie DHT11 s ESP32
  • 7:67 Vysvetlenie kódu pre Arduino
  • 11:49 Výber dosky ESP32 a COM portu v Arduino IDE
  • 13:30 Ukážka projektu
  • 15:32 Získanie hodnoty vo Fahrenheitoch
  • 16:04 Zobrazenie teploty na LCD pomocou ESP32
  • 17:20 Kód pre DHT11 a LCD s ESP32
  • 19:49 Ukážka DHT11 LCD s ESP32
  • 21:33 Reakcia na hodnotu teploty

Obrázky

ESP32-28_dht_temperature-sensor-library
ESP32-28_dht_temperature-sensor-library
ESP32-28_dht_temperature-sensor-schematic
ESP32-28_dht_temperature-sensor-schematic
ESP32-28_dht_temperature-sensor-wiring
ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer
DHT11_with_buzzer
ESP32-28_dht_temperature-sensor-main
ESP32-28_dht_temperature-sensor-main
828-ESP32 Tutorial 28/55- Arduino code for DHT Temperature sensor
Jazyk: C++
#include "DHT.h"

#define DHTPIN 14  // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11 // DHT 11 

DHT dht(DHTPIN, DHTTYPE);

void setup() {
  Serial.begin(115200);
  Serial.println("DHT11 test!");
  dht.begin();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
  // Print the humidity and temperature
  Serial.print("Humidity: "); 
  Serial.print(humidity);
  Serial.print(" %\t");
  Serial.print("Temperature: "); 
  Serial.print(temperature);
  Serial.println(" *C");
}
829-ESP32 Tutorial 28/55- Arduino code for DHT Temperature sensor with LCD
Jazyk: C++
/*
This is Arduino code to measure temperature and humidity using DHT11/DHT22 and displays it on LCD screen
written by Ahmad Shamshiri for SunFounder's ESP32 IoT learning kit
watch full video https://youtu.be/qRUFZX4eDJg
Full code, wiring diagram and other resources for this tutorial is at https://robojax.com/RJT711
*/
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


#define DHTPIN 14      // Set the pin connected to the DHT11 data pin
#define DHTTYPE DHT11  // DHT 11

DHT dht(DHTPIN, DHTTYPE);

// Initialize the LCD object with I2C address 0x27, 16 columns, and 2 rows
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

  // Begin serial communication at 115200 baud
  Serial.begin(115200);

  // Initialize the dht11
  dht.begin();

  // Initialize the LCD
  lcd.init();
  lcd.backlight();

  // Clear the LCD
  lcd.clear();
}

void loop() {
  // Wait a few seconds between measurements.
  delay(2000);

  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (it's a very slow sensor)
  float humidity = dht.readHumidity();
  // Read temperature as Celsius (the default)
  float temperature = dht.readTemperature();

  // Check if any reads failed and exit early (to try again).
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

  // Display temperature and humidity on the LCD
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.write(223);  // Degree symbol
  lcd.print("C");

  lcd.setCursor(0, 1);
  lcd.print("Humi: ");
  lcd.print(humidity);
  lcd.print("%");
}

Veci, ktoré by ste mohli potrebovať

Zdroje a referencie

Súbory📁

Súbor Fritzing

Používateľská príručka