实现效果视频:
结合OneNET Studio云平台STM32物联网开发(1)- MQTT协议设备接入数据上报测试(https://blog.csdn.net/weixin_44862509/article/details/127015383) 这篇文章如图1,图1的1位置是在MQTTX上模拟和OneNET Studio云平台连接以及在相应的通道上上发数据以及接收数据,
图1
图1的2位置是OneNET Studio 平台上显示的数据,说明我已经可以和云端进行互动数据了。
但是如何用手上的Air724UG(4G模组)如图2,替代MQTTX软件实现与OneNET云进行通讯实现替代MQTTX用硬件将数据发送到云端显示呢,以及如何用STM32单片机结合4G模组实现将数据自动上发呢?
图2
第一步 获取4G模组AT联网设置信息:如果需要设置4G模组,其实主要的工作和在MQTTX设置是一样的,就是将于云服务器链接的账号密码以及产品和设备的信息以及通道信息通过AT指令写入到4G模组硬件,所以如图3结合上一篇文章找到以下信息:Client ID,Host,Port,Username,Password,以及属性上报topic和属性上报回复topic。找到信息如下:
图3
Client ID:P0001
Host:studio-mqtt.heclouds.com
Port:1883
Username:i7ybqx3ZNk
Password:version=2018-10-31&res=products%2Fi7ybqx3ZNk%2Fdevices%2FP0001&et=--------gn=e5xZrxCdfmKkT1hndeWvmg%3D%3D
上报topic: $sys/i7ybqx3ZNk/P0001/thing/property/post
回复topic: $sys/i7ybqx3ZNk/P0001/thing/property/post/reply
第二步 通过4G模组DTU工具设置联网信息:首先通过USB转串口模块与4G模组链接,并给4G模组通电实现4G模组可以接收电脑端串口调试助手下发的AT指令(可以根据大家在网上自行买的Air724UG 4G模组的方式配置链接,对于实现这一步的前提条件是你手上的4G模组是可以通过AT指令在电脑端的串口调试助手下发命令并且是有回复的,比如发送AT,回复OK)如图4,
图4
将相关信息输入到DTU小工具,如图4的位置1是打开串口,位置2是选择MQTT协议(上一篇文章我用的是MQTTX模拟该协议),位置3为设置的基本登入信息,位置4为小工具实际下发的AT指令。
图5
以及图5的位置1为回复topic,位置2位上报topic和位置3为对应的AT指令。
第三步 实现4G模组联网:如图6点击图6位置1通过AT指令重启4G模组,可以看到4G模组对应的指令灯从关闭到开启说明重启成功,位置2为4G模组与服务器链接成功的状态回复:“+STATUS: 1,MQTT CONNECTED”,这里很关键,只有回复了这个状态才说明与服务链接成功,同时看到4G模组的LINK的指示灯是常亮。
图6
如图6的3位置为设备状态为“在线”,其实到了这一步,大家有没有觉得与我们在第一篇文章介绍的MQTTX链接服务器一样的感觉,如果感觉一样,那就说明你真正开始领悟了。
第四步 通过4G模组发送数据到服务器:按指定的数据格式通过串口方式发送出去,如图7的位置1位串口发送的内容就是对应属性JSON格式要发送的数据(这里测试发送的时候我把时间戳修改了当前的时间),图7的位置2为服务器收到数据后回复接收成功的状态信息,图7的3位置看到OneNET Studio平台显示了我们发送上去的数据。
图7
第五步 STM32终端硬件功能:如图8,图8的1位置为12V电源输入及5V和3.3V电压降压及扩展模块,2位置为STM32F103C8T6单片机核心板,3位置为Air724UG Cat1 4G模块,4位置为DHT11温湿度模块,5位置为光敏电阻光线感应模块,6位置为LCD12864液晶屏,7位置为杜邦线,8位置为4G模块天线。
图8
图9和图10为数据在OneNET Studio云平台展示界面,而且OneNET Studio平台的数据接口是对外开发的,如果大家需要直接设计前端页面可以直接获取相关的接口数据,通过以上8部分硬件模块在杜邦线的连接下实现了功能如下。
图9
图10
这里我们暂且把这个作品称为系统,名称为基于OneNET Studio云实现STM32农业环境监测Air724UG Cat1 4G传输系统。
1、STM32单片机每隔10秒通过DHT11温湿度传感器和GL5537光敏电阻传感器采集农业环境数据并在LCD12864液晶屏实时显示;
2、每隔10S通过Air724UG Cat1 4G模块将采集的温度,湿度,光照值数据及当前时间戳上报到OneNET Studio云平台进行展示,同时LED闪烁一次;
3、OneNET Studio云平台将收集到数据以曲线及表格的方式展示并记录数据,同时向单片机下发数据接收状态,同时LED闪烁2次;
第六步 硬件电路接线说明:如图11为硬件电路图接口接线说明图,按图11的控制接口将温湿度传感器,光敏电阻传感器,4G模块发送数据给单片机,液晶屏,LED接收单片机的控制数据,这里说一点是电源部分,因为4G模块需要12V供电,所以采用12V转5V的模块进行连接同时将5V和3.3V扩展出来方便给其他模块供电。
图11
模块原理我想大家应该都很熟悉了,因为都是比较常用的模块,大家获取到我提供的源代码后直接对着代码和函数看程序就可以知道模块怎么使用了。而且相信大家手上都直接或间接的单片机开发板对于本系统所用到的都是比较常见的模块所以大家这部分可以直接补习,如果任然有疑问的可以和我交流。
第七步 关键程序段分析:如图12为程序主函数的内容,可以看到程序非常简单,图12的1和2的位置通过调用函数的方式通过相应的变量获取到时间戳,温度,湿度,光照值。
图12
同时图12的3和4的位置调用函数将获取数据的变量传递给LCD12864显示函数进行数据显示,再通过调用4G模块数据发送函数将变量的值通过4G模块发送出去。时间戳如果生成,这里需要包含一个系统自带的头文件:#include "time.h",并通过mktime(&Time)函数,将获取的当前时间(格式:XX-XX-XX YY:YY:YY 年-月-日 时:分-秒,这个时间可以通过时钟芯片读取,我的程序为了演示方便,我是直接用软件延时的方式直接换算出日期和时间的,最关键还是时间戳的转换)北京时间格式转换为时间戳格式的算法如下:
Time.tm_year = (2000 + time_data[0])%100 + 100;
Time.tm_mon = time_data[1] - 1;
Time.tm_mday = time_data[2];
Time.tm_hour = time_data[3]- 8;
Time.tm_min = time_data[4];
Time.tm_sec = time_data[5];
time_uinx=mktime(&Time); //读取时间戳
time_uinx=time_uinx*1000;
大家可以通过这个函数转换出来的时间戳值,放到在线工具进行反推验证,比如我得到的一个时间戳的值是1663962320000 单位是毫秒,如图13的1位置可以看到转换出来的北京时间是符合要求的(要注意,这个随数据一起发送的时间不能超过你生成密码用的时间)。
图13
还有就是如何把OneNET Studio平台需要的数据格式组合起来,比如我这个系统目前发送的是温度,湿度,光照三个值,数据格式如下:
{"id":"0001","params":{"LightLux":{"time":1663962320000,"value":1155.00},"RelativeHumidity":{"time":1663962320000,"value":40.0},"CurrentTemperature":{"time":1663962320000,"value":32.0}},"version":"1.0"},但是如果直接在C语言里发送是发送不过去的,需要用到一个字符串组合函数如图14,为了方便大家看到调用的全部参数为把程序分行了,但是在实际编译的时候要排成一行,要不然编译不通过。
图14
当然了也可以通过Keil环境下Jansson库生成相应的JSON格式的数据,但是这样做的话对单片机的存储空间有一定要求,所以如果传输数据量大需要用JSON函数转换,如果传输数据不多的话可以直接用我介绍的方法。
第八步 回顾总结:其实最关键的还是要保证4G模块能和OneNET Studio建立连接,真正需要单片机控制的非常少,关键还是第一篇文章,以及这边文章的前几部的循序渐进的联网测试,还有就是为了保证数据能正常上报,一定要验证下单片机串口发送出来的数据格式是否正确。
|