ESP8266读取DHT11温湿度传感器数据实战

2025-06发布4次浏览

在物联网项目中,ESP8266模块因其强大的WiFi功能和低成本,成为许多开发者的选择。结合DHT11温湿度传感器,我们可以轻松实现环境数据的采集与传输。本文将详细介绍如何使用ESP8266读取DHT11温湿度传感器的数据,并通过串口或网络进行展示。


一、硬件准备

在开始编程之前,需要准备好以下硬件:

  1. ESP8266开发板(如NodeMCU)
  2. DHT11温湿度传感器
  3. 杜邦线
  4. 面包板

硬件连接

DHT11有三个引脚:VCC、DATA、GND。连接方式如下:

  • VCC 连接到 ESP8266 的 3.3V 引脚。
  • GND 连接到 ESP8266 的 GND 引脚。
  • DATA 连接到 ESP8266 的 GPIO 引脚(例如 D2/GPIO4)。

二、软件环境搭建

  1. 安装Arduino IDE
    下载并安装Arduino IDE,这是开发ESP8266项目的常用工具。

  2. 配置ESP8266支持
    在Arduino IDE中添加ESP8266的支持库:

    • 打开 文件 > 偏好设置,在“附加开发板管理器网址”中输入:http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 打开 工具 > 开发板 > 开发板管理器,搜索并安装 esp8266
  3. 安装DHT库
    使用Arduino库管理器安装DHT传感器库

    • 打开 工具 > 管理库,搜索 DHT sensor library 并安装。

三、代码实现

1. 初始化DHT传感器

在代码中,我们需要初始化DHT传感器,并指定其数据引脚和类型。

#include <DHT.h>

#define DHTPIN 4     // DHT11 数据引脚连接到 GPIO4 (D2)
#define DHTTYPE DHT11 // 使用 DHT11 传感器

DHT dht(DHTPIN, DHTTYPE); // 创建 DHT 对象

2. 设置函数

setup()函数中初始化串口通信和DHT传感器。

void setup() {
  Serial.begin(9600); // 初始化串口通信
  dht.begin();         // 初始化 DHT 传感器
}

3. 循环读取数据

loop()函数中,周期性地读取温度和湿度数据,并通过串口打印结果。

void loop() {
  delay(2000); // 每隔2秒读取一次数据

  // 读取温湿度数据
  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(" *C");
}

四、运行效果

上传代码后,打开Arduino IDE的串口监视器(波特率设置为9600),可以看到类似以下输出:

Humidity: 55.00 %
Temperature: 25.00 *C

如果数据读取失败,请检查硬件连接是否正确,或者尝试更换DHT11传感器。


五、扩展应用

  1. 通过WiFi发送数据
    可以利用ESP8266的WiFi功能,将温湿度数据上传到云端平台(如Thingspeak、Blynk等)。以下是简单的WiFi连接代码片段:

    #include <ESP8266WiFi.h>
    
    const char* ssid = "your_SSID"; // WiFi名称
    const char* password = "your_PASSWORD"; // WiFi密码
    
    void setup() {
      WiFi.begin(ssid, password); // 连接WiFi
      while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Connecting to WiFi...");
      }
      Serial.println("Connected to WiFi");
    }
    
  2. 绘制温湿度曲线
    结合OLED显示屏或Web页面,可以实时显示温湿度变化曲线。

  3. 报警功能
    当温度或湿度超出设定范围时,触发蜂鸣器或LED灯报警。


六、流程图

以下是程序逻辑的Mermaid流程图:

graph TD;
    A[启动] --> B[初始化DHT传感器];
    B --> C[初始化串口];
    C --> D[进入主循环];
    D --> E{读取温湿度};
    E --成功--> F[打印数据];
    E --失败--> G[打印错误信息];
    F --> H[等待2秒];
    G --> H;
    H --> D;