ESP32设备驱动-DHT12温湿度传感器驱动

DHT12温湿度传感器驱动

1、DHT12介绍

DHt12是经典DHT11温湿度传感器的升级版,完全向下兼容,精度更高,增加了I2C接口。

DHT12 具有单总线和标准 I 2C 两种通讯,且单总线通讯方式完全兼容 DHT11。标准单总线接口,使系统集成变得简易快捷。具有超小的体积、较低的功耗,适合多种多样的应用场合。I2C通信方式采用标 准的通信时序,用户可直接挂 I2C通信总线上,无需额外布线,使用简单。两种通信方式可自由切换,用户可自由选择,使用方便,应该领域广泛。产品为4引线,连接方便,特殊封装形式可根据用户需求而提供。

有如下特性:

  • 紧凑的尺寸
  • 低功耗
  • 低电压操作
  • 标准 I2C 和 1 线接口。
  • 感应范围
    • 温度:-20~+60℃
    • 湿度:20-95 RH
  • 湿度:
    • 分辨率:0.1%RH
    • 重复:-+ 1%RH
    • 精度 25C @ -+5RH
  • 温度:
    • 分辨率:0.1C
    • 重复:-+0.2C
    • 精度:25C@-+0.5C
  • 电源:DC 2.7-5.5V
  • 正常电流1mA
  • 待机电流 60uA
  • 采样周期:> 2 秒

在这里插入图片描述

DHT12 支持 I2C方式进行通讯,完全按照 I2C 标准协议编制,可直接挂在I 2C 总线上;传感器SDA引脚作接 I2C 数据总线,SCL 接 I2C 时钟总线,客户使用时需给这两个引脚接一个1KΩ~10KΩ的上拉电阻。I2C地址为 0xB8(DEV SEL); I2C 通讯速率不能高于 400KHZ。

在这里插入图片描述

2、硬件准备

  • ESP32 NodeMCU V3开发板一块
  • DHT12传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP32开发板引脚
Vin 3.3v
Gnd Gnd
SCL 22
SDA 21

3、软件准备

  • Arduino IDE

在前面的文章中,对如何搭建ESP32开发环境做了详细的介绍,请参考:

4、驱动实现

本实例使用的驱动库如下:

扫描二维码关注公众号,回复: 14846113 查看本文章
  • https://github.com/xreef/DHT12_sensor_library

示例代码如下:

#include "Arduino.h"
 
#include <DHT12.h>
 
// 创建设备
DHT12 dht12;

int timeSinceLastRead = 0; 

void setup(){
    
    
    Serial.begin(112560);
    // 启动设备
    dht12.begin();
}

 
void loop(){
    
    
    // 
    if(timeSinceLastRead > 2000) {
    
    
        // 读取摄氏温度值
        float t12 = dht12.readTemperature();
        // 读取华氏温度值
        float f12 = dht12.readTemperature(true);
        // 读取湿度值
        float h12 = dht12.readHumidity();

        bool dht12Read = true;
        // 检测数据有效性
        if (isnan(h12) || isnan(t12) || isnan(f12)) {
    
    
        	Serial.println("Failed to read from DHT12 sensor!");
        	dht12Read = false;
   		 }

        if (dht12Read){
    
    
            // Compute heat index in Fahrenheit (the default)
            float hif12 = dht12.computeHeatIndex(f12, h12);
            // Compute heat index in Celsius (isFahreheit = false)
            float hic12 = dht12.computeHeatIndex(t12, h12, false);
            // Compute dew point in Fahrenheit (the default)
            float dpf12 = dht12.dewPoint(f12, h12);
            // Compute dew point in Celsius (isFahreheit = false)
            float dpc12 = dht12.dewPoint(t12, h12, false);

            Serial.print("DHT12=> Humidity: ");
            Serial.print(h12);
            Serial.print(" %\t");
            Serial.print("Temperature: ");
            Serial.print(t12);
            Serial.print(" *C ");
            Serial.print(f12);
            Serial.print(" *F\t");
            Serial.print(" Heat index: ");
            Serial.print(hic12);
            Serial.print(" *C ");
            Serial.print(hif12);
            Serial.print(" *F");
            Serial.print(" Dew point: ");
            Serial.print(dpc12);
            Serial.print(" *C ");
            Serial.print(dpf12);
            Serial.println(" *F");
        }
    	timeSinceLastRead = 0;
    }
    delay(100);
    timeSinceLastRead += 100;

}

猜你喜欢

转载自blog.csdn.net/wujuxKkoolerter/article/details/129725124