关键词:
1-Wire协议之DHT11温湿度传感器
1.DHT11传感器介绍
1.1 DHT11简介
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点
1.2 DHT11工作原理
DHT11采用单总线通信。即只有一根数据线来传输数据。单总线通常需要外接一个上拉电阻,这样在总线空闲的时候,状态为高电平。
1.3 DHT11工作时序
1.3.1 数据总时序
主机发送开始信号,主机拉高数据线,等待从机响应主机,然后传输8bit数据。
1.3.2.控制信号以及响应信号时序
主机拉低数据线至少18ms,然后拉高20-40us,然后切换至输入模式,读取DHT11的响应信号。DHT11先拉低数据线80us,然后再拉高80us后,开始传输数据。
在每一bit到来时,都会先有50us的低电平信号,然后才开始传输“0”.“1”数据。
1.3.3 数字“0”表示
高电平持续时间为26us-28us即为数字“0”。
1.3.4 数字“1”表示
高电平持续时间为70us即为数字“1”。
2.DHT11代码实现
2.1 主机发送开始信号
void DHT11_Command()
//输出模式
DHT11_OUT();
//主机拉低至少18ms
DHT11_L();
HAL_Delay(20);
//主机拉高20-40us
DHT11_H();
delay_us(30);
2.2 主机等待DHT11响应
uint8_t DHT11_Check()//检查DHT11响应信号
uint8_t retry=0;
//输入模式
DHT11_IN();
//高电平时期
//等待低电平的到来 如果是高电平,就一直循环,直到低电平退出
while (DHT11_read()&&retry<100)
retry++;
delay_us(1);
if(retry>=100)
return 1;
else
retry=0;
//低电平时期
//下面是等待高电平到来,低电平时间50us,并且加入了超时判断,防止死循环
while (!DHT11_read()&&retry<100)
retry++;
delay_us(1);
//
if(retry>=100)
return 1;
//响应正确返回0 并且现在处于高电平时期
return 0;
2.3 DHT11数据 bit“0”,“1”读取
uint8_t DHT11_Read_Bit()
uint8_t retry=0;
//高电平 等待低电平到来 开始传输数据
while(DHT11_read()&&retry<100)
retry++;
delay_us(1);
retry=0;
//低电平时期 等待高电平到来
while(!DHT11_read()&&retry<100)
retry++;
delay_us(1);
//高电平时期 因为“0”持续26us-28us 所以延时 40us读取电平 判断“0”,“1”
delay_us(40);
if(DHT11_read())
return 1;
else
return 0;
2.4 DHT11传输一个字节数据
uint8_t DHT11_Read_Byte()
uint8_t i,dat;
dat=0;
for (i=0;i<8;i++)
dat<<=1;
dat|=DHT11_Read_Bit();
return dat;
2.5 DHT11传输温湿度数据
uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
uint8_t buf[5];
uint8_t i;
DHT11_Command();
if(DHT11_Check()==0)
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];
*temp=buf[2];
else
return 1;
return 0;
3.DHT11注意事项
传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。
2021-08-29网安实验-web专题-gg
1、进入实验环境,打开题目地址,发现是个俄罗斯方块的游戏,可以尝试先玩几局游戏,但是并没有什么用(游戏是个坑,只有玩到1000000分时,会在cookie写入(“urlkey”,“webqwer”[1]+“100.js”,8... 查看详情
2021.08.29正睿七连测总结
T1.数列按照题目要求进行处理即可。T2.索引考试时思路为对于原始序列建一棵线段树,并新建一个变量x,表示当前线段树节点所包含的范围内是否有子节点满足a[i]==ia[i]==ia[i]==i这个条件,每次先进... 查看详情
2021.08.29正瑞七连测总结
T1.数列按照题目要求进行处理即可。T2.索引考试时思路为对于原始序列建一棵线段树,并新建一个变量x,表示当前线段树节点所包含的范围内是否有子节点满足a[i]==ia[i]==ia[i]==i这个条件,每次先进... 查看详情
2021-08-29:n*m的棋盘(n和m是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务。福大大答((代码片
2021-08-29:N*M的棋盘(N和M是输入参数),每种颜色的格子数必须相同的,上下左右的格子算相邻,相邻格子染的颜色必须不同,所有格子必须染色,返回至少多少种颜色可以完成任务。福大大答案20... 查看详情
Strava GPX 上传更改活动时间
...英文标题】:StravaGPXuploadchangesactivityhour【发布时间】:2021-11-0503:09:48【问题描述】:我制作了一个非常小的应用程序,它会为30分钟的活动生成GPX。(我这样做是因为我没有防水设备来跟踪我的游泳)我可以上传它,活动看起来... 查看详情
markdowngit代码片段(代码片段)
csharp代码片段(代码片段)
javascript代码片段(代码片段)
textvisualbasic代码片段(代码片段)
sqloracle代码片段(代码片段)
swift代码片段(代码片段)
java代码片段【安卓】(代码片段)
shbash的代码片段(代码片段)
markdownphpexcelnotes和代码片段(代码片段)
javaandroid的代码片段(代码片段)
javascriptjs-常用代码片段(代码片段)
常用代码片段(代码片段)
单例模式privatestaticHttpUtilinstance;publicstaticsynchronizedHttpUtilgetInstance()if(instance==null)instance=newHttpUtil();returninstance; 查看详情
常用代码片段(代码片段)
单例模式privatestaticHttpUtilinstance;publicstaticsynchronizedHttpUtilgetInstance()if(instance==null)instance=newHttpUtil();returninstance; 查看详情