本帖最后由 Jacket 于 2023-7-26 22:45 编辑
一、创建数据点并进行MCU代码生成 (1)创建数据点 (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 四、现象
|