网上资料太杂?一颗STM32,我把数据上云,玩明白了!

B站影视 韩国电影 2025-09-29 15:09 1

摘要:于是,我花了好久时间,才有了这个户外光照传感器的开源,以及如何使用Air724 4G AT模块,如何将数据通过MQTT传输至云端(OneNet)的方案。

这,是一个户外光照传感器!

秒级检测!

能上云!

我为啥做这个?

网上关于光照传感器上云的方案,资料太少,太杂!

于是,我花了好久时间,才有了这个户外光照传感器的开源,以及如何使用Air724 4G AT模块,如何将数据通过MQTT传输至云端(OneNet)的方案。

开源出来,希望能帮到同好!

如果你养植物,需要优质的智能养护方案

想通过一个项目练手学习物联网技术

那一定不要错过这个项目!

光照传感器能做什么?

如何理解它的使用场景呢,我感觉是有点类似于米家的这个传感器。

它通过对人体存在的感应,结合智能家具实现——人来了开空调+开灯,人走了关空调+关灯的效果。

那光照传感器也是一样的。

如果它能上云,就能结合其他设备。就能根据数据反馈,实现精准的:

智能浇灌
光伏发电站监测
建筑工地环境监测
农业大棚光照管理
科研数据采集

接下来,我们瞅瞅它的软硬件设计方案!

项目使用STM32F103RCT6和Air724UG 4G模块制作。

图1 总体框图

图2 数据传输框图

02 电路设计图

原理图

PCB图

03 硬件参数

主控:STM32F103RCT6
供电:EG1192,这里有一个Buck电路,还加了一个type-C口,能直接用5v供电
4G模块:Air724 4G模块
光照传感器:MAX44009模块,这里直接买的JT-I2C1208模块,它配有防水透明外壳和连接线
实时操作系统:FreeRTOS;LCD仅在调试时使用即可

为啥要用外部看门狗?

是考虑到会休眠时无法喂狗,需要给看门狗加上使能。

已知:外部EEPROM是用来记录手动调参的参数。那产生偏移怎么办?

MAX44009可能会有偏移,需要手动调参,这里只使用了y = ky’+b,y为调节后的值,y'为原始值,可以调节k和b来改善偏移

其他:

画的SD卡卡槽,目前暂时未用到。初衷是考虑到可能会把数据存储到本地;LED排母接口,接的是1.14寸TFT屏,只在调试时用到

硬件方案有了,那如何实现云端采集数据?下面是教程↓

本章节主要分享——4G模块连接OneNet使用说明。

把我在银尔达买的Air724 4G模块先连接到电脑直接使用串口助手进行调试。

云:中国移动的OneNet串口助手:格西烽火

测试的流程和AT命令集详细可以查看YED M724 AT 固件用户手册和Luat 4G LTE 模块 AT 命令手册。如果想要先使用MQTT.fx测试一下OneNet接入设备,可以看原文的说明。OneNet的接入安全认证查看:https://open.iot.10086.cn/doc/aiot/develop/detail/624。

Air724UG 4G模块如何通过MQTT连接上OneNet?

如图所示:

它发送的具体AT指令流程如图:

图3 Air724 4G模块

图4 格西烽火界面

AT指令这里,我会说明一下关键的地方。他的返回值我就不一一说明,因为在Luat 4G LTE 模块 AT 命令手册或代码或图4中的激励中详细可以看到。

1、初始化硬件。

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

2、网络设置。

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

3、MCOFIG。

使用该指令格式为

AT+MCONFIG="LightSensor1","592329","version=2018-10-31&res=products/592329/devices/LightSensor1&et=1781202267&method=md5&signr\n

具体每个位置的含义是:

第一个引号中的"LightSensor1"是你的某产品中某设备名称;第二个参数"592329"是你的产品ID;第三个参数是根据OneNet要求生成的token,包含了产品products号,设备名称devices名称,时间戳et,加密方法method和签名值sign。

第三个参数可以使用OneNet的token生成工具或使用官方的python生成示例生成,这里的key需要你的OneNET产品的key,而不是设备秘钥。

图6 OneNet的token生成工具

4、建立TCP连接,请求会话。

打开OneNet查看设备,可以看到设备已经在线。

图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。

图8 payload格式示例

图9 light值更新

为方便有需要的创友DIY学习~

这里再简单说明一下已开源的STM32代码和python代码的使用说明~

RTOS的各任务的.c文件放在Tasks文件夹中。

user_TasksInit.c中的User_Tasks_Init(void)是任务初始化函数,替代了cubemx生成的MX_FREERTOS_Init(void)函数。

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

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

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

python我给了有两个文件,分别是Onenet_getdata.py和token_ge.py。分别用于你的电脑获取Onenet中设备的物理数据,和生成token。获取的数据返回格式为JSON格式。

注意,代码中产品ID,设备名,产品key同样需要改成你自己的参数,这些信息都是可以在你的OneNet开发者平台看到详情的,复制下来即可,这里我就不演示了。

包含:完整源码、接线图、云平台配置教程、数据获取脚本。让你快速搭建属于自己的物联网监测系统!

【正文完】

来源:嘉立创EDA

相关推荐