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秒读取一次
}

运行与验证

  1. 按上述接线图连接DHT11到ESP32开发板,将代码上传至开发板(工具→开发板选择ESP32 Dev Module,选择对应COM端口)。
  2. 打开串口监视器(工具→串口监视器),波特率设置为115200。
  3. 观察输出:若接线正确且传感器正常,串口会每2秒打印一行当前温度和湿度,例如:温度: 26.40 °C | 湿度: 58.00 %。该数值会随环境变化而波动。
  4. 判定通过条件:串口持续输出非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天线时可能受热影响,将传感器远离板载发热源或用杜邦线延长。
ESP32 开发板 4 3V G GPIO4 → DATA 3.3V → VCC GND → GND DHT11 温湿度传感器 VCC DATA GND 4.7kΩ 上拉 串口监视器 (115200 baud): 温度: 26.40 °C | 湿度: 58.00 % 温度: 26.50 °C | 湿度: 58.00 % 串口输出