摘要:传感器传感器简介串口与并口单工与半双工上拉电阻是用来供应电流的下拉电阻是用来分担电流的传感器串行接口收发数据分析的读写时序传感器简介智能终端是在感知层如果想要感知采集数据必定需要使用传感器市面上的传感器有很多检测气体的
智能终端是在感知层,如果想要感知采集数据必定需要使用传感器
市面上的传感器有很多:
检测气体的 温度 湿度 稀有气体含量(CO CO2 O2 甲醛 乙醇 甲烷 …)
检测液体的 温度 PH值 浑浊 液位
检测固体的 湿度 元素含量
检测人体 温度 血压 心率 血糖…传感器的接口也有很多:
GPIO接口 串口接口(USART/UART IIC IIS SPI …) 并口接口数字型传感器 和 模拟型传感器
传感器可以从采集种类、接口种类、采集到的数据种类分为很多种
串口:串行的接口或者串行的通信接口|串行的通讯接口,是指数据按照串行的方式进行传输(是指数据一位一位进行传输)
并口:并行的接口或者并行的通信接口|并行的通讯接口,是指数据按照并行的方式进行传输(是指数据多位多位进行传输)
注意:并不是说并口可以一次发送多位数据就说明并口比串口通信快,实际上正好相反,串口通信速度要比并口快
并口有很多的限制,(数据线与数据线之间会有电平干扰、需要同时发送同时接收)
单工模式 A–>---->–B
半双工模式 A–>----<–B
全双工模式 ---->-----
略…
从手册中了解DHT11传感器:
需要把形参c保存的8bit二进制数据,通过高位先出的方式进行传输
假设:MCU连接了PC9管脚,可以使用位带发数据PCOut(9) 收数据PCIn(9)
数据线低电平代表数据0,数据线高电平代表数据1
/*发送数据*/void func(u8 c)//10111110{ u8 i = 0;//循环变量 for(i = 0; i < 8; i++) { if(c & 0x80) PCOut(9) = 1; else PCOut(9) = 0; c <<= 1;//01111100 }}
需要接收8bit二进制数据,传感器通过高位先出的方式发送数据
假设:MCU连接了PC9管脚,可以使用位带发数据PCOut(9) 收数据PCIn(9)
数据线低电平代表数据0,数据线高电平代表数据1
u8 func(void){ u8 c = 0;//用来接收数据的变量 u8 i = 0;//循环变量 for(i = 0; i < 8; i++) { c <<= 1;//c >>= 1; if(PCIn(9) == 1) c |= 1;//c |= 0x80; }}
传输数据之前需要先检测DHT11存不存在|DHT11有没有损坏
void set_dht_output(void)//内部函数,把PC10管脚配置为输出模式{ GPIO_InitTypeDef Gpio_Value;//定义了GPIO初始化结构体类型的变量 Gpio_Value.GPIO_Mode = GPIO_Mode_Out_PP;//选择了推挽的输出模式 Gpio_Value.GPIO_Pin = GPIO_Pin_10;//选择了10号管脚 Gpio_Value.GPIO_Speed = GPIO_Speed_50MHz;//选择了50MHz的输出速率 GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC组的管脚}void set_dht_input(void)//内部函数,把PC10管脚配置为输入模式{ GPIO_InitTypeDef Gpio_Value;//定义了GPIO初始化结构体类型的变量 Gpio_Value.GPIO_Mode = GPIO_Mode_IN_FLOATING;//选择了浮空的输入模式 Gpio_Value.GPIO_Pin = GPIO_Pin_10;//选择了10号管脚 GPIO_Init(GPIOC, &Gpio_Value);//按照上述配置初始化GPIOC组的管脚}void dht_output_status(int n){ set_dht_output();//先把PC10管脚初始化为输出模式 if(n == 0) PCOut(10) = 0; else PCOut(10) = 1;}int dht_input_status(void){ set_dht_input();//先把PC10管脚初始化为输入模式 return PCIn(10);}void dht_init(void)//DHT11初始化{ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE); //通过APB2总线使能GPIOC组的时钟}void get_dht_value(char buf[5])//获取DHT11传感器采集的数据{ u8 flag = 0;//该变量是用来获取PC10管脚的电平高低 u8 time = 0;//该变量是用来计数 dht_output_status(1);//把PC10管脚拉高 dht_output_status(0);//把PC10管脚拉低 delay_ms(20);//延时20ms dht_output_status(1);//把PC10管脚拉高 //while(dht_input_status());//以死等的方式等待PC10管脚被拉低 do { flag = dht_input_status();//获取PC10管脚的电平高低 delay_us(2);//延时2us time++;//计数自增 }while(flag == 1 && time <= 20);//以超时处理的方式等待PC10管脚被拉低 if(time > 20)//判断是否超时 return ;//提前结束程序 while(!dht_input_status());//以死等的方式等待PC10管脚被拉高 /*开始接收40bit的数据*/ //...............}
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/123450.html
摘要:当温度感应器感应到设备主体内部的温度高于设定值时,此时温度设定器会控制风机进行启动,对内部进行散热处理,低于设定值时停止。设定的时间间隔温度阈值,当前温度由显示,表示工作状态。为继电器,,,供电。必须手动清除,否则将持续引发中断。 目录 一、 设计要求 二、 总体设计和系统框图 三、设计...
摘要:下面是演示视频物联网文章目录前言一准备二操作步骤配置配置三效果展示总结前言实现万物互联第一步,千里点灯,然后添加你想要的模块就可以了,接下来我们进入正文。 前面学习...
摘要:设计简介本设计是基于蓝牙的超声波无线测距的设计,主要实现以下功能实现通过测量当前温度值实现通过温差补偿法公式修改超声波在当前空气中的传播速度实现通过超声波传感器测量距离值。 设计简介: 本设计是基于蓝牙的超声波无线测距的设计,主要实现以下功能: ① 实现通过DS18B20测量当前温度值 ② ...
摘要:单片机在一片集成电路芯片上集成微处理器存储器接口电路,从而构成了单芯片微型计算机,即单片机。没搞懂专栏咋弄的,慢慢摸索吧,本人纯新手,读书人的事没啥要脸不要脸的,有问题随便指出,随便喷,欢迎来指点 2021-9-25 自己手绘的一张图,算是简单的介绍吧 对照实图看一下 ...
摘要:工具树莓派温湿度传感器在开始实验之前,要在电脑上安装,并且建立好一个数据库连接。到这里对电脑配置就结束了,对了,还有如果你们到时运行树莓派代码出现远程连接失败错误码,像下图这是因为,你的防火墙开了,把防火墙关掉就不会报这个错误了。 ...
阅读 2082·2023-04-25 14:56
阅读 2360·2021-11-16 11:44
阅读 2639·2021-09-22 15:00
阅读 1864·2019-08-29 16:55
阅读 2105·2019-08-29 14:04
阅读 2277·2019-08-29 11:23
阅读 3625·2019-08-26 10:46
阅读 1872·2019-08-22 18:43