[本系列文章还将陆续介绍其他的传感器模块,欢迎订阅我的博客]

温度和湿度对我们的生活有极大的影响,对它的测量也是很有必要的。

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用于专用的数字模块采集技术和温湿度传感技术,有着极高的可靠性和稳定性,抗干扰,响应快等优点。采用单线制串行接口,信号传输距离可达20M以上。温湿度传感器是四针单排引脚,连接方便。

供电电压是3.3-5.5V直流电,输出是单总线数字信号,温度的测量范围为0-50度,湿度的测量范围是20-90%RH,测量的精度为温度为正负2度,湿度为正负5%RH,温度的分辨率为1度,湿度的分辨率非1%RH。

下图是温湿度传感器与MCU的连接图:

模块的VDD接直流5V电压,GND端接地,DATA端接MCU的所定义的I/O口。

程序如下:需要先定义温湿度传感器连接MCU的I/O口为PB3口,下面这个是DHT11的.c文件(与STM32单片机的连接):

u8 DHT11_Init(void)

{

GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_SetBits(GPIOB,GPIO_Pin_3);
    DHT11_Rst();

return DHT11_Check();

}

需要定义温湿度传感器复位,即DHT11_Rst(),程序如下:

void DHT11_Rst(void)
{
    DHT11_IO_OUT();  //设置输出
    DHT11_DQ_OUT=0;  //GPIOA.0=0
    Delay_ms(20);     //至少18ms拉下来
    DHT11_DQ_OUT=1;  //GPIOA.0=1
    Delay_us(30);               //上拉20~40us

}

需要定义温湿度传感器检查,即DHT11_Check(),程序如下:

u8 DHT11_Check(void)
{
    u8 retry=0;
    DHT11_IO_IN(); //设置输入

while (DHT11_DQ_IN&&retry<100) //DHT11 拉低 40~80us 即是等待低电平

{
        retry++;
        Delay_us(1);
    }

if(retry>=100) 

return 1;   //未检测到温湿度的存在
    else

retry=0;

while (!DHT11_DQ_IN&&retry<100) //DHT11 拉高 40~80us即是等待高电平
    {
        retry++;
        Delay_us(1);
    }
   if(retry>=100)
        return 1;   //温湿度传感器存在
    else

retry=0;

}

读取 DHT11 数值,温度的范围是0-50度,湿度的范围是20%-90%,返回值:0是正常,1是读取失败

u8 DHT11_Read_Data(u8 *temperature,u8 *humidity)
{
    u8 buf[5];
    u8 i;
    DHT11_Rst();                 //先复位温湿度传感器
    if(DHT11_Check()==0)  //如果检查温湿度恒为0
    {
        for(i=0; i<5; i++)        //读取40位数据
        {
            buf[i]=DHT11_Read_Byte();  //读取温湿度的一个字节
        }
        if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
        {
            *humidity=buf[0];
            *temperature=buf[2];
        }
    }
    else
        return 1;
        return 0;

}

从DHT11读取一个字节,既是DHT11_Read_Byte,返回值是读到的数据

u8 DHT11_Read_Byte(void)
{
    u8 i,dat;
    dat=0;
    for (i=0; i<8; i++)
    {
        dat<<=1;
        dat|=DHT11_Read_Bit();
    }
    return dat;

}

从DHT11读取一个位,既是DHT11_Read_Bit,返回值是1或者0:

u8 DHT11_Read_Bit(void)
{
    u8 retry=0;
    while(DHT11_DQ_IN&&retry<100) //等待变为低电平
    {
        retry++;
        Delay_us(1);
    }
    retry=0;
    while(!DHT11_DQ_IN&&retry<100) //等待变为高电平
    {
        retry++;
        Delay_us(1);
    }
    Delay_us(40);        //等待40s
    if(DHT11_DQ_IN)
        return 1;
    else
        return 0;

}

下面这个是DHT11的.H文件(与STM32单片机的连接头文件):

#ifndef _HUM_H
#define _HUM_H

#include <stdio.h>
#include <stm32f10x.h>
#include <stm32f10x_gpio.h>
#include "delay.h"
#include "sys.h"

//I/O口的方向设置
#define DHT11_IO_IN()  GPIO_InitTypeDef GPIO_InitStruct;
                     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
                     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
                     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
                     GPIO_Init(GPIOB, &GPIO_InitStruct);
 
#define DHT11_IO_OUT() GPIO_InitTypeDef GPIO_InitStruct;
                     GPIO_InitStruct.GPIO_Pin = GPIO_Pin_3;
                     GPIO_InitStruct.GPIO_Mode = GPIO_Mode_Out_PP;
                     GPIO_InitStruct.GPIO_Speed = GPIO_Speed_10MHz;
                     GPIO_Init(GPIOB, &GPIO_InitStruct);

#define DHT11_DQ_OUT PBout(3) 
#define DHT11_DQ_IN  PBin(3)

u8 DHT11_Init(void);      //初始化DHT11
u8 DHT11_Read_Data(u8 *temperature,u8 *humidity); //读取 DHT11 数值
u8 DHT11_Read_Byte(void);  //读出一个位
u8 DHT11_Read_Bit(void);    //读出一个字节
u8 DHT11_Check(void);        //检测是否存在DHT11
void DHT11_Rst(void);         //复位 DHT11

#endif

以上需要一步一步的去看,你就能掌温湿度传感器的使用。在接下的文章中还将陆续介绍并利用其他的传感器模块。

[文章未经作者的允许,不得转载]

小白学数字温湿度传感器DHT11模块相关推荐

  1. STM32应用(八)数字温度传感器DS18B20、数字温湿度传感器DHT11(软件模拟I2C)

    文章目录 1.DS18B20 数字温度传感器实验 1.1 DS18B20简介 1.2 硬件与IO口配置 1.3 实物图与接线 1.4 工程配置 1.5 驱动和检测代码编写 1.5.1 ds18b20. ...

  2. 有关温湿度传感器DHT11的C语言编程,数字温湿度传感器DHT11 操作C语言源代码

    1.数字温湿度传感器DHT11 操作C语言源代码 2.带校验 3.带读操作超时处理 //IO定义 #defineP_DataIN_DHT11PB0_IN #defineP_DataOUT_DHT11P ...

  3. 数字温湿度传感器DHT11

    相对湿度和温度测量 全部校准,数字输出 卓越的长期稳定性 无需额外部件 超长的信号传输距离 超低能耗 4引脚安装 DHT11产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合 ...

  4. 数字温湿度传感器(DHT11)

    一.简介 DHT11概述(官方描述) DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性 ...

  5. dht11传感器c语言程序,数字温湿度传感器DHT11 操作C语言源代码

    //IO定义 #define P_DataIN_DHT11 PB0_IN #define P_DataOUT_DHT11 PB0_OUT //宏定义 #define BSET_DHT11 P_Data ...

  6. 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1

    1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...

  7. 【正点原子MP157连载】第二十七章 DHT11数字温湿度传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  8. Arduino之读取DHT11数字温湿度传感器并串口显示

    温度是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度.温度只能通过物体随温度变化的某些特性来间接测量,而用来量度物体温度数值的标尺叫温标.它规定了温度的读数起点(零点)和测量温度的基本 ...

  9. 《ZigBee开发笔记》第五部分 外设篇 - 基础实验 第2章 CC2530温湿度传感器DHT11

    1理论分析 1.1 DHT11 介绍 DHT11 数字温湿度传感器,如图所示,是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓 ...

最新文章

  1. 水星记(Mercury Records)
  2. android viewpager动态加载页面,Android viewpager中动态添加view并实现伪无限循环的方法...
  3. 阿里云https+nginx服务搭建
  4. java反射main方法参数注意
  5. java窗体实现射击_java_Java基于Swing实现的打猎射击游戏代码,本文实例讲述了Java基于Swing实 - phpStudy...
  6. 【老生谈算法】matlab实现拉普拉斯变换及其逆变换算法源码——拉普拉斯变换
  7. 最新Android框架排行榜
  8. unrar file.rar 解压rar 问题,找不到unrar 命令。安装rar unrar流程及bug处理
  9. uni-app云打包失败
  10. JAV spi 和扩展方式
  11. 深蓝学院-多传感器融合定位课程-第2章-3D激光里程计I
  12. 倍思 O HUB Type-C多功能转换器 兼容多设备 快速拔插使用简单倍思 O
  13. php程序主入口,主:(index.php)入口
  14. 大厂挑完、中厂捡漏、小厂最现实,想拿高薪offer,刚毕业的我这样曲线救国
  15. bzoj 4455 [Zjoi2016]小星星 树形dp容斥
  16. 微信读书(课程总结)
  17. Geoscene Enterprise2.1 windows环境下的安装部署
  18. GPU performance tunning
  19. linux mint方便快捷安装android studio
  20. 史上最糟糕的两个变量名

热门文章

  1. amd没有relive选项卡_AMD ReLive——为直播而生,不止于直播,还是多面手
  2. Gin+Fail2ban+Cloudfare实现防爆破等
  3. HTML5花瓣飘落动画js特效canvas
  4. 项目管理是一个什么样的职位,具体都做些什么事情?
  5. 胖虎谈ImageLoader框架(一)
  6. 校园表白墙搭建教程及源码分享-麻木博客
  7. Python实现 七段数码管绘制(嵩天老师)
  8. $('xx')[0].files[0]是什么意思,Ajax上传文件至springMVC的controller
  9. 运维服务体系总结(思维导图)
  10. Android项目实战系列—基于博学谷(六)习题模块