目前行业对于各类物联网接入已普遍支持实现,在平台类功能逐步完善过程中,接入是走向智慧化道路的基本要求。下面我们仍以中国移动物联网应用使能平台OneNET为例,详细展开介绍。应用使能平台可以实现在各种网络下和终端的连接,支持多种主流协议,最大限度地满足各种用户的不同需求。通过提供主流联网方式,汇聚多种输出能力,尽可能地为开发者创造便捷。强大的应用孵化能力,拖拽之间即可完成应用创建。
1.基于模组实现NB-IoT设备接入实例
下面以中国移动自主品牌NB-IoT模组M5310为例来介绍如何实现NB-IoT设备接入。
(1)上电初始化
注意:每个AT命令之间应该留有一定时间间隔
注:需要确认入网状态为已注册才能进行后续数据收发操作,如果不使用自动上报功能,可使用AT+CEREG?命令主动查询当前注册状态直到变为已注册,目前测试开机注册时间范围为20~120s。
(2)UDP数据收发
1)创建UDP Socket。
AT+NSOCR=<type>,<protocol>,<listen prt>[,<receive control>]
例如:
2)发送UDP数据。向目的UDP地址发送数据可使用AT+NSOST或AT+NSOSTF命令,具体如下:
AT+NSOST=<socket>,<remote_addr>,<remote_port>,<length>,<data>
AT+NSOSTF=<socket>,<remote_addr>,<remote_port>,<flag>,<length>,<data>
例如:
3)接收UDP数据。当接收到UDP数据时,可以使用AT+NSORF读取,当读取长度大于实际接收长度时,返回缓冲区实际接收数据长度。
注:本示例的测试服务器为中移物联网公司内部测试服务器,会自动回复“[远程IP:端口]接收数据”,只做测试用途,不保证服务器功能。
4)关闭UDP。
(3)应用使能平台数据收发
1)应用使能平台端创建设备。访问中国移动应用使能平台(OneNET)门户网站:http://open.iot.10086.cn/,创建NB-IoT产品及设备。
创建设备所使用的鉴权信息IMEI及IMSI需要记录并在终端登录时使用,返回的device_id为平台端创建的设备接入标识,如果需要查询设备信息,需要提供设备id。
图17.8 设备注册流程
2)设备注册流程如图17.8所示。
①创建一个通信实例设备,该指令目前只允许拥有1个实例。
②向通信套件添加object组。
LwM2M规范定义了每个对象对应客户端的某个特定功能实体object,instance代表着这个ob-ject的不同实例。通过objectid和instanceid可以确认到一个指定的object实例,而每个object下可以有多个resource属性数据。例如:一个设备有芯片温度传感器与外界温度传感器的值需上报,温度传感器便是一种object对象,而具体到某个温度传感器则需要instanceid来区分;某个温度传感器所对应的单位、温度等数值可视为其resource属性,具体的编码规范可参照IPSO规范或OMA模型规范http://www.openmobilealliance.org/wp/OMNA/LwM2M/LwM2MRegistry.html。
在注册前添加的objects在注册时会通过注册信息发给应用使能平台,注册成功后平台会对添加的所有object下发observer请求;当前版本传输的object皆应在注册前添加。
③发起注册请求,由于注册结果为异步事件,注册是否成功应以步骤0为准。
④注册结果上报,上报的注册请求服务器收到后会返回本次注册结果,如在超时时间还未收到服务器回复,则也会注册失败,如下:
⑤Observe请求消息,该消息为平台下发,模块会自动处理Observe请求,用户可不必处理。
3)数据上报流程如图17.9所示。
图17.9 数据上报流程
①用户上报数据。
②平台响应上报。
注:<ackid>被设置为大于1的情况下平台侧有响应,如果默认上传数据平台侧不会有ACK回复。
<ackid>仅在<flag>参数为1时设置有效。
每次notify上报数据长度应小于500字节。
4)设备管理流程如图17.10所示。
图17.10 设备管理交互流程
设备管理目前版本提供3种操作:write、read、execute。
MCU应在执行平台下发的规定操作后数秒内(建议3s)上报对应操作结果,否则传输信息可能丢失。
①read操作,读取指定object下指定instance下的所有resource请求。
控制平台下发读操作的API报文示例如下:
GET http://api.heclouds.com/nbiot?IMEI=test2&obj_id=3200&obj_inst_id=0 HT-TP/1.1
Host: api.heclouds.com
api-key:<API-KEY> //<API-KEY>参数请替换成产品或者设备API-KEY
Content-Length:0
读取指定object下所有instance下的所有resource请求如下:
控制平台下发读操作的API报文示例如下:
GET http://api.heclouds.com/nbiot?IMEI=test2&obj_id=3200 HTTP/1.1
Host: api.heclouds.com
api-key:<API-KEY>//<API-KEY>参数请替换成产品或者设备API-KEY
Content-Length:0
读取指定object下指定instance下的指定resource请求如下:
控制平台下发读操作的API报文示例如下:
GET http://api.heclouds.com/nbiot?IMEI=test2&obj_id=3200&res_id=5500 HT TP/1.1
Host: api.heclouds.com
api-key:<API-KEY>//<API-KEY>参数请替换成产品或者设备API-KEY(www.xing528.com)
Content-Length:0
资源读取API报文协议见表17.8。
表17.8 资源读取API
注:每次read操作后模块响应上报COAP报文长度应小于512字节。
②write操作。
控制平台下发写操作的API报文示例如下
资源写入API报文协议见表17.9。
表17.9 资源写入API
注:每次write操作下发COAP报文长度应小于512字节,故下发数据段长度最大480字节。
③execute操作。
控制平台下发EXECUTE消息的API报文示例如下:
资源执行API报文协议见表17.10。
表17.10 资源执行API
注:每次execute操作下发COAP报文长度应小于512字节,故下发数据段长度最大480字节。
5)设备注销流程如图17.11所示。
图17.11 设备注销流程
注:用户可在向平台发送注销请求后执行销毁实例,此时模组会自动删除所有object;用户亦可直接执行销毁实例,模组将会在向平台提出注销请求后删除object,再销毁object以及通信实例。
6)长数据收发,在进行长数据收发时,用户需要对相关数据进行分包处理。
分包大小设置:配置工具中生成配置参数时加上下列参数,参考AT指令集中“+MIPL-CONF”命令说明:
-u设置BLOCK1的大小,对write和execute有效,范围为0~6,大小为2(4+n)
-g设置BLOCK2的大小,对read有效,范围为0~6,大小为2(4+n)
-x设置主动分包门限,范围为0~2,大小为2(8+n)
①模组长数据接收(write/execute接口)。
a)write指令API报文示例如下:
模组接收到的数据流如下述示例,如图17.12所示。
图17.12 数据流示例图
上述表示接收长数据的两个数据包,最后的字段为payload数据,在接收分包长数据段时,+MIPLEXCUTE/+MIPLWRITE会额外显示分包结束标志与本包长度,具体可参考AT命令手册。
数据发送完毕后,只需要对最后一包的包序号进行回复,如图17.12所示回复如下:
b)execute指令API报文示例如下:
接收示例图如17.13所示。
图17.13 接收示例图
数据包最后三个字段的含义与write相同。
对API控制台回复,数据发送完毕后,只需要对最后一包的包序号进行回复,如图17.13所示回复如下:
②模组长数据发送(read接口),当使用Read接口时,超过设置长度会触发模组执行内部Block分包发送,整个流程模块内部自动完成。
Read指令API报文示例:
a)读取指定object多个resource请求如下:
b)模组端回复如下
2.基于MCU实现NB-IoT设备接入实例(LwM2M)
基于MCU的方式实现NB-IoT设备接入,即通过移植SDK至设备MCU中,通过MCU和模组进行交互实现连接到应用使能平台。该场景适用于实验阶段或是终端设备对接入应用使能平台有较紧急意愿,但设备所用模组暂未支持接入应用使能平台的情况下。
具体的接入实例及步骤如下:
1)SDK移植:首先需要完成对SDK的移植操作,实现把SDK植入需连接到应用使能平台的MCU芯片中。
2)网络配置:在连接应用使能平台之前需要对设备侧进行网络配置,包括:接入机的地址和鉴权信息等参数(即IMEI、IMSI),请参见图17.14。
图17.14 网络配置
同时还需要对设备和平台所交互的资源进行资源配置,在设备端的SDK中,设备上所有与应用使能平台进行交互的数据变量都需要表示为资源,比如:温湿度传感器的温度和湿度分别可以表示为2个资源。配置好资源属性后,设备在向服务器注册的过程中会携带相应的资源列表,服务器端会主动向设备订阅(Observe)资源列表中所有资源,见表17.11。
表17.11 服务器端订阅资源
(续)
注意:objid和resid是不能够随意定义的,必须遵守《IPSO-Smart-Objects-Expansion-Pack》文档中的规定。
配置示例如图17.15所示。
图17.15 配置示例
3)心跳设置。设备端的SDK在初始化的时候会设置lifetime的值,并在向服务器注册的时候上传该值,SDK在到期后会主动向服务器发送Update消息,如服务器端未收到Update消息,服务器端将抛弃所有上报的Notify消息并向该设备发送RST消息。
4)数据发送。如果有资源的值被更新了,则需要调用nbiot_device_notify通知SDK该资源的值发生了变化,由SDK择机上传至应用使能平台。
5)下行处理。命令由第三方应用发送至应用使能平台,并由云平台转发至终端设备,读写命令和执行命令均直接发送至终端,SDK会自动调用该命令对应的资源中的write钩子函数或者execute钩子函数,用户只需要编写该两个函数即可以完成下行命令的处理。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。