DHT11(STM32)驱动

**

##本驱动使用STM32F103ZET6开发板亲测可用,DHT11驱动程序如下:

**

dht11.c

#include "dht11.h"
#include "delay.h"    /** 函数名:DHT11_GPIO_Config* 描述  :配置DHT11用到的I/O口* 输入  :无* 输出  :无*/void DHT11_GPIO_Config(void)
{GPIO_InitTypeDef GPIO_InitStructure;   //GPIORCC_APB2PeriphClockCmd(   RCC_APB2Periph_GPIOA, ENABLE );  //使能PORTA口时钟  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  //SPI CSGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);/* Deselect the PA0 Select high */GPIO_SetBits(GPIOA,GPIO_Pin_0);
}
/** 函数名:DHT11_Mode_IPU* 描述  :使DHT11-DATA引脚变为输入模式* 输入  :无* 输出  :无*/
void DHT11_Mode_IPU(void)
{GPIO_InitTypeDef GPIO_InitStructure;   //GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  //SPI CSGPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;  //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);}
/** 函数名:DHT11_Mode_Out* 描述  :使DHT11-DATA引脚变为输出模式* 输入  :无* 输出  :无*/
void DHT11_Mode_Out(void)
{GPIO_InitTypeDef GPIO_InitStructure;   //GPIOGPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;  //SPI CSGPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;  //复用推挽输出GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);}/**主机给从机发送复位脉冲*/
void DHT11_Rst(void)
{        /* IO设置为推挽输出*/ DHT11_Mode_Out(); /*产生至少20ms的低电平复位信号 */DHT11_DQ_OUT_Low; DelayMs(20);  /* 在产生复位信号后,需将总线拉高 */ DHT11_DQ_OUT_High; DelayUs(30);     DHT11_Mode_IPU(); }/** 检测从机给主机返回的应答脉冲*从机接收到主机的复位信号后,会在15~60us后给主机发一个应答脉冲* 0:成功* 1:失败*/
u8 DHT11_Answer_Check(void)
{     uint8_t retry = 0;DHT11_Mode_IPU();while(DHT11_DQ_IN && retry < 100){retry ++;DelayUs(1);}if(retry >= 100){return 1;}else{retry = 0;}while(!DHT11_DQ_IN && retry <100){retry ++;DelayUs(1);}if(retry >= 100){return 1;}return 0;
}//从DHT11读取一个位
//返回值:1/0
u8 DHT11_Read_Bit(void)              // read one bit
{uint8_t retry;while(DHT11_DQ_IN && retry < 100){retry ++;DelayUs(1);}retry = 0;while(!DHT11_DQ_IN && retry < 100){retry ++;DelayUs(1);}DelayUs(40);if(DHT11_DQ_IN){return 1;}else{return 0;}}//从DHT11读取一个字节
//返回值:读到的数据
u8 DHT11_Read_Byte(void)    // read one byte
{        u16 i,dat=0;for(i=0; i<8; i++) {dat <<= 1;dat |= DHT11_Read_Bit();}                     return dat;
}//初始化DHT11的IO口 DQ 同时检测DS的存在
//返回1:不存在
//返回0:存在
u8 DHT11_Init(void)
{DHT11_GPIO_Config();DHT11_Rst();return DHT11_Answer_Check();
}
//从DHT11得到温度值
//精度:+/-2C
//返回值:温度值 (0~50)
u8 DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
{uint8_t buf[5],i;DHT11_Rst();if(DHT11_Answer_Check() == 0 ){//检测到DHT11响应for(i = 0; i < 5 ; i++){buf[i] = DHT11_Read_Byte();               }if((buf[0]+buf[1]+buf[2]+buf[3]) == buf[4]){*humi = buf[0]+buf[1];*temp = buf[2]+buf[3];}}else{return 1;}return 0;
} 

dht11.h

#ifndef __DHT11_H
#define __DHT11_H #include "stm32f10x.h"#define DHT11_DQ_OUT_Low GPIO_ResetBits(GPIOA,GPIO_Pin_0)  //数据端口 PB11
#define DHT11_DQ_OUT_High GPIO_SetBits(GPIOA,GPIO_Pin_0)  //数据端口    PB11
#define DHT11_DQ_IN GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0)   //数据端口    PB11void DHT11_GPIO_Config(void);void DHT11_Mode_IPU(void);
void DHT11_Mode_Out(void);u8 DHT11_Init(void);//初始化DHT11
u8 DHT11_Read_Data(uint8_t *temp,uint8_t *humi);u8 DHT11_Read_Byte(void);//读出一个字节
u8 DHT11_Read_Bit(void);//读出一个位u8 DHT11_Answer_Check(void);//检测是否存在DHT11void DHT11_Rst(void);//复位DHT11#endif

main函数

int main()
{uint8_t dht11_temp = 0;uint8_t dht11_humi = 0;Configuration();while(1){DHT11_Read_Data(&dht11_temp,&dht11_humi);printf("temperature=%.0f℃,   humidness=%.0f %c",(double)dht11_temp,(double)dht11_humi,'%');        DelayMs(1000);} }

注:温湿度读取间隔不得低于2S,读取过,测量温湿度不准
如有不明之处请在下方评论区留言或加QQ:2980828094

DHT11温湿度模块驱动程序相关推荐

  1. STM32的 DHT11温湿度模块+红外人体感应模块程序

    基于物联网的智能窗户Day3 DHT11温湿度模块 HC_SR501红外人体感应模块 结果展示 ending DHT11温湿度模块 传感器包括一个高分子电阻式感湿度元件和一个NTC测温元件,并于一个高 ...

  2. Domoticz加入dht11温湿度模块,显示室内温湿度

    Domoticz加入dht11温湿度模块 前言 刷ESPEasy固件 网页配置8266温湿度参数 Domoticz服务器设置参数 最后看看手机APP上的效果 前言 前几天在Domoticz服务器上添加 ...

  3. 【STM32】DHT11温湿度模块传感器详解代码

    一.DHT11产品介绍 DHT11是数字温湿度传感器,测量范围:湿度20%-95%,温度0-50℃,广泛应用于加湿器.温湿度计.空调.汽车等领域. 二.典型应用电路 如上图DATA引脚用于MCU与DH ...

  4. Mind+上传模式的第三方Arduino用户库实现 -DHT11温湿度模块

    Mind+上传模式的第三方Arduino用户库实现--DHT11模块读取温湿度 前言 Mind+是一款拥有自主知识产权的国产青少年编程软件,支持Arduino.micro:bit.掌控板等各种开源硬件 ...

  5. DHT11温湿度模块入门

    目录 1.模块简介 2.判断DHT11模块是否存在 3.DHT11数据的时序分析 4.将温湿度数据上传到电脑中 1.模块简介 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器, ...

  6. STC12C5A60S2驱动DHT11温湿度模块传感器

    快速导航 STC12已封装好的函数库 DTH11器件说明书: https://note.youdao.com/s/A3ez5ubT /**程序名:DHT11驱动程序*硬件支持:STC12C5A60S2 ...

  7. Arduino DHT11温湿度模块 LCD1602A

    arduino 实现环境温湿度检测 涉及模块:DHT11模块,LCD1602A 接线图 LCD参考前面设计 实验代码 #include <dht11.h> #include <Liq ...

  8. 基于Arduino的智能家居系统【ESP8266WIFI模块 DHT11温湿度模块 继电器 加湿模块 APP远程控制 数据上传机智云】

  9. stm32f103c8t6连接DHT11温湿度模块 采集温湿度并在数码管显示

    LED4BitTM1637.h 数码管.h文件 #ifndef __LED4BITTM1637_H #define __LED4BITTM1637_H #include "sys.h&quo ...

最新文章

  1. 2018-3-23论文一种新的群智能算法--狼群算法(框架结构+感想一点点)
  2. 仅用 4 小时,吃透“百度太行”背后硬科技!
  3. Kafka实现细节(下)
  4. 联合体在单片机中的应用
  5. EMF+GEF的属性页问题
  6. SpringBoot之使用Scheduled做定时任务
  7. php退出页面父元素,jQuery中弹出iframe内嵌页面元素到父页面并全屏化的实例代码...
  8. 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
  9. 【2016年第3期】大数据时代的数据科学家培养
  10. Pycharm 入门问题
  11. 深入理解redis复制原理
  12. OpenCV图像处理(2)——形态学操作
  13. CAM350 简单使用
  14. Systen类、Runtime类、Math类、Random类、包装类
  15. 用友u8怎么导出凭证_用友U8怎么导入凭证?
  16. 【转载】白素贞的身世之谜
  17. 谷歌io开发者大会2018:强大的AI帝国
  18. 【网络编程】TCP 网络应用程序开发
  19. “二进制负数 补码右移和原码算术右移 产生的真值偏差”分析
  20. 阿里云服务器安装jdk、tomcat(小白试)

热门文章

  1. 手机号码丢失了咋办?告诉你一个苹果手机号码删除恢复技巧
  2. ESP32 SPI 接口的应用
  3. 只要不上网,pc机就不会感染计算机病毒,大学计算机题库——判断题.xls
  4. AT指令介绍及用法,AT 指令集合
  5. 基于java+springboot+mybatis+vue+elementui的B2C购物电商平台设计与实现
  6. linux下做pe工具,手工组合制作多功能U盘维护工具(LINUX、PE、DOS、GHOST)
  7. 你想找的Python资料这里全都有!没有你找不到!史上最全资料合集
  8. 神了!!看完这篇文章我不仅学会了手撸vue三开关组件,还搞懂了父子组件传值
  9. [Spring实战系列](11)SpEL使用表达式装配
  10. java开发的职业发展路线是怎样的?