前言

本次项目需要使用移动的物联网卡,所以需要将设备从电信AEP换到ONENET平台
同时附上BC260模块相关资料。

一、配置ONENET平台

1. 创建产品:

产品是指同一功能的设备的集合
注册后创建产品,填写相关信息,重点是:设备直连,LWM2M接入协议,IPSO协议,NB联网,开启自动发现资源。
配置界面

2. 添加设备

设备是指具体的某一个物理设备。
填写模块的IMEI号和IMSI号就行了。

二、模块连接ONENET平台

1. 连接ONENET平台

只展示必要的AT指令流程,查询imei,网络附着等常用AT不展示

1.1 联网
AT+QBAND=1,8	//配置NB-IoT模组频段,电信是AT+QBAND=1,5
OK

AT+CSQ			//查询信号,非+CSQ: 99,99才行
+CSQ: 15,0
OK
1.2 确保模块联网正常后,开始连接ONENET平台:
AT+MIPLCONFIG=0,1,1,"183.230.40.39",5683		//使能 Bootstrap模式并配置Bootstrap服务器IP和端
OK				

AT+MIPLCREATE	//创建onenet通信实例
+MIPLCREATE: 0
OK		

AT+MIPLADDOBJ=0,3200,1,"1",1,1      //添加LWM2M对象,Object ID=3200,可以是其他
OK

创建通信实例,添加LWM2M对象,基本没有问题。

1.3 向OneNET发送注册请求:
AT+MIPLOPEN=0,86400    //向onenet发送订阅请求
OK
+MIPLEVENT: 0,1
+MIPLEVENT: 0,2
+MIPLEVENT: 0,4
+MIPLEVENT: 0,6
+MIPLOBSERVE: 0,108879,1,3200,0,-1 	//接收到订阅请求

AT+MIPLOBSERVERSP=0,108879,1	//响应订阅请求,订阅资源(订阅编号108879是平台返回的)

注意:在执行AT+MIPLOPEN=0,86400指令后,可能会等待很久才会依次收到+MIPLEVENT:指令,并且在收到+MIPLOBSERVE指令后要迅速返回AT+MIPLOBSERVERSP响应

1.4 响应发现资源请求:
+MIPLDISCOVER: 0,25920,3200

AT+MIPLDISCOVERRSP=0,25920,1,4,"5750"  //注册资源(资源编号25920是平台返回的)
OK
+MIPLEVENT: 0,11

注意:在收到+MIPLDISCOVER:指令后要迅速返回AT+MIPLDISCOVERRSP响应

2. 上传数据

2.1 上报资源
AT+MIPLNOTIFY=0,108879,3200,0,5750,1,5,"hello",0,0,1   //资源上报(编号108879是订阅编号)
OK
+MIPLEVENT: 0,26,1 //平台响应上报数据的返回

其中,上报数据指令的拆解:

AT+MIPLNOTIFY=<ref>,<msgId>,<objId>,<insId>,<resId>,<valueType>,<len>,<value>,<index>,<flag>[,<ackid>]

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535。
<msgId> 整型。 消息 ID;出自 URC +MIPLOBSERVE。
<objId> 整型。 LwM2M 对象 ID。
<insId> 整型。 实例 ID;出自 URC +MIPLOBSERVE。
<resId> 整型。 资源 ID;出自 URC +MIPLOBSERVE。
<valueType> 整型。 <value>值的类型。
    1 字符串类型
    2 十六进制类型
    3 整型
    4 浮点型
    5 布尔型(Boolean)
<len> 整型。 <value>值的长度;单位:字节。
    当<valueType>=1 时,该参数值为字符串类型<value>的长度,范围: 0-1024。
    当<valueType>=2 时,该参数值为十六进制字符串类型<value>的长度,范围:0-512。
    当<valueType>=3 时,该参数值可能为 24 或者 8。
    当<valueType>=4 时,该参数值为 4。
    当<valueType>=5 时,该参数值为 1<value> 数据。
    当<valueType>=1 时,该参数值为带双引号的字符串类型格式。
    当<valueType>=2 时,该参数值为十六进制字符串格式。
    当<valueType>=3 时,该参数值为整型格式。
    当<valueType>=4 时,该参数值为浮点型格式。
    当<valueType>=5 是,该参数值为布尔型格式。
<index> 整型。 消息序号。若待上报数据包含多条消息,则需要发送多次 AT 命令以完成上报。例如,若待上报数据包含 N 条消息,则参数<index>需从 N-1 到 0 依次递减, AT 命令按照<index>取值从大到小的顺序执行。 <index>=0 表示数据中最后一条消息。
<flag> 整型。 指示消息,范围: 0-2。
    0 表示<value>中最后一条消息
    1 表示<value>中第一条消息
    2 表示<value>中中间消息
    该版本仅支持<flag>=0<ackid> 整型。范围: 0-65535。
    0 上报的数据为不需要确认的消息
    1-65535 上报的数据为需要确认的消息
    

如果一次联网要上传多包数据,重点关注最后三个标志位:

注意注意:

  • 如果一包数据不大于模块的缓冲区(512字节),则不需要分帧,那么后三位就是0,0,x;如果一包数据大于一帧,那就需要分包(例如一包分成4帧),那么index是3->2->1->0,flag是1->2->2->0。
  • ackid是应答确认标志,发送后等待平台响应+MIPLEVENT: 0,26,x指令后,才可以下发下一包数据,否则会丢包(我测了好久的丢包问题,最后询问厂家才解决);另外第一包数据上传后,这个返回指令很可能也要等很久。

2.2 结果展示

上报资源后平台显示
注册和订阅资源之后,平台显示设备在线,点击详情中的设备资源,可以看到上传的数据。

3. 命令下发

3.1 执行操作
//指令示例:
+MIPLEXECUTE: 0,17812,3200,0,0,99,"{"mid":2,"cmdType":1,"cmd":{"collectCycle":"1","uploadCycle":"2"}}"
//指令拆解
+MIPLEXECUTE: <ref>,<msgId>,<objId>,<insId>,<resId>[,<len>,<arguments>]

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 数据包消息 ID。
<objId> 整型。 从 OneNET 或者应用服务器处接收到的 LwM2M 对象 ID。
<insId> 整型。 从 OneNET 或者应用服务器处接收到的实例 ID。
<resId> 整型。 从 OneNET 或者应用服务器处接收到的资源 ID。
<len> 整型。 参数<arguments>的长度;单位:字节。
<arguments> 字符串类型。 执行操作中的<arguments>

设备响应:

//指令示例
AT+MIPLEXECUTERSP=0,17812,2\r\n
//指令解析
AT+MIPLEXECUTERSP=<ref>,<msgId>,<result>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 消息 ID; 出自 URC +MIPLEXECUTE。
<result> 整型。 执行结果,以下为结果码:
结果码 CoAP响应码 描述
2     2.04       Changed,表示正确结果
11    4.00       无效请求
12    4.01       未授权
13    4.04       未找到
14    4.05       方式不允许

4. 断开连接

4.1 删除对象、注销连接
//发送完成后从ONENET平台删除对象注销连接
AT+MIPLDELOBJ=0,3311 				//删除 LwM2M 对象。
OK
AT+MIPLCLOSE=0 						//向 OneNET 平台发送注销请求。
OK
+MIPLEVENT: 0,15 					//成功注销。
AT+MIPLDELETE=0
OK 									//成功删除通信套件实例。

三、注意事项

  • 在执行AT+MIPLOPEN=0,86400向平台发送订阅请求后,平台返回的+MIPLOBSERVE: 0,***,1,3200,0,-1接收订阅请求,要5s内响应,否则可能不会收到+MIPLDISCOVER: 0,***,3200,也就无法收到发现资源请求,造成连接失败。
  • 收到+MIPLDISCOVER: 0,***,3200指令,同样需要5s内响应。
  • 在程序调试过程中发现,执行AT+MIPLOPEN=0,86400后,存在长时间无法注册成功的现象,此时直接重发指令是会报错的,但是好像不影响设备继续连接,只需继续判断返回是否成功就行。
  • 经过测试,不删除对象注销连接,模块断电重启后间隔一段时间,也基本上都能再次连接,但是直接重新发送创建通信实例AT+MIPLCREATE,会失败。
  • 最稳定的方式就是每次通信完成后,都执行从平台删除对象,注销连接的指令。

总结

修改ONENET平台的AT指令流程,要比AEP复杂很多,连接成功后,要在一定时间内,及时回复,否则就连接不上,上报信息也复杂一点,尤其是丢包问题。
AT指令部分暂时就这些了。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐