我的订单购物车(0)联系客服 帮助中心供应商合作 嘉立创产业服务群
领券中心备货找料立推专区爆款推荐TI订货PLUS会员BOM配单PCB/SMT工业品面板定制

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

2025-10-09 17:08:10阅读量:3363

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

秒级检测!

能上云!

能预测!

 

户外光照传感器

 

为啥做这个项目?

是这样的。

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

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

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

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

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

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

 

0光照传感器能做什么?
01  功能/亮点
1、收集各个采集器的光照强度
2、预测未来光强、可发电量
3、光照数据检测间隔:秒级
4、能通过4G网络将秒级数据MQTT传输至OneNet云端
5、联网稳定,不易掉线
6、开箱即用,插入12V电源即可工作
7、完整开源:硬件连接+固件代码+云端对接,提供Python数据获取API

 

02  适用场景

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

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

 

使用场景

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

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

 

光照传感器

 

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

 

02 硬件设计方案

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

01  总体设计框图
总体框图

图1 总体框图

数据传输框图

图2 数据传输框图

02   电路设计图

 

原理图

原理图

PCB图

PCB图

 

03  硬件参数

硬件参数

 

04  原理图设计说明

为啥要用外部看门狗?

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

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

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

其他:

  • 画的SD卡卡槽,目前暂时未用到。初衷是考虑到可能会把数据存储到本地;

  • LED排母接口,接的是1.14寸TFT屏,只在调试时用到

 

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

 

03 软件设计方案

本章节主要分享——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指令流程如图:

 

Air724 4G模块

图3 Air724 4G模块

格西烽火界面

图4 格西烽火界面

 

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

发送AT指令流程(6步):

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,而不是设备秘钥。

OneNet的token生成工具

图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查看设备,可以看到设备已经在线。

 

设备查询在线

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

 

payload格式示例

图8 payload格式示例

light值更新

图9 light值更新

 

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

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

 

代码使用

 

01  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的代码。

修改onenet_MQTT.c文件中的参数

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

 

02  python代码说明

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

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

 

代码说明

 

0开源网址

目前,项目已全开源图片

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

——想复刻想给作者点赞下面会附上开源网址↓,欢迎大家在遵循作者开源协议的情况下,友好复刻学习~~

开源网址:

https://oshwhub.com/no_chicken/lightsensorv1-2_2023-04-21