发作品签到
专业版

4G-OneNet-户外光照采集系统

工程标签

4.0k
0
0
3

简介

使用STM32F103和合宙的Air724UG 4G模块做的一个户外光照传感器,并将秒级间隔的光照数据传输至OneNet云端

简介:使用STM32F103和合宙的Air724UG 4G模块做的一个户外光照传感器,并将秒级间隔的光照数据传输至OneNet云端

开源协议

CC BY-SA 3.0

(未经作者授权,禁止转载)
创建时间:2023-07-01 17:11:10更新时间:2023-10-10 13:43:48

描述

目的

        项目来源是之前需要做一个户外光照采集器,收集一个区域各个采集器点的光照强度。然后预测该区域未来的光强,以及可发电量。

        这里开源这个光照传感器上云的方案,旨在分享如何使用Air724 4G AT模块,分享如何将数据通过MQTT传输至云端(OneNet),之前看网上的资料确实太少太杂了,搞了好久才做出。同时,也可以使用相关API进行云端的数据获取。后面会给出python写好的代码,使用OneNet的https的API获取设备数据。

 

总体框架

        主控使用STM32F103RCT6;供电部分使用的EG1192,一个Buck电路,同时也加了一个type-C口,直接用5v供电也可以;4G模块使用合宙Air724 4G模块;光照传感器使用MAX44009模块,这里就直接买的JT-I2C1208模块,它配有防水透明外壳和连接线;实时操作系统使用的FreeRTOS;LCD仅在调试时使用即可;外部EEPROM用来记录手动调参的参数,即有可能MAX44009会有偏移,需要手动调参,这里只使用了y = ky’+b,y为调节后的值,y'为原始值,可以调节k和b来改善偏移。

KYmzzXF2SGMsBX17ohbc9qAgroqrXjB7xAO5PglT.png

图1 总体框图

JbtAano6uP5PksMORQNYEybsZOMJyv6pr5oYZ6zi.png

图2 数据传输框图

 

 

 

4G模块连接OneNet使用说明

        云我们选用中国移动的OneNet,在银尔达买的Air724 4G模块刚开始可以先连接到电脑直接使用串口助手进行调试,这里推荐使用格西烽火串口助手,测试的流程和AT命令集详细可以查看YED M724 AT 固件用户手册Luat 4G LTE 模块 AT 命令手册。如果想要先使用MQTT.fx测试一下OneNet接入设备,可以看这个链接的说明:MQTT.fx模拟设备接入物联网平台。OneNet的接入安全认证可以查看这个链接:接入安全认证

GiOvJJzAYOeZfQ68M01dpAelQkl2EGi5rdAInoly.png

图3 Air724 4G模块

 

XrhXQT6CEPovABZ0E6XYwl6zQLPDvmga5t0TEolU.png

图4 格西烽火界面

 

nJFp3AKbjtEz5cEuCu3Tl2FkwxO3zDGBrAuQdSuh.png

图5 通用上网流程

 

        关于Air724UG 4G模块通过MQTT连接上OneNet,大致流程如图5所示,它发送的具体AT指令流程如图4所示。具体的流程分析中,发送的AT指令我就只说明关键的地方,他的返回值我也不再一一说明,在Luat 4G LTE 模块 AT 命令手册代码图4中的激励中详细可以看到。

        具体发送AT指令流程:

        1、初始化硬件。包括匹配波特率、检测SIM卡是否插好,使用AT+CPIN?\r\n查询SIM卡是否插好,如果返回+CPIN: READY则为正常。

        2、网络设置。首先查询信号质量;然后查询网络状态等等。。。详细过程见图4。

        3、MCOFIG。使用该指令格式为AT+MCONFIG="LightSensor1","592329","version=2018-10-31&res=products%2F592329%2Fdevices%2FLightSensor1&et=1781202267&method=md5&sign=???????????????????"\r\n,具体每个位置的含义是:第一个引号中的"LightSensor1"是你的某产品中某设备名称;第二个参数"592329"是你的产品ID;第三个参数是根据OneNet要求生成的token,包含了产品products号,设备名称devices名称,时间戳et,加密方法method和签名值sign。第三个参数可以使用OneNet的token生成工具或使用官方的python生成示例生成,这里的key需要你的OneNET产品的key,而不是设备秘钥。

r8wadRMbkGVZMqvY5Robj3wSs8r7EXn7ToSWzJUV.png

图6 OneNet的token生成工具

        4、建立TCP连接,请求会话。首先使用指令格式为AT+MIPSTART="mqtts.heclouds.com",1883\r\n,建立TCP连接,这里端口连接到1883。发送后,收到CONNECT OK则连接成功。然后使用指令AT+MCONNECT=1,120\r\n,请求会话,收到CONNACK OK则请求会话成功。打开OneNet查看设备,可以看到设备已经在线。

eYVgdndFZmu55zrruk1WG9snnI3mLiOHL8BvU2jQ.png

图7 设备查询在线

 

        5、查询MQTT状态,订阅主题。使用指令AT+MQTTSTATU\r\n,可以查询MQTT连接状态,关于订阅主题,物联网平台中,服务端和设备端通过通信主题Topic实现消息通信,设备可以通过发布消息到系统 topic 调用服务接口,也可以订阅系统 topic 用于接收服务消息通知,服务提供的系统 topic 详见OneNet通信主题Topic列表。订阅主题,使用指令AT+MSUB="$sys/592329/LightSensor1/dp/post/json/accepted",0\r\n,和指令AT+MSUB="$sys/592329/LightSensor1/dp/post/json/rejected",0\r\n,订阅的这两个主题分别是发布消息接收和拒绝的主题,在测试时可以通过这两个主题的消息,判断是否发布消息成功

        6、发布消息。使用指令AT+MPUB="$sys/592329/LightSensor1/dp/post/json",0,0,"{\\22id\\22: 1,\\22dp\\22: {\\22light\\22: [{\\22v\\22:35}]}}"\r\n,\\22表示内嵌的双引号,这里是向OneNet的云端发送light的物理数据,发送的具体格式如图8所示。发送之后可以看到数据更新为指令中的"v":35。

RKkfaIWmsKIoek6BG5RLbd7NlrWDWNxHEmIXyUxc.png

图8 payload格式示例

1UCsOuo2LSAsPhOt04DOwQdem53yaW6hCy6zDRHx.png

图9 light值更新

 

原理图设计说明

        原理图中使用外部看门狗,是考虑到会休眠时无法喂狗,需要给看门狗加上使能;

        原理图中电源部分,在HT7333-A输出口接一个J1,使用的时候直接跳线帽接上或者直接焊短接即可,或者你可以直接把这里去掉。这里加J1是我之前调试的时候加的;

        虽然画了SD卡卡槽,考虑到可能会把数据存储到本地,但是目前暂时未用到;

        原理图上的LED排母接口,接的是1.14寸TFT屏,只在调试的时候有用到,链接是:1.14寸TFT显示屏

 

PCB设计说明

        PCB的布局没有做过多优化,大家可以按照自己的想法再更改。

 

STM32代码说明

        RTOS的各任务的.c文件放在Tasks文件夹中。user_TasksInit.c中的User_Tasks_Init(void)是任务初始化函数,替代了cubemx生成的MX_FREERTOS_Init(void)函数。

        大家拿到代码需要根据你OneNet的设备信息改下onenet_MQTT.c这个文件中的代码,需要写入你的产品ID,设备名,和签名值,如图10所示。由于安全问题我给的代码会把sign中的值改成错误的,以免大家连我的设备了。

        边缘设备除了上发光照强度数据,我还额外写了云端下发命令到边缘设备,即在设备上订阅了cmd主题,详细的订阅主题和字符串处理内容请细看STM32的代码。

PgJOCqmOpOxdegZkkh25W74PMoqJ8Wjsf5Fnz0iT.png

图10 修改onenet_MQTT.c文件中的参数

 

python代码说明

        python我给了有两个文件,分别是Onenet_getdata.py和token_ge.py,分别用于你的电脑获取Onenet中设备的物理数据,和生成token。获取的数据返回格式为JSON格式。注意,代码中产品ID,设备名,产品key同样需要改成你自己的参数,这些信息都是可以在你的OneNet开发者平台看到详情的,复制下来即可,这里我就不演示了。

iVUE2vNKNFavus5CxogwLHhIOq9o2UP6wl8ya064.png

 

实物展示说明

        带有外壳的实物图如图n所示,外壳是直接淘宝买的,然后做好防水即可,这里引出一条12v母头线公头连接线监控电源线,接入外部12V的DC输入。拆解的实物图如图n所示,这里这个外壳3D打印的,后面就没用了,图中标出了光照传感器Air724UG直插模块的位置,这两个直接插上即可。

xgivBstL7f2aNMdgx7WuAlcu5vyxVLmJmV3amVXC.jpeg

图11 带外壳的实物图

 

7oCtxmaVTLFAaLYpyCbaYMWnf2BgaAolNfxD1JP9.png

图12 拆解的实物图

 

        然后是实物的测试,这里我截取了一下晚上去吃饭时,放在寝室的设备的数据如图n所示。由于我现在在其他地方上课身边没有设备,只放出了之前记录的数据图片。之前说的,这个设备可以秒级间隔发数据,但是实际上,可能会受网络延迟等影响,最后测试时发现数据间隔有的为1s有的为2s,这里我查询不到以前的数据了,所以没放出来。

Kc9gxPfe1kRZgXZfBqyuNKK3Gmp8qgUUgutnNFqK.jpeg

图13 云端数据展示

 

参考链接

Luat社区:Luat社区 (openluat.com)

 

部分模块购买链接

详见正文中的蓝色超链接哦

 

Github链接

https://github.com/No-Chicken/4G-OneNET-LightSensor

 

 

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

附件

序号文件名称下载次数
1
LightSensor_V1_2_OneNet代码.rar
167
2
python_codes.rar
42
克隆工程
添加到专辑
0
0
分享
侵权投诉

评论

全部评论(1
按时间排序|按热度排序
粉丝0|获赞0
相关工程
暂无相关工程

底部导航