温湿度传感器
大约 3 分钟ESP32Arduino
本节课我们来学习温湿度传感器。
实验原理
无论是工业领域还是我们的日常生活,温度和湿度一直都是两个比较重要的指标,DHT11 和 DHT22 是 DHT 系列中使用最广泛的两种传感器。它们有着相同的引脚,用法一致,下图是两者的规格对比:

如果拆下传感器的外壳,其实里面只有一个 NTC 热敏电阻和一个湿度传感元件。

湿度传感部件有两个电极,中间有一个保湿基底(通常是盐或导电塑料聚合物)。随着湿度的升高,基板吸收水蒸气,导致离子的释放和两个电极之间电阻的降低。电阻的变化与湿度成正比,可以测量湿度来估计相对湿度。

DHT11 与 DHT22 还包括用于测量温度的 NTC(热敏电阻)。热敏电阻是一种电阻随温度变化的电阻器。从技术上讲,所有电阻器都是热敏电阻,因为它们的电阻随温度略有变化,但这种变化通常非常小,难以测量。热敏电阻的设计使其电阻随温度而急剧变化(每度 100Ω 或更大),而且电阻随着温度的升高而减小。

DHT11 和 DHT22 传感器的连接都相对简单。它们有四个引脚:

VCC
:传感器供电引脚,建议使用 5V 电源。使用 5V 电源,传感器可以放置在 20 米外。在 3.3V 电源电压下,传感器可以放置在 1 米外;Data
:通过串行数据输出温度和湿度;NC
:Not connected
,无连接;GND
:接地;
硬件电路设计
物料清单(BOM 表):
材料名称 | 数量 |
---|---|
LCD1602 液晶屏 IIC | 1 |
DHT11 温湿度传感器 | 1 |
杜邦线(跳线) | 若干 |
面包板 | 1 |
将材料按照下图相连:

软件程序设计
本实验通过 DHT11 读取当前环境的温湿度,并将其打印在 LCD1602 屏幕与串口监视器中。我们这个实验会直接调用 DHT 与 LCD1602 I2C 的第三方库,因此,需要提前在 Arduino IDE 中安装 DHT sensor library
与 LiquidCrystal I2C
第三方库

我们可以先把读取到的数据打印在串口监视器中,代码如下:
#include <DHT.h>
// 初始化 DHT 对象
DHT dht(13, DHT11);
void setup() {
Serial.begin(9600);
dht.begin();
}
void loop() {
// 读取湿度
float humid = dht.readHumidity();
// 读取温度
float temp = dht.readTemperature();
// 显示内容
Serial.print("湿度: ");
Serial.print(humid);
Serial.print("% 温度: ");
Serial.print(temp);
Serial.println("°C ");
delay(2000);
}
最后,我们就可以把从传感器中读取到的数据显示在 LCD1602 屏幕上,代码如下:
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// 声明 LCD1602 I2C 对象
LiquidCrystal_I2C lcd(0x27, 16, 2);
// 初始化 DHT 对象
DHT dht(13, DHT11);
void setup()
{
// 初始化 LCD 对象
lcd.init();
// 打开背光
lcd.backlight();
// 设置串口通信波特率
Serial.begin(9600);
// 初始化 dht 对象
dht.begin();
}
void loop(){
// 读取湿度
float humid = dht.readHumidity();
// 读取温度
float temp = dht.readTemperature();
// 显示内容
Serial.print("湿度: ");
Serial.print(humid);
Serial.print("% 温度: ");
Serial.print(temp);
Serial.println("°C ");
// 清屏
lcd.clear();
// 打印内容在 LCD1602 上
lcd.print("temp: ");
lcd.print(temp);
// 输出度数符号
lcd.write(0xdf); // 也可以写成 lcd.print(char(223))
lcd.print(char(223));
lcd.print("C");
// 换行
lcd.setCursor(0, 1);
lcd.print("humid: ");
lcd.print(humid);
lcd.print("%");
delay(2000);
}
提示
大多数 LCD1602 的 HD44780 控制器 内置了 °
符号,其字符编码为 十进制 223(十六进制 0xDF),可以直接输出。