2 OneNET Studio云平台STM32物联网开发( 二 )


图9
图10
这里我们暂且把这个作品称为系统,名称为基于 云实现STM32农业环境监测 Cat1 4G传输系统 。
1、STM32单片机每隔10秒通过DHT11温湿度传感器和光敏电阻传感器采集农业环境数据并在液晶屏实时显示;
2、每隔10S通过 Cat1 4G模块将采集的温度,湿度,光照值数据及当前时间戳上报到 云平台进行展示,同时LED闪烁一次;
3、 云平台将收集到数据以曲线及表格的方式展示并记录数据,同时向单片机下发数据接收状态,同时LED闪烁2次;

2  OneNET Studio云平台STM32物联网开发

文章插图
第六步 硬件电路接线说明,如图11为硬件电路图接口接线说明图,按图11的控制接口将温湿度传感器,光敏电阻传感器,4G模块发送数据给单片机,液晶屏,LED接收单片机的控制数据,这里说一点是电源部分,因为4G模块需要12V供电,所以采用12V转5V的模块进行连接同时将5V和3.3V扩展出来方便给其他模块供电 。
图11
模块原理我想大家应该都很熟悉了,因为都是比较常用的模块,大家获取到我提供的源代码后直接对着代码和函数看程序就可以知道模块怎么使用了 。而且相信大家手上都直接或间接的单片机开发板对于本系统所用到的都是比较常见的模块所以大家这部分可以直接补习,如果任然有疑问的可以和我交流 。
第七步 关键程序段分析,如图12为程序主函数的内容,可以看到程序非常简单,图12的1和2的位置通过调用函数的方式通过相应的变量获取到时间戳,温度,湿度,光照值 。
图12
同时图12的3和4的位置调用函数将获取数据的变量传递给显示函数进行数据显示,再通过调用4G模块数据发送函数将变量的值通过4G模块发送出去 。时间戳如果生成,这里需要包含一个系统自带的头文件:# "time.h",并通过(&Time)函数,将获取的当前时间(格式:XX-XX-XX YY:YY:YY 年-月-日 时:分-秒,这个时间可以通过时钟芯片读取,我的程序为了演示方便,我是直接用软件延时的方式直接换算出日期和时间的,最关键还是时间戳的转换)北京时间格式转换为时间戳格式的算法如下:
Time. = (2000 + [0])0 + 100;
Time. = [1] - 1;
Time. = [2];
Time. = [3]- 8;
Time. = [4];
Time. = [5];
=(&Time);//读取时间戳
=*1000;
大家可以通过这个函数转换出来的时间戳值,放到在线工具进行反推验证,比如我得到的一个时间戳的值是00 单位是毫秒,如图13的1位置可以看到转换出来的北京时间是符合要求的(要注意,这个随数据一起发送的时间不能超过你生成密码用的时间) 。
图13
还有就是如何把 平台需要的数据格式组合起来,比如我这个系统目前发送的是温度,湿度,光照三个值,数据格式如下:
{"id":"0001","":{"":{"time":00,"value":1155.00},"":{"time":00,"value":40.0},"":{"time":00,"value":32.0}},"":"1.0"},但是如果直接在C语言里发送是发送不过去的,需要用到一个字符串组合函数如图14,为了方便大家看到调用的全部参数为把程序分行了,但是在实际编译的时候要排成一行,要不然编译不通过 。
图14
当然了也可以通过Keil环境下库生成相应的JSON格式的数据,但是这样做的话对单片机的存储空间有一定要求,所以如果传输数据量大需要用JSON函数转换,如果传输数据不多的话可以直接用我介绍的方法 。
第八步 回顾总结 其实最关键的还是要保证4G模块能和 建立连接,真正需要单片机控制的非常少,关键还是第一篇文章,以及这边文章的前几部的循序渐进的联网测试,还有就是为了保证数据能正常上报,一定要验证下单片机串口发送出来的数据格式是否正确 。当然了,大家看了本篇文章以后应该大体原理都懂了,我本人从第一次接触 平台到能把自己的数据发送上去,前前后后也搞了一个多星期,同时把该平台的OTA远程升级也做了验证和实践,希望我的文章能帮助到大家 。