DHT11(ASAIR)温湿度传感器的使用(软件)
**
关于DHT11(ASAIR)温湿度传感器的使用(软件)
**
前言
此次在学习中使用到的是ASAIR公司生产的DHT11型温湿度传感器,说明书可前往ASAIR官网下载。
网址:DHT11官方网页
要使用好DHT11传感器,需要根据说明书的要求来进行编程。
关于DHT11
DHT11有4个引脚,分别是:
1、VCC :供电3.3~5.5V
2、DATA :串行数据,单总线
3、NC :空脚(一般接地)
4、GND :接地或者电源负极
接线如下图:
关于传感器的误差等其他信息可在前言处通过连接前往官网下载。
串行单总线通信
DHT11传输数据的模式是串行单总线,可理解为DHT11和我们所使用的的芯片(例如我使用的STM32)之间的首发数据都是通过一根数据线,通常要求上拉一个4.7kΩ左右的电阻,以保证总线在闲置的时候状态为高电平。
DHT11与STM32之间的通讯时序要求
DHT11的通信必须严格按照数据时序图在操作芯片引脚的输入输出模式和高低电平。
数据时序图如下:
程序编写
步骤一:初始化引脚
void DHT11_Init(void)
{GPIO_InitTypeDef GPIO_InitStruct;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = GPIO_Mode_OUT;//输出模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//高速GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//浮空GPIO_Init(GPIOG,&GPIO_InitStruct);Dat_out = 1;//此处主动拉高引脚电平(#define Dat_out PGout(9))
}
步骤二:引脚功能选择
由于通讯的时候需要设置引脚的输入输出模式,所以编写此代码增强阅读性。
void DHT11_Mode_Init(GPIOMode_TypeDef Mode)//将连接DH11数据引脚的芯片引脚初始化
{GPIO_InitTypeDef GPIO_InitStruct;RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOG, ENABLE);GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;GPIO_InitStruct.GPIO_Mode = Mode;//输出模式GPIO_InitStruct.GPIO_OType = GPIO_OType_PP;//推挽输出GPIO_InitStruct.GPIO_Speed = GPIO_Speed_50MHz;//高速GPIO_InitStruct.GPIO_PuPd = GPIO_PuPd_NOPULL;//浮空GPIO_Init(GPIOG,&GPIO_InitStruct);
}
步骤三:通讯开始
开始通讯的时候,需要将STM32引脚设置成输出模式,等待1s的DHT11不稳定时间,然后拉低引脚电平20ms(18ms~30ms)
void DHT11_Star(void)
{DHT11_Mode_Init(GPIO_Mode_OUT);//将引脚模式设置为输出模式,电平由上拉电阻自动拉高delay_s(1);//等待一秒DH11的不稳定状态过去Dat_out = 0;//将芯片引脚电平拉低delay_ms(20);//芯片引脚拉低至少18ms,不能超过30ms
}
步骤四:DHT11应答
通讯开始时STM32引脚发生信号给DHT11,然后引脚需要设置成输入模式等待接收DHT11发送的信号
int DHT11_Answer(void)
{int i=0;DHT11_Mode_Init(GPIO_Mode_IN);//将芯片引脚设置为输入模式,电平由上拉电阻自动拉高,等待DH11做出应答 while(Dat_in==1){delay_us(1);i++;if(i>1000000)//将超时时间设置为1s{return -1;//如果超时,返回-1}}while(Dat_in==0);//等待低电平结束,此时电平由DH11控制while(Dat_in==1);//等待高电平结束,此时电平由DH11控制 return 0;//此时返回0标识DH11有应答
}
步骤五:接收数据
DHT11应答之后会开始发送数据给STM32的引脚,发送的数据为5个8位共40位的数据,如下图所示
位数据“0”的格式为:54微秒的低电平和23-27微秒的高电平,位数据“1”的格式为:54微秒的低
电平加68-74微秒的高电平。
u8 DHT11_Rec_Data(void)
{int i;u8 rec = 0;DHT11_Mode_Init(GPIO_Mode_IN);for(i=0;i<8;i++){while(Dat_in == 0);delay_us(35);//此处由于DH11低电平过后输出高电平,位数0则输出23~27us的高电平,位数1则输出68~74us的高电平,若延时过后还是高电平,那就是位数1if(Dat_in == 1){rec |= 0x01<<(7-i);while(Dat_in == 1);//在此等待高电平结束}}return rec;
}
步骤六:结束
void DHT11_End(void)
{DHT11_Mode_Init(GPIO_Mode_OUT);Dat_out = 1;delay_ms(10);
}
主函数:
int DHT11_Main(float num)
{u8 TR[5];DHT11_Star();if(DHT11_Answer()==-1){printf("连接超时\r\n");return -1;}for(int i=0; i<5; i++){TR[i] = DHT11_Rec_Data();}DHT11_End();if((u8)(TR[0]+TR[1]+TR[2]+TR[3]) == TR[4]){printf("温度:%d.%d 湿度:%d\r\n",TR[2],TR[3],TR[0]);}
}
以上是我在学习中对DHT11温湿度传感器的使用总结出来的一点笔记,希望各位大佬不吝赐教,我都会虚心接受,感谢!
DHT11(ASAIR)温湿度传感器的使用(软件)相关推荐
- 【正点原子MP157连载】第二十七章 DHT11数字温湿度传感器实验-摘自【正点原子】STM32MP1 M4裸机CubeIDE开发指南
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 树莓派dht11上云_树莓派使用 DHT11 / DHT22 温湿度传感器
接线说明 从左到右 3.3V-6V 电源 GPIO接口 NO Connected 接地 依赖库 为了简化工作,我们基于Adafruit_Python_DHT的Python库进行实验 Clone下这个依 ...
- 【正点原子STM32连载】第四十章 DHT11数字温湿度传感器 摘自【正点原子】MiniPro STM32H750 开发指南_V1.1
1)实验平台:正点原子MiniPro H750开发板 2)平台购买地址:https://detail.tmall.com/item.htm?id=677017430560 3)全套实验源码+手册+视频 ...
- Arduino之读取DHT11数字温湿度传感器并串口显示
温度是表示物体冷热程度的物理量,微观上来讲是物体分子热运动的剧烈程度.温度只能通过物体随温度变化的某些特性来间接测量,而用来量度物体温度数值的标尺叫温标.它规定了温度的读数起点(零点)和测量温度的基本 ...
- DHT11型温湿度传感器的使用(附源码)
一.产品概述 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器.它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性.传感器包括一个电阻式感 ...
- DHT11 数字温湿度传感器实验
DHT11技术性能特征 工作电压范围:3.3V-5.5V 工作电流 :平均0.5mA 输出:单总线数字信号 测量范围:湿度20~90%RH,温度0~50℃ 精度 :湿度±5%,温度±2℃ 分辨率 :湿 ...
- proteus仿真arduino中调用DHT11/22温湿度传感器
一.驱动库的获取和测试 1.获取驱动库 首先,我们利用arduino的IDE获取温湿度传感器的驱动库,库管理器中搜索dht11即可. 如果发现有其他依赖的库需要安装,也一起安装吧! 2.测试驱动库 安 ...
- DHT11(温湿度传感器)的学习
1.基本了解 DHT11是一款温湿度传感器. 其测量精度为:湿度+-5%RH, 温度+-2℃,量程为:湿度20-90%RH, 温度0~50℃,采样周期大于等于1秒/次. 传感器包括一个电阻式感湿元件和 ...
- 基于C51的DHT11(温湿度传感器)编程(详解)
前言 当你点进看这篇博客时,相信对DHT11产品的概述与特性没有任何兴趣,所以跳过那部分,直接上技术活. 1.温湿度如何采集 根据产品说明文档:用户MCU发送一次开始信号后,DHT11从低功耗模式转换 ...
- DHT11数字温湿度传感器
项目场景: VCC:3.3V~5V 相对湿度采集范围:5%~95%(5%误差) 温度测量范围:-20℃~60℃ 采样周期:> 2S; 起始信号:微处理器把数据总线(SDA)拉低一段时间至少18m ...
最新文章
- SBB:南土所褚海燕组-pH主导土壤中固氮群落的共存与装配
- php sql oracle数据库,PHP、PLSQL连接oracle数据库的方法
- 从老板身上偷学的东西,你能吗?
- python学习笔记-day2-dict,tuple, string常用函数
- 【学会如何学习系列】从婴儿到大学——学习的本质从未改变过
- PostgreSQL11 data数据库目录迁移
- [JZOJ 5911] [NOIP2018模拟10.18] Travel 解题报告 (期望+树形DP)
- 无心剑中译罗素《此生何求?》
- 05-windows下SQL Developer连接Orcale
- golang实现四种排序(快速,冒泡,插入,选择)
- RDLC之自定義數據集二
- omnigraffle 画曲线_OmniGraffle使用的10个小技巧
- java--Date时间
- 证券期货行业数据模型设计
- 那些年 用过的经典App
- Win7 您需要Trustedinstaller 提供的权限才能对此文件夹进行更改
- 【 rbx1翻译 第七章、控制移动基座】第二节、运动控制级别
- 订单系统设计 —— 订单号设计
- 有哪些比较好的企业内部管理软件?公认的5个高效管理软件介绍
- 【1.7】docker —— 容器