基于机智云的Stm32温湿度传感器(DHT11)数据采集
本帖最后由 Jacket 于 2023-7-26 22:45 编辑一、创建数据点并进行MCU代码生成(1)创建数据点(2)下载机智云Gokit示例工程并解压Gizwits(3)替换CubeMX工程*将示例机智云Gokit示例工程中的STM32F103C8x.ioc复制到用户自己生成的工程中,并进行替换(4)生成代码*打开替换之后的STM32F103C8x.ioc,直接点击GENERATE CODE生成代码(5)将CubeMX宠物笼\驱动库代码_CubeMX版下面的delay.c、delay.h、hal_temp_hum.c和hal_temp_hum.h复制到用户工程中的Hal文件夹内,然后打开工程进行添加。二、代码修改(1)添加头文件和初始化函数在hal_temp_hum.c中添加#include"main.h"在gizwits_product.c中添加#include "hal_temp_hum.h"在delay.c中添加#include"main.h"在main.c中添加#include"hal_temp_hum.h"和#include "delay.h"添加延时初始化函数和DHT11初始化函数(2)数据上传在hal_temp_hum.c中的userHandle()函数中添加以下代码,将温度和湿度的数值上报值云平台三、代码简单解释(1)根据上图所知,DHT11温湿度传感器单总线需要主机先发至少18ms的低电平,然后发20-40us的高电平的信号,之后需要将I/O口设置为输入模式,等待DHT11的应答信号,拉低80us,然后拉高80us,之后才开始传输数据设置为输出模式,然后将信号设置为低电平,延时20ms,然后设置为高电平,延时30us(2)设置为输入模式,DHT11_DQ_IN&&retry<100为true,执行retry++,延时1us,当跳变到高电平则DHT11_DQ_IN&&retry<100为false,若retry>100就提前结束,下面的while同理,只是高低电平相反。(3)读一个位*根据上图所知,判断数据是“0”还是“1”,主要判断28us后是否还是高电平,而为了准确性,这里选择了30us,如果40us后还是1,则这个数据为1,否则为0四、现象
页:
[1]