当前位置: 首页 > news >正文

做销售平台哪个网站好百度广告开户

做销售平台哪个网站好,百度广告开户,网站 建设 计划,qq空间做宣传网站基于STM32CT,利用DHT11采集温湿度数据,在OLED上显示。一定要阅读DHT11数据手册。 1、 DHT11温湿度传感器 引脚说明 1、VDD 供电3.3~5.5V DC 2、DATA 串行数据,单总线 3、NC 空脚 4、GND 接地,电源负极 硬件电路 微…

基于STM32CT,利用DHT11采集温湿度数据,在OLED上显示。一定要阅读DHT11数据手册。

1、 DHT11温湿度传感器

引脚说明

1、VDD 供电3.3~5.5V DC
2、DATA 串行数据,单总线
3、NC 空脚
4、GND 接地,电源负极

硬件电路

微处理器与DHT11的连接典型应用电路如上图所示,DATA上拉后与微处理器的I/O端口相连。
1.典型应用电路中建议连接线长度短于5m时用4.7K上拉电阻,大于5m时根据实际情况降低上拉电
阻的阻值。
2. 使用3.3V电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。
3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取2次,但不建议连续多次
读取传感器,每次读取传感器间隔大于2秒即可获得准确的数据。

以上硬件部分来自于DHT11数据手册,为方便硬件部分DATA直接接STM32的IO口。
硬件部分接好线之后,需要知道单片机和 DHT11如何通信,即将数据传给单片机显示在OLED上。

2、单总线协议

DHT11与单片机之间通过简化的单总线协议通信。(和从机通过1根线进行通信,在一条总线上可挂接的从器件数量几乎不受限制。既可传输时钟,又能传输数据,而且数据传输是双向的。)

  • 单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。
  • 设备(主机或从机)通过一个漏极开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;
  • 单总线通常要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从j结构,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。

重点理解下图的时序图就明白具体什么样,后续的代码也是基于这个图编写的协议。
在这里插入图片描述
上下两张图相同
在这里插入图片描述
通信过程分为主机(stm32)发送起始信号-从机(DHT11)发送响应信号-从机发送数据-从机发送结束信号

  • DHT11上电后,一直采集数据,DATA数据线由上拉电阻拉高(或者单片机IO口设置为高电平)一直保持高电平;此时 DHT11的 DATA 引脚处于输入状态,时刻检测外部信号。
  • 主机起始信号:单片机IO口为输出模式,输出低电平并保持一段时间,然后再回高电平也就是释放总线,另外IO口转为开漏输入模式。
  • 从机响应信号:DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束后,输出 一段时间的低电平作为应答信号,紧接着输出一段时间的高电平(也就是释放总线)通知单片机准备接收数据。
  • 输出40位数据: 湿度高8位 :湿度低8位: 温度高8位 : 温度低8位 : 校验位
    校验位 =湿度高8位 + 湿度低8位 +温度高8位 + 温度低8位 ,不正确则放弃重新接收数据。
    输出数据时:,位数据0的格式为: 54 微秒的低电平和 23-27 微秒的高电平,位数据1的格式为: 54 微秒的低电平加68-74微秒的高电平。
  • 结束信号:数据输出完后,继续输出持续时间的低电平后转为输入状态,由于释放总线随之变为高电平。但DHT11内部重测环境温湿度数据,并记录数据,等待外部信号的到来。

该表来自DHT11数据手册,说明了起始信号、响应信号、发送数据0/1、结束信号中高低电平的持续时间,编写代码时也要参照这着表格和上面的时序图编写。
在这里插入图片描述

3、DHT11代码

DHT11.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"#define  DHT11_IO   GPIOB
#define  DHT11_Pin  GPIO_Pin_12
#define  DHT11_RCC  RCC_APB2Periph_GPIOB//设置IO输出
void DHT11_MOSI_Init(void)
{RCC_APB2PeriphClockCmd(DHT11_RCC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.GPIO_Mode=GPIO_Mode_Out_PP; //推挽输出GPIO_InitStruct.GPIO_Pin=DHT11_Pin;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(DHT11_IO,&GPIO_InitStruct);GPIO_SetBits(DHT11_IO,DHT11_Pin);}//设置IO为输入
void DHT11_MISO_Init(void)
{RCC_APB2PeriphClockCmd(DHT11_RCC,ENABLE);GPIO_InitTypeDef GPIO_InitStruct;//浮空输入,引脚电平来自外界GPIO_InitStruct.GPIO_Mode=GPIO_Mode_IN_FLOATING; GPIO_InitStruct.GPIO_Pin=DHT11_Pin;GPIO_InitStruct.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(DHT11_IO,&GPIO_InitStruct);}//单总线通信 开始
void DHT11_Start(void)
{DHT11_MOSI_Init();  //highGPIO_ResetBits(DHT11_IO,DHT11_Pin);//low 主机拉低总线18-30ms,然后释放Delay_ms(25);GPIO_SetBits(DHT11_IO,DHT11_Pin);  //high  释放Delay_us(13);  //保持高电平,等待从机响应     根据数据手册设置的主机释放总线的时间DHT11_MISO_Init();  //io为输入 等待从机}// 接收数据,高位先行
uint8_t DHT11_ReceiveByte(void)
{uint8_t Byte=0x00;for(int i=0;i<8;i++){//数据0:54us低电平+23-27高电平  数据1:54us低电平+68-74高电平while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0);//等待低电平时间过去Delay_us(40);  //高电平持续时间超过40 说明数据为1if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1)  //读到为1,说明为高电平{ Byte|=(0x80>>i); //将数据位写入 Byte 中,从高位到低位  高位先行while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1);//等待高电平结束}}return Byte;}
//接收数据
//该函数每次读出的温湿度数值是上一次读取测量的结果 
char DHT11_GetData(uint8_t *Humi,uint8_t* Temp)
{char Mark='+'; //温度 零下还是零上uint8_t Humi_H,Humi_L,Temp_H,Temp_L,Check; //温湿度高低位、校验位DHT11_Start();//通信if(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0){while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0);  //DHT11响应完毕while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==1);  // 准备接收高电平之后的数据//湿度高8位    湿度低8位   温度高8位     温度低8位      校验位  传感器输出40位数据Humi_H=DHT11_ReceiveByte();                   Humi_L=DHT11_ReceiveByte();//等于0Temp_H=DHT11_ReceiveByte();Temp_L=DHT11_ReceiveByte();//温度低8位中的Bit8为1则表示负温度,否则为正温度,后7位为小数部分Check=DHT11_ReceiveByte();if(Humi_H+Humi_L+Temp_H+Temp_L==Check) //校验{*Humi=Humi_H; //传送数据*Temp=Temp_H;//小数部分不做处理//如果温度的低8位的最高位为1,表示温度为负数if((Temp_L&0x80)==0x80){Mark='-';}}//DHT11继续输出低电平54微秒后转为输入状态,释放总线变为高电平。while(GPIO_ReadInputDataBit(DHT11_IO,DHT11_Pin)==0);GPIO_SetBits(DHT11_IO,DHT11_Pin); //释放总线}return Mark;
}
//获取实时温湿度
//连续获取两次数据,DHT11模块会在上一次结束信号时重测温湿度数据
char DHT11_GetRealData(uint8_t *Humi,uint8_t* Temp)
{char Mark='+';DHT11_GetData(Humi,Temp);Delay_ms(1000);Delay_ms(1000);Delay_ms(100);          //数据手册规定读取传感器数据大于2sMark=DHT11_GetData(Humi,Temp);return Mark;}

DHT11.h

#ifndef __DTH11_H
#define __DTH11_H//上电后等待1秒才调用函数
char DHT11_GetData(uint8_t *Humi,uint8_t* Temp);
char DHT11_GetRealData(uint8_t *Humi,uint8_t* Temp);//实时温湿度
void DHT11_Start(void);
#endif

main.c

#include "stm32f10x.h"                  // Device header
#include "Delay.h"
#include "OLED.h"
#include "DTH11.H"uint8_t Humi,Temp;
int main(void)
{OLED_Init();DHT11_Start();OLED_ShowString(1, 1, "Humi:");OLED_ShowString(2, 1, "Temp:");Delay_ms(1000);while (1){DHT11_GetData(&Humi,&Temp);DHT11_GetRealData(&Humi,&Temp);OLED_ShowNum(1,6,Humi,2);OLED_ShowNum(2,6,Temp,2);}
}
http://www.ritt.cn/news/2022.html

相关文章:

  • 信息门户登录入口怀化seo推广
  • 网站用户量深圳全网推广方案
  • 做网站怎么找优质客户一级域名二级域名三级域名的区别
  • 教育部高等学校建设中心网站网站片区
  • 做下一个盗版小说网站广告推广投放平台
  • 网站开发登录要做哪些验证排名优化网站
  • 网站目录有什么意义百度精准引流推广
  • 四平网站建设广州中小企业seo推广运营
  • 浦江建设局网站企业网络
  • a站下载安装南宁网站推广排名
  • 政府网站预算公开如何做怎样推广自己的产品
  • 最新域名网站廊坊自动seo
  • 网站建设技术清单网站关键词排名查询
  • dedecms做的网站首页被挂马百度金融
  • 做搜狗手机网站排网络流量分析工具
  • 青岛市城乡建设委员会政务网站营销顾问
  • 西安手机网站建设公司全网营销有哪些平台
  • 在柬埔寨做网络销售推网站seo关键词分析表
  • 拉人头最暴利的appseo入门视频
  • win2003 iis做网站一键生成网页
  • 兼职网站制作浏览器下载安装
  • wordpress authkey惠州企业网站seo
  • 联通的网站是谁做的今日关注
  • 免费网站论坛深圳seo网站推广方案
  • 绍兴网站公司网站制作石家庄新闻头条新闻最新今天
  • 商丘网站建设哪家值得信任域名注册哪个平台比较好
  • 如何设立外贸网站楚雄今日头条新闻
  • 网站 管理免费自媒体网站
  • 吉林网站建站系统平台上海优化seo排名
  • asp学校网站系统推销产品怎么推广