(1)实验平台:
普中ESP32S3开发板https://item.taobao.com/item.htm?id=803002165011(2)资料下载:普中科技-各型号产品资料下载链接
生活中,除了温度指标要求测量外,还有一个非常重要的指标是湿度,温湿度测量应用随处可见,例如智能家居系统中温湿度的测量、农业大棚内温湿度测量等。本章来学习使用 Arduino 控制 DHT11 温湿度传感器,实时读取环境温度和湿度。本章分为如下几部分内容:
18.1 实验介绍
18.1.1 实验简介
温湿度也是我们日常常见的指标,我们使用的是 DHT11 数字温湿度传感器。这是一款含有已校准数字信号输出的温湿度复合传感器。
DHT11 具有小体积、极低的功耗,与 DS18B20 一样是单总线接口,为4针单排引脚封装,连接方便。如下:
这种封装的可直接插入我们开发板 DHT11 传感器接口上使用,当然也可使用DHT11 模块,通过导线连接 IO 口。DHT11 模块如下:
+:电源正极(3-5.5V),OUT:数据口,-:电源负极。
湿度测量范围:20~90%RH,精度±5%RH;
温度测量范围:-20~+60°C,精度±2°C;
DHT11 性价比较高,很适合学习使用,但精度和响应速度有点低,需要更高要求应用的用户可以使用 DHT22 或者其它更高级的传感器。
18.1.2 实验目的
控制 DHT11 温湿度传感器,间隔 2S 读取环境温度和湿度,在软件串口监视器输出。
18.1.3 Arduino 函数使用
Arduino 要实现对 DHT11 的操作,需要 DHT11 库文件。在Arduino IDE 平台,可在库管理器中搜索其对应的驱动包,也可以通过我们下载好的.ZIP 固件包离线安装,具体方法如下:
在软件中选择"项目"-->"导入库"-->"添加.ZIP 库...",选择到本实验目录下的 1 个压缩文件包“arduino-dht-master.zip”安装即可。有关驱动包常见的几种安装方式,前面我们也介绍过。
在使用 DHT11,首先需要实例化一个 DHT 类,例如:
DHT dht;
下面简单介绍一下 DHT 类中常用的一些方法。
18.1.3.1 setup()函数
初始化 DHT 传感器,设置 DHT11 总线的连接管脚号。函数原型:
void setup(uint8_t pin, DHT_MODEL_t model=AUTO_DETECT);
model 参数通常设置为默认值,也可以选择其他温湿度型号,支持的型号如下:
typedef enum {
AUTO_DETECT,
DHT11,
DHT22,
AM2302, // Packaged DHT22
RHT03 // Equivalent to DHT22
} DHT_MODEL_t;
18.1.3.2 getTemperature()函数
获取 DHT11 的温度值。函数原型:
float getTemperature();
18.1.3.3 getHumidity()函数
获取 DHT11 的湿度值。函数原型:
float getHumidity();
18.2 硬件设计
本实验使用到硬件资源如下:
(1)DHT11 温湿度传感器
(2)ESP32 GPIO
DHT11 模块电路如下:
由图可知,DHT11 和 DS18B20 可共用一个接口,J5 端子的DS18B20 脚为DS18B20 和 DHT11 传感器控制口,可将该引脚与 ESP32 的GPIO 连接。如果使用DHT11 模块的可直接将模块通信口与 ESP32 连接,本章实验使用DHT11 模块连接。
18.3 软件设计
下面我们打开“\4--实验程序\1--Arduino 实验\1--基础实验\16-DHT11温湿度传感器实验”程序,控制代码在 main.ino 中,代码如下:
/* 深圳市普中科技有限公司(PRECHIN 普中)
* 在线视频:https://space.bilibili.com/2146492485/video
技术支持:www.prechin.net
*
* 实验名称:DHT11温湿度传感器实验
*
* 接线说明:DHT11温湿度传感器模块-->ESP32 IO
(VCC)-->(3V3)
(DATA)-->(13)
(GND)-->(GND)
*
* 实验现象:程序下载成功后,软件串口控制台间隔2S输出DHT11温湿度传感器采集的温度和湿度
*
* 注意事项:选择"项目"-->"导入库"-->"添加.ZIP库...",选择到本实验目录下的1个压缩文件包“arduino-dht-master.zip”安装即可。
*/
#include "public.h"
#include "DHT.h"
DHT dht;
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);
}
18.4 实验现象
下载程序前,按照如下接线:
将程序下载到开发板内(可参考“2.2.3 程序下载运行”章节),实验现象:间隔 2S 读取环境温度和湿度,在软件串口监视器输出。如下所示: