在Arduino下使用RP2040读取DHT11模块温湿度数据

发布时间:2024年01月18日

DHT11是一款数字温湿度传感器模块,它是一款含有已校准数字信号输出的温湿度复合传感器。每个DHT11传感器都在极为精确的湿度校验室中进行校准,校准系数以程序的形式储存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。

DHT11传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11与单片机之间能采用简单的单总线进行通信,仅仅需要一个I/O口。

此外,传感器内部湿度和温度数据40Bit的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11功耗很低,5V电源电压下,工作平均最大电流0.5mA。

数据格式

一次完整的数据传输为40bit,高位先出:8bit湿度整数数据 + 8bit湿度小数数据 + 8bi温度整数数据 + 8bit温度小数数据 + 8bit校验和

通讯步骤

根据时序定义来完成通讯过程

  1. 总线空闲状态为高电平HIGH,主机把总线拉低LOW等待DHT11响应,主机把总线拉低必须大于18ms,保证DHT11能检测到起始信号;
  2. 主机把总线拉高HIGH, 延迟等待20-40ms让DHT11 把总线拉低到LOW?;
  3. 主机检测到总线为LOW后延迟等待80us
  4. 主机检测到总线为HIGH后继续延迟等待80us即可开始进行数据读取;
  5. 主机等待50us,当检测到总线为HIGH时,延时30us再次检测总线状态,根据时序图定义,高电平持续时间大于30us时候为1小于为0即可获取到数据,不断重复8次即可获取到1字节的数据;
  6. 重复执行步骤5,5次即可获取到全部的数据

在这里直接使用arduino中提供的DHT11库

我使用的是树莓派pico开发板来连接DHT11模块,我使用的是GPIO1接OUT脚,具体的针脚参照下图。

代码示例

#include <DHT.h>

#define DHTPIN 1         // 设置DHT11连接的引脚
#define DHTTYPE DHT11    // 设置使用的传感器类型

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

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

void loop() {
  // 读取温湿度传感器的数据
  float humidity = dht.readHumidity();
  float temperature = dht.readTemperature();

  // 检查读取是否成功
  if (isnan(humidity) || isnan(temperature)) {
    Serial.println("无法从DHT传感器读取数据!");
    return;
  }

  // 打印温湿度数据
  Serial.print("湿度: ");
  Serial.print(humidity);
  Serial.print("%\t");
  Serial.print("温度: ");
  Serial.print(temperature);
  Serial.println("°C");

  delay(2000);  // 延迟2秒后再次读取数据
}

读取结果:

文章来源:https://blog.csdn.net/zkl389/article/details/135645195
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。