ESP32-S3 控制 DHT11温湿度传感器
ESP32-S3 控制 DHT11 温湿度传感器实验
温湿度采集是物联网项目中最常见的应用之一。
DHT11 是一款廉价且易用的数字温湿度传感器,适合用于室内温湿度监测。
本文介绍如何用 ESP32-S3 读取 DHT11 的温度和湿度数据,并通过串口输出。
一、实验名称
DHT11 温湿度传感器实验
二、接线说明
| DHT11 模块 | ESP32-S3开发板 |
|---|---|
| VCC | 3.3V |
| DATA | 13 |
| GND | GND |
注意事项:
- 如果模块没有上拉电阻,建议在 DATA 引脚和 VCC 之间串联 4.7kΩ 上拉电阻。
- DHT11 传感器测量精度有限,温度 ±2℃,湿度 ±5%RH。
三、实验现象
程序下载成功后,打开串口监视器,每隔 2 秒输出一次温度和湿度数据,例如:
温度=26.0°C 湿度=50.0%RH
温度=26.0°C 湿度=51.0%RH
温度=26.0°C 湿度=50.0%RH
四、注意事项
-
在 Arduino IDE 中,需要安装 DHT11 库:
- arduino-dht-master.zip
安装方法:项目 → 导入库 → 添加 .ZIP 库… → 选择压缩包
- arduino-dht-master.zip
-
DHT11 的采样周期约 1~2 秒,不要频繁读取,否则数据可能不稳定。
五、核心代码
#include "public.h"
#include "DHT.h"
DHT dht; // 创建 DHT11 实例
float temperature;
float humidity;
void setup(){
Serial.begin(115200);
dht.setup(13); // 设置 DHT11 数据引脚
}
void loop(){
humidity = dht.getHumidity(); // 获取湿度
temperature = dht.getTemperature(); // 获取温度
Serial.printf("温度=%.1f°C 湿度=%.1f%%RH\r\n",temperature,humidity);
delay(2000); // 延时 2 秒,符合 DHT11 采样周期
}
六、代码讲解
- 创建 DHT 实例
DHT dht;
用于管理 DHT11 传感器的初始化和数据读取。
- 设置数据引脚
dht.setup(13);
指定 ESP32-S3 的 GPIO 13 为 DHT11 的 DATA 数据引脚。
- 读取温湿度
humidity = dht.getHumidity();
temperature = dht.getTemperature();
getHumidity()返回湿度值,单位为 %RHgetTemperature()返回温度值,单位为 ℃
- 串口输出
Serial.printf("温度=%.1f°C 湿度=%.1f%%RH\r\n", temperature, humidity);
使用 printf 格式化输出,保留一位小数。
七、实验效果
打开串口监视器,波特率 115200,每隔 2 秒显示 DHT11 采集的温湿度:
温度=26.0°C 湿度=50.0%RH
温度=26.0°C 湿度=51.0%RH
温度=26.0°C 湿度=50.0%RH
八、进阶扩展
-
多传感器读取
可以同时连接多个 DHT11 或 DHT22 传感器,通过不同 GPIO 分别采集数据。 -
OLED 显示
将温湿度数据显示在 OLED 屏幕上,更直观。 -
WebServer 展示
ESP32-S3 可以将温湿度数据通过 Wi-Fi 提供 Web 页面实时显示,实现远程监控。 -
温湿度报警
设置阈值,当温度或湿度超过安全范围时触发蜂鸣器、LED 或推送通知。
九、总结
本实验实现了 ESP32-S3 与 DHT11 温湿度传感器的 温度与湿度采集,学习了:
- DHT11 数字温湿度传感器通信
- Arduino DHT 库使用方法
- 温湿度数据读取、格式化输出
- 延时控制采样周期
这是构建智能家居或环境监测系统的基础实验,为进一步 OLED 显示、Web 监控、自动报警 提供了硬件和代码基础。

浙公网安备 33010602011771号