【普中ESP32S3开发攻略--基于Arduino】-- 第 18 章 DHT11温湿度传感器实验

(1)实验平台:

普中ESP32S3开发板https://item.taobao.com/item.htm?id=803002165011(2)资料下载:普中科技-各型号产品资料下载链接


        生活中,除了温度指标要求测量外,还有一个非常重要的指标是湿度,温湿度测量应用随处可见,例如智能家居系统中温湿度的测量、农业大棚内温湿度测量等。本章来学习使用 Arduino 控制 DHT11 温湿度传感器,实时读取环境温度和湿度。本章分为如下几部分内容:

 

18.1 实验介绍

18.1.1 实验简介

18.1.2 实验目的

18.1.3 Arduino 函数使用

18.1.3.1 setup()函数

18.1.3.2 getTemperature()函数

18.1.3.3 getHumidity()函数

18.2 硬件设计

18.3 软件设计

18.4 实验现象


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 读取环境温度和湿度,在软件串口监视器输出。如下所示:

### ArduinoESP32-S3 使用 DHT11 传感器采集温湿度的代码示例 以下是基于 Arduino 平台和 ESP32-S3DHT11 温湿度传感器数据采集代码示例: ```cpp #include "DHT.h" #define DHTPIN 6 // 定义DHT11的数据引脚连接到GPIO6 #define DHTTYPE DHT11 // 设置使用的DHT型号为DHT11 DHT dht(DHTPIN, DHTTYPE); // 创建DHT对象 void setup() { Serial.begin(9600); // 初始化串口通信,波特率为9600 Serial.println("DHT11 Sensor Test"); dht.begin(); // 启动DHT库 } void loop() { 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(" ℃"); delay(2000); // 延迟2秒再重新读取 } ``` #### 解析 上述代码实现了通过 ESP32-S3 板子上的 GPIO6 连接 DHT11 数据线来获取环境中的温湿度信息[^3]。 - `#include "DHT.h"` 是引入用于操作 DHT 系列传感器的第三方库。 - `DHT dht(DHTPIN, DHTTYPE)` 实现了定义一个名为 `dht` 的实例化对象,并指定其工作模式以及所用引脚。 - 在主程序中利用 `readHumidity()` 方法获得当前空气相对湿度百分比数值,而借助于 `readTemperature()` 函数则可以得到对应位置下的实际气温状况。 此段落描述了如何设置硬件连线关系及其初始化过程,同时展示了当检测失败时应采取何种措施以保障系统的稳定性与可靠性。 --- ### MicroPython 下使用 I2C 接口驱动 DHT11 的代码示例 如果希望采用 MicroPython 编程语言,则可以通过如下方式完成相同功能: ```python from machine import Pin, I2C import time import dht i2c = I2C(scl=Pin(22), sda=Pin(21)) # 初始化I2C总线 sensor = dht.DHT11(Pin(4)) # 将DHT11接到ESP32-S3的GPIO4上 while True: try: sensor.measure() # 测量一次 temp = sensor.temperature() # 获取温度 hum = sensor.humidity() # 获取湿度 print(f'Temperature: {temp}°C') print(f'Humidity: {hum}%') except Exception as e: print('Error reading data:', str(e)) time.sleep(2) # 每隔两秒钟测量一次 ``` 这段 Python 脚本同样能够满足需求,不过它依赖的是另一种开发框架——MicroPython,在该环境下需先加载相应的设备驱动支持包才能正常运行[^2]。 注意这里我们并没有真正意义上运用到了 i2c 协议去访问器件而是直接操控 gpio 口模拟信号交互达成目的。 --- ### 注意事项 无论是选用哪种方案都需要确认好各自平台下具体针脚映射规则以免造成不必要的麻烦;另外考虑到不同版本固件可能存在兼容性差异所以建议提前查阅官方文档或者社区资料加以验证后再动手实践[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值