ESP32教程28/55 - DHT11温度传感器与LCD | SunFounder的ESP32物联网学习套件
在本教程中,我们将探讨如何将DHT11温湿度传感器与ESP32微控制器连接。通过这种设置,我们将测量环境温度和湿度,并将结果显示在串行监视器和LCD屏幕上。此外,我们还将实现一个蜂鸣器,当温度超过某个阈值时触发。
该项目不仅演示了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秒。
- 如果读数失败(例如,未连接、引脚错误),请检查接线连接。
接线说明


要将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 对温度值采取行动
#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");
}
/*
* 这是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("%");
}
Common Course Links
Common Course Files
|||您可能需要的东西
-
亚马逊从亚马逊购买DHT11amzn.to
-
Banggood从Banggood购买DHT11模块banggood.com
资源与参考
-
文档ESP32教程 28/55 - SunFounder DHT温度传感器文档页面docs.sunfounder.com
文件📁
Fritzing 文件
-
DHT11 Humitidy and Temperature Sensor (3 pins)
DHT11 Humitidy and Temperature Sensor (3 pins).fzpz0.20 MB
用户手册
-
DHT11 用户手册
robojax-DHT11_manual.pdf0.82 MB