Search Code

ESP32 Упатство 28/55 - DHT11 Сензор за температура со LCD | SunFounder's ESP32 IoT комплет за учење

ESP32 Упатство 28/55 - DHT11 Сензор за температура со LCD | SunFounder's ESP32 IoT комплет за учење

Во ова упатство, ќе истражиме како да го поврземе сензорот за температура и влажност DHT11 со микроконтролерот ESP32. Користејќи ја оваа поставка, ќе ја измериме амбиенталната температура и влажноста, прикажувајќи ги резултатите и на серискиот монитор и на LCD екранот. Дополнително, ќе имплементираме зумер кој се активира кога температурата ќе надмине одреден праг.

ESP32-28_dht_temperature-sensor-main

Овој проект не само што ја демонстрира употребата на сензорот DHT11, туку ја покажува и разновидноста на ESP32, кој вклучува вградени Wi-Fi и Bluetooth можности. До крајот на ова упатство, ќе имате функционална поставка која континуирано ги следи условите на околината и обезбедува повратна информација во реално време.

За визуелен водич, погледнете го видеото што го придружува ова упатство (во видеото на 00:00). Ајде да започнеме!

Објаснување на хардверот

Главните компоненти користени во овој проект се микроконтролерот ESP32, сензорот DHT11 и LCD дисплејот. ESP32 ќе служи како мозок на операцијата, обработувајќи ги податоците од сензорот DHT11 и контролирајќи го LCD излезот.

Сензорот DHT11 ја мери влажноста и температурата, обезбедувајќи отчитувања преку една линија за податоци. Потребно е напојување од 3.3V до 5.5V и има ниска потрошувачка на струја, што го прави погоден за апликации напојувани со батерии. LCD дисплејот ќе ги прикажува вредностите на температурата и влажноста во реално време.

Детали од податочната табела

Производител GROVE
Број на дел DHT11
Логички/IO напон 3.3 – 5.5 V
Напон на напојување 3.3 V
Излезна струја (по канал) 0.5 mA типично
Врвна струја (по канал) 2.5 mA макс.
Насоки за PWM фреквенција Н/П
Прагови на влезна логика 0.3 VCC (ниско), 0.7 VCC (високо)
Пад на напон / RDS(on) / заситување Не е применливо
Термички граници 0°C до 60°C
Пакет DIP-4
Белешки / варијанти Резолуција: 1°C / 1% RH

 

  • Користете отпорник за повлекување (препорачано 5 kΩ) на линијата за податоци.
  • Чувајте ги жиците на сензорот кратки (помалку од 20 m) за да обезбедите точни отчитувања.
  • Напојувајте го DHT11 со 3.3V за оптимални перформанси.
  • Периодот на земање примероци не треба да биде помал од 1 секунда.
  • Проверете ги жичните врски ако отчитувањата не успеат (на пр., не е поврзано, погрешен пин).

Инструкции за жичање

ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer

За да го поврзете сензорот DHT11 со ESP32, започнете со поврзување на VCC пинот на DHT11 (најлевиот пин) со 3.3V излезот на ESP32. Потоа, поврзете го пинот за заземјување (четвртиот пин) со пин за заземјување (GND) на ESP32. Пинот за податоци (вториот пин) треба да биде поврзан со GPIO пин 14 на ESP32.

За LCD дисплејот, поврзете го VCC пинот со 5V излезот на ESP32. Пинот за заземјување треба да биде поврзан со пин за заземјување на ESP32. SDA и SCL пиновите на LCD дисплејот треба да бидат поврзани со GPIO пиновите 21 и 22, соодветно. Осигурете се дека сите врски се безбедни за да избегнете какви било проблеми при читањето на податоците.

Примери на код и објаснување

Во првиот дел од кодот, го иницијализираме DHT сензорот и го поставуваме бројот на пинот со #define DHTPIN 14. Овој идентификатор ни овозможува лесно да го референцираме пинот поврзан со линијата за податоци на DHT11 низ целиот код.

#include "DHT.h"

#define DHTPIN 14  // Поставете го пинот поврзан со пинот за податоци на DHT11
#define DHTTYPE DHT11 // DHT 11 
DHT dht(DHTPIN, DHTTYPE);

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

Во функцијата setup(), ја иницијализираме сериската комуникација за дебагирање и го започнуваме DHT сензорот. Главната јамка вклучува одложување од 2 секунди за да се осигураме дека не го преоптоваруваме сензорот со барања.

Следно, ги читаме вредностите на влажноста и температурата користејќи float humidity = dht.readHumidity(); и float temperature = dht.readTemperature();. Овие идентификатори ги складираат измерените вредности за подоцнежна употреба.

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

Конечно, проверуваме за какви било грешки при читањето и ги печатиме вредностите на серискиот монитор користејќи Serial.print(). Ова ни овозможува да ги набљудуваме отчитувањата во реално време.

if (isnan(humidity) || isnan(temperature)) {
  Serial.println("Неуспешно читање од DHT сензорот!");
  return;
}
Serial.print("Влажност: "); 
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Температура: "); 
Serial.print(temperature);
Serial.println(" *C");

Во LCD кодот, го иницијализираме LCD дисплејот и ја прикажуваме температурата и влажноста на екранот користејќи ја функцијата lcd.print(). Ова обезбедува визуелна претстава на податоците собрани од сензорот DHT11.

Демонстрација / Што да очекувате

Откако сè е правилно поврзано и кодот е поставен на ESP32, треба да ги видите отчитувањата на температурата и влажноста прикажани на серискиот монитор и на LCD екранот. Ако температурата надмине 30°C, зумерот ќе се активира, обезбедувајќи звучно предупредување.

Бидете внимателни на обратните врски и осигурете се дека сензорот не е изложен на екстремни услови, бидејќи тоа може да влијае на читањата. Можеби ќе треба да ја прилагодите границата за зумерот во зависност од вашите потреби (во видеото на 15:30).

Временски ознаки на видеото

  • 00:00 Почеток
  • 1:57 Вовед во DHT11
  • 6:18 Поврзување на DHT11 со ESP32
  • 7:67 Објаснување на Arduino кодот
  • 11:49 Избор на ESP32 плоча и COM порт во Arduino IDE
  • 13:30 Демонстрација на проектот
  • 15:32 Добивање на Фаренхајт
  • 16:04 Прикажување на температура на LCD со ESP32
  • 17:20 DHT11 и LCD со ESP32 код
  • 19:49 DHT11 LCD демо со ESP32
  • 21:33 Преземање акција врз вредноста на температурата

Images

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
Language: 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
Language: 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("%");
}

Things you might need

Resources & references

Files📁

Fritzing File

User’s Manual