Molink-模组连接套件,让设备不再孤单
通过网络连接实现设备之间的互联互通是物联网应用的核心,当前物联网设备普遍通过通信模组连接到网络中,通信模组在物联网应用中扮演着不可或缺的角色。同时,由于物联网应用场景的需求各异,各个通信模组厂商都推出了许多针对不同应用场景的通信模组,导致不同厂商、型号的通信模组AT指令集之间存在许多不兼容的地方。这些不兼容的AT指令集给开发者带来了不便,也让物联网终端产品的通信模组优化升级十分困难。
01 Molink 简介
Molink即ModuleLinkKit
(模组连接套件),是一整套针对嵌入式模组开发套件。MoLink提供了模组多实例管理、模组功能适配并向开发者提供统一易用的API(应用程序接口)。它通过架构设计和模组适配实现了对不同的通信模组的统一控制,并向上层框架和应用提供统一的API接口,使开发者不必关心不同模组之间的差异即可完成网络相关应用的开发。同时MoLink组件设计兼容了通信模组的OpenCPU开发模式,极大提升了用户程序的可移植性,应用程序的无线连网功能可在AT模式和OpenCPU模式下无缝切换。
02 Molink 架构设计
Molink模组连接套件向上层框架和用户应用提供统一的API接口,同时适配了多种型号通信模组的AT指令集,架构如下图所示:
- 抽象接口层:提供通用控制、网络服务、网络连接、套接字、Wi-Fi管理等多种接口的定义及高层实现。
- 核心层:提供Molink模组对象定义、模组实例的管理及其他关键部分实现。
- 模组适配层:提供各种型号通信模组的抽象接口层各种接口的适配函数实现。
- AT解析器:可选模块,MCU架构下的模组适配通过AT解析器与通信模组进行AT指令通信。
03 Molink 实战演示
介绍了这么多Molink相关知识,作为实战派的一员,我们怎么能不上手开发试试呢?下面让我们一起使用万耦启物开发板,搭配OneOS系统的Molink与OneNET组件包,实现一个简易的物联网小项目吧!
软件:OneOS 2.3.0(可在官网或 Gitee 下载)
硬件:启物开发板
(生成基础的BSP工程在上篇博文已详细介绍,本文不再赘述)
Step1 开启OneNET组件支持
在OneOS工程目录下右键打开OneOS Cube,进入Components→Cloud→OneNET→MQTT kit选项中,开启OneNET组件支持:
在Components→Network→Molink→Enable IoT modules support→Moldule→WiFi Modules Support→ESP8266→ESP8266 Config种开启Enable ESP8266 Module BSD Socket Operates选项以支持socket操作:
进入Components→Network→Protocols→MQTT中开启Enable MQTT Stack选项,以支持MQTT接口,因为我们需要通过MQTT协议接入OneNET:
保存并退出后使用scons --ide=mdk5命令重新生成工程文件即可:
Step 2 在OneNET平台新建产品与设备
登录OneNET,然后进入控制台页面,在全部产品服务中,找到MQTT物联网套件:
进入该页面后,点击添加产品按钮新建产品:
产品的产品信息与技术参数设置如下:
这里的产品名称与简介可以自行修改,主要的联网方式设备接入协议选择正确即可,完成后点击确定即可。
添加了产品之后,还需要新建一个设备才能进行测试,产品是一类硬件的模型,最终跟硬件对应的是设备。可以理解为,产品指的就是启物开发板种硬件,现在已经新建了一个产品对应启物开发板这类硬件,接下来新建一个设备,对应我们手里这个板子。
在OneOS系统的组件中默认不开启自动创建设备,所以还是按照手动创建设备的流程执行一次,先点击新建好的产品的页面,找到添加设备:
点击添加设备后在弹出的页面填写设备名称即可:
完成后,便可在设备列表这一项查看到对应名称的设备:
Step 3 将OneNET的设备信息与程序关联
这里使用OneOS系统专门为启物开发板定制的demo示例源码:
onenet_mqtt_demo.c/h文件实现使用OneNET组件的MQTT组件接口实现OneNET的连接与通信接口。sensors_demo.c/h文件实现设备的IOT工作流程框架,调用onenet_mqtt_demo.c/h文件的接口与OneNET进行通信。
这里我们仅需要确认onenet_mqtt_demo.h中使用的Molink设备名称信息,以及再次确认WiFi的连接信息即可,一般情况下需要修改的只有WiFi热点名称与密码:
随后需要将OneNET云端的设备信息与程序对应,需要打开onenet_device_sample.h文件,这个文件在onenet_matts.c中有包含,可以从这里右键打开:
接下来需要将onenet_device_sample.h文件中的设备信息与我们之前新建的OneNET上的设备信息意义对应起来,首先是设备的ID与access_key,在MQTT物联网套件的产品概况找到更改新建的产品,查看对应的信息:
然后将ID与access_key填入对应的位置,USER_PRODUCT_ID宏定义填写产品的ID,另一个USER_ACCESS_KEY宏定义填写access_key即可:
随后找到设备列表中对应的设备,这里使用更改新建的qiwu_test设备的信息:
将USER_DEVICE_NAME宏定义填写设备的名称,USER_DEVICE_ID宏定义填写设备ID,USER_KEY宏定义填写设备的key即可:
至此,硬件的程序信息与OneNET云端设备已经对应了,编译程序下载后,即可在设备列表中看到我们的设备状态变成了在线状态:
点击操作的数据流选项,然后勾选实时刷新,就可以看到硬件上传的数据了,数据会显示最近的数据的上传时间:
如果连接了启物开发板的调试串口,就可以在调试串口看到如下的消息输出:
至此,启物开发板与OneNET已经完成了连接通信,此时的启物开发板就是一个物联网温湿度计,我们可以借助微信小程序之类的平台或者自行编写手机或者PC电脑软件,通过HTTP协议访问OneNET来获取到这个设备的数据。
Step 4 尝试从OneNET下发命令给启物开发板
OneNET连接当然不仅仅只有数据上传这么简单的功能,还有更多的功能可以参考OneOS与OneNET的文档中心。接下来尝试增加一个从OneNET下发命令给启物开发板,让启物开发板做出相应反应的功能。
刚刚在onenet_mqtt_demo.h中看到过TEST_DEV_CTRL_CMD宏定义的说明:
那么先尝试一下这个命令是否能够正常使用,在设备列表栏,当设备状态是在线状态时,点击操作下更多操作选项,选择下发命令:
然后在弹出的下发命令的侧边栏中输出命令,填入超时时间,这里填5即可,点击发送,可以看到下方的响应时间与返回结果显示本次命令下发成功:
同时在启物开发板的调试串口会有对应的消息输出,但并没有发现启物开发板按照注释的说明出现闪灯或者蜂鸣器的控制。
这是因为接收到的命令并没有传给onenet_mqtt_demo.c部分,虽然OneNET的MQTT组件确实接收到了命令,但是没有传递到执行的源码部分:
也就是这个部分的源码并没有执行,这是因为onenet_mqtt_cmd并没有被填入对应的命令数据,我们需要在onenet_mqtts.c中添加一段源码:
这样将获取的命令写入了onenet_mqtt_demo.c部分的命令缓冲区onenet_mqtt_cmd,随后在执行sensors_demo.c的控制时检测到对应的命令就会执行命令的动作了。这里需要修改修改sensors_demo.c中的sensor_demo_led_ctrl函数:
同时在main.c中添加蜂鸣器初始化源码:
原本的启物开发板的RGB灯是三种颜色循环闪烁,将修改完成的源码编译烧录后,复位开发板,等待开发板与OneNET完成连接后下发命令,就可以看到RBG灯运行新的闪烁方式。同时蜂鸣器也会响了,总共会循环宏定义BUZZES_AND_FLASH_LED_TIMES的次数,默认是30次。
好啦,通过前面的实战,我们已经将硬件与云端连接,实现了物联网的硬件控制与云端数据交互。而后续的用户交互部分,通过HTTP协议访问云端,进行数据的获取与命令下发,就可以将用户也接入到系统中,从而完成完整的物联网产品数据交互框架。
互联互通一直是物联网的核心,OneOS也在为此不断努力,后期OneOS MoLink组件将适配数量众多的无线通信模组,使得用户可以根据实际需求,便捷选择模组型号,轻松配置进行切换。敬请期待!