摘要:于是,我花了好久时间,才有了这个户外光照传感器的开源,以及如何使用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