搜索代码

ESP32教程28/55 - DHT11温度传感器与LCD | SunFounder的ESP32物联网学习套件

ESP32教程28/55 - DHT11温度传感器与LCD | SunFounder的ESP32物联网学习套件

在本教程中,我们将探讨如何将DHT11温湿度传感器与ESP32微控制器连接。通过这种设置,我们将测量环境温度和湿度,并将结果显示在串行监视器和LCD屏幕上。此外,我们还将实现一个蜂鸣器,当温度超过某个阈值时触发。

ESP32-28_dht_temperature-sensor-main

该项目不仅演示了DHT11传感器的使用,还展示了ESP32的多功能性,其内置了Wi-Fi和蓝牙功能。在本教程结束时,您将拥有一个持续监测环境条件并提供实时反馈的工作设置。

如需视觉指南,请查看本教程附带的视频(视频中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米),以确保读数准确。
  • 为DHT11提供3.3V电源以获得最佳性能。
  • 采样周期不应少于1秒。
  • 如果读数失败(例如,未连接、引脚错误),请检查接线连接。

接线说明

ESP32-28_dht_temperature-sensor-wiring
DHT11_with_buzzer

要将DHT11传感器连接到ESP32,首先将DHT11的VCC引脚(最左侧引脚)连接到ESP32的3.3V输出。接下来,将接地引脚(第四个引脚)连接到ESP32上的接地(GND)引脚。数据引脚(第二个引脚)应连接到ESP32上的GPIO引脚14。

对于LCD,将VCC引脚连接到ESP32的5V输出。接地引脚应连接到ESP32上的接地引脚。LCD的SDA和SCL引脚应分别连接到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 在Arduino IDE中选择ESP32开发板和COM端口
  • 13:30 项目演示
  • 15:32 获取华氏温度
  • 16:04 使用ESP32在LCD上显示温度
  • 17:20 DHT11和LCD与ESP32的代码
  • 19:49 DHT11 LCD与ESP32演示
  • 21:33 对温度值采取行动

图像

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
语言: C++
#include "DHT.h"

#define DHTPIN 14 // 设置连接到DHT11数据引脚的引脚
#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

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

void loop() {
 // 在测量之间等待几秒钟。
  delay(2000);

 // 读取温度或湿度大约需要250毫秒!
 // 传感器读取的数据可能最多会有2秒的“延迟”(这是一个非常慢的传感器)
  float humidity = dht.readHumidity();
 // 以摄氏度(默认)读取温度
  float temperature = dht.readTemperature();

 // 检查是否有读取失败,并提前退出(以便重试)。
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }
 // 打印湿度和温度
  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
语言: C++
/*
 * 这是Arduino代码,用于使用DHT11/DHT22测量温度和湿度,并在LCD屏幕上显示,由Ahmad Shamshiri为SunFounder的ESP32物联网学习套件编写。观看完整视频 https://youtu.be/qRUFZX4eDJg。本教程的完整代码、电路图和其他资源可在 https://robojax.com/RJT711 找到。
 */
#include "DHT.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>


#define DHTPIN 14 // 设置连接到 DHT11 数据引脚的引脚
#define DHTTYPE DHT11 // DHT 11

DHT dht(DHTPIN, DHTTYPE);

 // 用I2C地址0x27、16列和2行初始化LCD对象
LiquidCrystal_I2C lcd(0x27, 16, 2);

void setup() {

 // 以115200波特率开始串行通信
  Serial.begin(115200);

 // 初始化dht11
  dht.begin();

 // 初始化LCD
  lcd.init();
  lcd.backlight();

 // 清除LCD
  lcd.clear();
}

void loop() {
 // 测量之间请等待几秒钟。
  delay(2000);

 // 读取温度或湿度大约需要250毫秒!
 // 传感器读数可能会有长达2秒的“延迟”(这是一个非常慢的传感器)
  float humidity = dht.readHumidity();
 // 以摄氏度(默认)读取温度
  float temperature = dht.readTemperature();

 // 检查是否有任何读取失败,并提前退出(以便重试)。
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  }

 // 在LCD上显示温度和湿度
  lcd.setCursor(0, 0);
  lcd.print("Temp: ");
  lcd.print(temperature);
  lcd.write(223); // 度数符号
  lcd.print("C");

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

|||您可能需要的东西

资源与参考

文件📁

Fritzing 文件

用户手册