4. 读取温度传感器并显示
任务目标
连接DHT11温湿度传感器到开发板,读取温度数据并在终端串口输出,实现基础环境感知。本案例以ESP32开发板和DHT11为例,使用Arduino框架完成最小可复现闭环。
硬件与依赖
- 硬件:ESP32开发板、DHT11传感器、4.7kΩ上拉电阻(部分模块已集成)、面包板与跳线
- 接线:DHT11 VCC→3.3V,GND→GND,DATA→GPIO4(示例引脚,可修改)
- 软件:Arduino IDE 2.x,安装ESP32开发板包(文件→首选项→附加开发板管理器URL添加
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json,然后在开发板管理器搜索安装esp32),安装DHT sensor library(由Adafruit维护,会自动安装Adafruit Unified Sensor库作为依赖)
完整代码
#include <DHT.h>
#define DHTPIN 4 // DHT11数据引脚连接到GPIO4
#define DHTTYPE DHT11 // 定义传感器类型为DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
Serial.println(F("DHT11 温度传感器测试开始"));
dht.begin();
delay(1000); // 等待传感器稳定
}
void loop() {
// 读取湿度(百分比)和温度(摄氏度)
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
// 检查读取是否失败(例如传感器未连接或接线错误)
if (isnan(humidity) || isnan(temperature)) {
Serial.println(F("读取失败!请检查传感器接线"));
delay(2000);
return;
}
// 在串口终端显示读取结果
Serial.print(F("温度: "));
Serial.print(temperature);
Serial.print(F(" °C | 湿度: "));
Serial.print(humidity);
Serial.println(F(" %"));
delay(2000); // DHT11采样周期至少1秒,这里每2秒读取一次
}
运行与验证
- 按上述接线图连接DHT11到ESP32开发板,将代码上传至开发板(工具→开发板选择ESP32 Dev Module,选择对应COM端口)。
- 打开串口监视器(工具→串口监视器),波特率设置为115200。
- 观察输出:若接线正确且传感器正常,串口会每2秒打印一行当前温度和湿度,例如:
温度: 26.40 °C | 湿度: 58.00 %。该数值会随环境变化而波动。 - 判定通过条件:串口持续输出非NaN的温度和湿度数值,且用手捏住传感器时温度读数明显上升(约1~2°C),松开后逐渐回落,说明传感器读取与显示功能正常。
常见问题
- 输出NaN或“读取失败”:检查DATA引脚是否确实连接到GPIO4,确认VCC接3.3V而非5V(部分模块支持5V,但3.3V更安全),并确认上拉电阻已连接(若使用模块通常已集成)。
- 编译报错找不到DHT.h:在Arduino IDE的库管理器中搜索“DHT sensor library”并安装,同时确认Adafruit Unified Sensor库也已安装。
- 温度读数明显偏高:DHT11靠近ESP32芯片或WiFi天线时可能受热影响,将传感器远离板载发热源或用杜邦线延长。