收藏官网首页
查看: 2806|回复: 0

[分享] 基于机智云的Stm32温湿度传感器(DHT11)数据采集

29

主题

29

帖子

2384

积分

金牌会员

Rank: 6Rank: 6

积分
2384
跳转到指定楼层
楼主
 楼主| 发表于 2023-7-26 22:41:18 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
免费使用STM32、APP自动代码生成工具
本帖最后由 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<100true,执行retry++,延时1us,当跳变到高电平则DHT11_DQ_IN&&retry<100为false,若retry>100就提前结束,下面的while同理,只是高低电平相反。
(3)读一个位
*根据上图所知,判断数据是“0”还是“1”,主要判断28us后是否还是高电平,而为了准确性,这里选择了30us,如果40us后还是1,则这个数据为1,否则为0
四、现象

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

快速回复 返回顶部 返回列表