基于Arduino ESP32 DHT11 温湿度传感器实验案例
前言
DHT11 是一款有已校准数字信号输出的温湿度传感器。其精度湿度+/-5%RH,温度+/-2°C,量程湿度20-90%RH, 温度0~50°C。DHT11 数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。
传感器包括一个电阻式感湿元件和一个 NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11 传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。
1. 模块引脚
2. 应用电路(简化,Proteus)
3. 硬件连接
I2C LCD1602 PIN | ESP32-PIN | DHT11-PIN |
---|---|---|
GND | GND | - |
VCC | +5V | + |
SDA | SDA | / |
SCL | SCL | / |
/ | 17 | OUT(SIG) |
4. 程序源代码
/********************************************
文件名:32.dht_test.ino
版本:V3.0
说明:DHT11 湿度传感器检测实验
********************************************/
#include <DHT.h> // DHT.h 包含DHT11,DHT12,DHT21,DHT22,AM2301 5种型号的传感器。
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27,16,2); // 设置LCD地址为0x27和0x3F为16字符和2行显示
#define DHTTYPE DHT11 // 定义实际使用的传感器类型
#define DHTPIN 17 // 温度传感器连接到pin17
DHT dht(DHTPIN, DHTTYPE); //DHT.h 内的用法 DHT(uint8_t pin, uint8_t type, uint8_t count = 6), count可以不用写入。
void setup()
{
Serial.begin(9600); // 初始化串行
lcd.init(); // 初始化液晶
lcd.backlight(); // 打开背光
dht.begin(); // 启动 DHT
}
void loop()
{
float h = dht.readHumidity(); // 读取湿度数据,数据类型为 float, 参考 DHT.h 内的定义
float t = dht.readTemperature(); // 读取温度数据,数据类型为 float, 参考 DHT.h 内的定义
if (isnan(h) || isnan(t)) //isnan()函数用于检查一个浮点数是否为"Not a Number"(NaN)。当进行数学运算时,如果结果无法表示为一个数字(例如,0除以0),Arduino就会返回一个NaN值。这个值在Arduino中被特别处理,可以通过isnan()函数来检测。如果函数返回true,表示该值是NaN;如果返回false,则表示该值不是NaN。
{
Serial.println(F("Failed to read from DHT sensor!"));
return;
}
// 显示数据
lcd.setCursor(1, 0); //第1列,第0行
lcd.print("Tem:");
//Serial.print("Tem:");
lcd.print(t,1); // 在lcd上打印温度
// Serial.print(DHT.temperature,1);
lcd.print(char(223));// 打印单位“℃”
lcd.print("C");
// Serial.println(" C");
lcd.setCursor(3, 1); //第3列,第1行
lcd.print("Hum:");
//Serial.print("Hum:");
lcd.print(h,1); // 在LCD上打印湿度
//Serial.print(DHT.humidity,1);
lcd.print(" %");
//Serial.println(" %");
delay(2000); // 延时2000毫秒
}
5. Proteus 仿真
6. 实例输出
(显示时故意错开输出,方便像我一样的小白理解代码)