一、获取DTH11的值
1、cubemx配置
这里配置dth11的data口的io,初始没所谓,我配了高电平,速度配了高。
然后配置了TIMER2配置了一个1us的定时器,我主频是72M,所以就如下图分就行了
dth11配置这两个东西就可以了,用timer2去做一个1us的硬延时,然后看dth11时序实现读取温湿度。
2、获取温湿度
例程没有加系统,是用裸机做的,这里是初始化和读取的任务,我把他输出到了调试串口
主任务,1S读一次。
下边是串口输出的值
这里百度都有很多说明,我就没有详细展开说,文章末上传了资源,有兴趣就下载看看
二、获取rg5537光照强度
1、cubemx配置
在cubemx配置一个AD
2、获取光照强度
获取过程如下,我是用间断模式,然后每次开启前都校验了一下。后边的都是很平常的AD获取值,然后就是我在立创搜了一下rg5537的规格书,光照做了处理。
主任务同样是1S读一次
下边是调试串口的输出,房间没开灯,我用手机手电筒照了一下,这个差值差不多了
三、在腾讯IOT平台创建对应的物联型
1、温度
自定义温度属性
2、湿度
3、光照强度
四、上传数据到IOT后台
1、上传函数处理
首先是我的Esp8266任务,我加了一个闲时计时,目前是每1分钟上报一次。当计时一分钟时,切换发送状态为UP_Sensor_DATA(因为时间不是特别精准,所以我在上篇文章说的修改我也没有做修改,考虑后上报数据我觉得在闲时计时是合理的):
然后继续往上一步处理看,Esp8266_HeadSend函数是发送函数,在上一篇文章做了订阅腾讯云后台的操作,在这个任务里,不同的发送状态进入不同的发送函数。ATAT为模块的初始化、联网、mqtt订阅后台部分,UP_Sensor_DATA则为上报传感器数据:
我做了一个订阅后马上上报数据的处理:
上报数据的思路很简单,我是先查询mqtt连接状态,再跳转到上报。
这里我把sprintf贴出来,ID还有设备名称,因为这个是固定测试,我就直接写上去了,做成通用程序的话,这个地方可以定义一个变量,然后sprintf的时候处理一下就好了,这样以后只修改这个变量就可以。另外一个点就是,我只有3个参数,平时做项目可能有很多个参数,这就需要自己做一个函数封装,或者引用json库了。不然用这一句实现也不现实。
sprintf((char *)txbuf,"AT+TCMQTTPUB=\"$thing/up/property/05ODJNOW0P/Device02\",1,\"{\\\"method\\\":\\\"report\\\"\\,\\\"clientToken\\\":\\\"123\\\"\\,\\\"params\\\":{\\\"Hum\\\":%d\\,\\\"Temp\\\":%d\\,\\\"Light\\\":%d}}\"\r\n",Sensor_Data[Humi],Sensor_Data[Temp],Sensor_Data[Light]);
这一个AT指令在我的资源里边的文档也是有的
2、接收函数处理
接收的函数与发送函数的思路当然也是一致的,根据不同的发送状态进入不同的处理函数,最后清空接收buf,使能接收
上报数据状态下的接收函数就比较简单,只判断了mqtt连接状态的回帧,Esp8266.ReceiveBuffer[30]为1是连接成功状态,如果是其他,我会重启模组:
3、测试
从监听的esp8266的回帧验证:
从腾讯云后台的数据也可以验证:
4、腾讯云配置小程序查看:
后台配置小程序:
这些都按默认设置就可以,我这里就编辑了产品配置和面板
在设备调试的对应设备点击二维码
手机小程序扫码绑定查看:
dth11资源地址:【免费】STM32+CubeMX+dth11资源-CSDN文库
rg5537地址:Stm32+Cubemx+rg5537资源-CSDN文库