锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

BC26通过LWM2M协议连接ONENET,AT流程,STM32代码

时间:2023-05-25 20:37:00 头2m线长传感器

onenet平台操作

登录onenet然后,进入控制台
在这里插入图片描述
选择NB-IoT物联网
套件
新建产品

根据自己的情况填写产品名称和类别,协议选择LWM2M

新建产品成功

点击产品名称,输入产品详细信息

将设备添加到产品中

填写设备信息

打开自动发现资源

Object、Instance、Resource

??onenet采用了《IPSO-Smart-Objects-1.0.pdf》中规定的Object、Instance、Resource为了定义控制对象,有必要先澄清它们的概念。

??例如,室内温度传感器、湿度传感器、灯具和空调Object;如果只有一盏灯需要连接,那么Instance1.如果有两盏灯要连接,那么Instance就是2;灯具有开/关、亮度、颜色等属性。Resource。
??打开手册《IPSO-Smart-Objects-1.0.pdf》看,确实是这样,比如Object有:

??基本上,每个物联网设备都有手册中的定义和对应Object ID。拿灯来说,他的Object ID=3311,他的Resource有:

??Resource有开关状态、亮度、颜色等。Resource都有Resource ID、是否可读写,取值范围等。
??最后给个图:

模组端操作

1、查询模组IP确定模块网络的地址没有问题

发送指令

AT CGPADDR=1 

接收模块IP如果没有模块,地址说明正常IP,需要查卡和网络问题。

 CGPADDR: 1,100.97.92.190  OK 

2、创建Instance(实例)

??如果我们想接入多个灯,我们应该为每个灯创建它Instance,每一盏灯和它的Instance ID一一对应。这是为接入设备创建的。Instance,并获得它Instance ID。
??发送指令

AT MIPLCREATE 

??接收模块响应

 MIPLCREATE: 0  OK 

??响应解释如下:

 MIPLCREATE: <ref>  <ref> 整型。 OneNET 通信套件的例子ID; 范围: 0-65535

3、添加Object(对象)

指令为:

AT MIPLADDOBJ=<ref>,<objId>,<insCount>,<insBitmap>,<attrCount>,<actCount>  <ref> 整型。 OneNET通信套件的例子ID; 范围:0-65535<objId> 整型。 LwM2M对象ID。若对象ID如果不存在,则返回错误。 <insCount> 整型。 实例个数。 <insBitmap> 带双引号的字符串类型。 实例位图。 例如,若 <insCount> 值为4<insBitmap>="1101",则表示实例ID 023 以实例注册ID 1 不注册。 <attrCount> 整型。 属性个数,表示可读和/或可写资源的个数。
<actCount> 整型。 动作个数,表示可执行的资源个数。

  这里就以前面的灯为例,Object ID=3311。创建2个Instance,但是只注册Instance ID=0的Instance。因此发送指令

AT+MIPLADDOBJ=0,3311,2,"01",4,2

  接收到模组响应

OK

4、向OneNET发送注册请求

  指令为:

AT+MIPLOPEN=<ref>,<lifetime>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<lifetime> 整型。用于设置设备的使用期限, 实际使用期限为<lifetime>×0.9。 单位:秒。
0 360015-268435455

  发送指令为:

AT+MIPLOPEN=0,86400

  接收到模组响应

OK

+MIPLEVENT: 0,1

+MIPLEVENT: 0,2

+MIPLEVENT: 0,4

+MIPLEVENT: 0,6

+MIPLOBSERVE: 0,119350,1,3311,0,-1

  响应解释为:

+MIPLEVENT: <ref>,<evtid>[,<extend>[,<ackid>]]

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<evtid> 整型。 事件标识符:
1 EVENT_BOOTSTRAP_START
2 EVENT_BOOTSTRAP_SUCCESS
3 EVENT_BOOTSTRAP_FAILED
4 EVENT_CONNECT_SUCCESS
5 EVENT_CONNECT_FAILED
6 EVENT_REG_SUCCESS
+MIPLOBSERVE: <ref>,<msgId>,<flag>,<objId>,<insId>,<resId>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 数据包消息 ID。
<flag> 整型。 表示是否订阅
0 取消订阅
1 订阅
<objId> 整型。 从 OneNET 或者应用服务器处接收到的 LwM2M 对象 ID。
<insId> 整型。 从 OneNET 或者应用服务器处接收到的实例 ID。 -1 表示订阅或者取消订阅指定 LwM2M 对象下所有实例下的所有资源。
<resId> 整型。 从 OneNET 或者应用服务器处接收到的资源 ID。 -1 表示订阅或者取消订阅指定实例下的所有资源。

  因此解释为:

+MIPLEVENT: 0,1 //开始连接到 Bootstrap 服务器。
+MIPLEVENT: 0,2 //成功连接到 Bootstrap 服务器。
+MIPLEVENT: 0,4 //成功连接到 OneNET 平台。
+MIPLEVENT: 0,6 //成功注册到 OneNET 平台。此时,刷新OneNET可看到设备显示绿色在线状态。
+MIPLOBSERVE: 0,119350,1,3311,0,-1 //接收到订阅请求(3311/0)。

  接收到了+MIPLEVENT: 0,6 就表示成功注册到 OneNET 平台。此时,刷新OneNET可看到设备显示绿色在线状态。

5、响应订阅请求

  在收到+MIPLOBSERVE: 0,119350,1,3311,0,-1后,10秒内必须响应订阅请求,否则平台会断开。
  指令为:

AT+MIPLOBSERVERSP=<ref>,<msgId>,<result>

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

  因此发送指令为:

AT+MIPLOBSERVERSP=0,119350,1

  接收到模组响应

OK

+MIPLDISCOVER: 0,53815,3311

  响应解释为:

+MIPLDISCOVER: <ref>,<msgId>,<objId>   //通知模组响应发现资源请求

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 数据包消息 ID。
<objId> 整型。从 OneNET 平台接收到的 LwM2M 对象 ID。

6、响应发现资源请求

  在收到+MIPLDISCOVER: 0,53815,3311后,10秒内必须响应发现资源请求,否则平台会断开。
  指令为:

AT+MIPLDISCOVERRSP=<ref>,<msgId>,<result>,<length>,<valuestring>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 消息ID;出自 URC +MIPLDISCOVER。
<result> 整型。 发现资源操作结果,以下为结果码:
结果码 CoAP响应码 描述
1     2.05      内容,表示正确结果
11    4.00      无效请求
12    4.01      未授权
13    4.04      未找到
14    4.05      方式不允许
15    4.06      未接受
<length> 整型。 参数<valuestring>的长度。单位: 字节。
<valuestring> 带双引号的字符串类型。 包含对象的属性,每个属性之间用分号隔开,例如:"1101;1102;1103",属性个数不应超过AT+MIPLADDOBJ 命令的<attrCount><actCount>参数值总和。

  因此发送指令为:

AT+MIPLDISCOVERRSP=0,53815,1,19,"5850;5851;5706;5805"

  接收到模组响应

OK


7、读取操作

  现在已经连接到onenet,并且已经上报了对象的资源,接下来测试一下平台的读取操作。读取操作是由平台发起的,在平台上发起操作后,模组联网后就会收到请求,然后会主动上报URC,与模组连接的单片机收到模组吐出的URC后,再使用AT指令,把数据发送给模组,模组再把数据发送给平台。
  接收到平台下发读取操作,模组上报的URC为:

+MIPLREAD: <ref>,<msgId>,<objId>,<insId>,<resId>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 数据包消息 ID。
<objId> 整型。 从 OneNET 或者应用服务器处接收到的 LwM2M 对象 ID。
<insId> 整型。 从 OneNET 或者应用服务器处接收到的实例 ID。 -1 表示读取指定 LwM2M对象下的所有资源。
<resId> 整型。 从 OneNET 或者应用服务器处接收到的资源 ID, -1 表示读取指定实例下的所有资源。

  单片机发数据给模组的指令为:

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

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 消息 ID; 出自 URC +MIPLREAD。
<result> 整型。 读取结果,以下为结果码:
结果码 CoAP响应码 描述
1     2.05      内容,表示正确结果
11    4.00      无效请求
12    4.01      未授权
13    4.04      未找到
14    4.05      方式不允许
15    4.06      未接受
<objId> 整型。 LwM2M 对象 ID; 出自 URC +MIPLREAD。
<insId> 整型。 实例 ID,出自 URC +MIPLREAD。
<resId> 整型。 资源 ID; 出自 URC +MIPLREAD。
<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 时,该参数值为带双引号的字符串类型格式,最大 1024 字节。
    当<valueType>=2 时,该参数值为十六进制字符串格式,最大 512 字节。
    当<valueType>=3 时,该参数值为整型格式。
    当<valueType>=4 时,该参数值为浮点型格式。
    当<valueType>=5 时,该参数值为布尔型格式。
<index> 整型。 消息序号。若读取请求响应包含多条消息,则需发送多次 AT 命令以完成响应。例如, 若读取请求响应包含 N 条消息,则参数<index>需从 N-10 依次递减, AT 命令按照<index>取值从大到小的顺序执行。 <index>=0 表示数据中最后一条消息。
<flag> 整型。 消息指示; 范围: 0-20 表示<value>中最后一条消息
    1 表示<value>中第一条消息
    2 表示<value>中中间的消息
    当前版本仅支持<flag>=0

  首先在平台上发起,读Resource ID=5851资源的请求:

  如果模组没有处于PSM,而是处于联网状态的话,就会收到平台下发的请求,然后上报URC:

+MIPLREAD: 0,6902,3311,0,5851

  这个时候根据前面的指令格式,发送数据:(要在10s内回复)

AT+MIPLREADRSP=0,6902,1,3311,0,5851,3,2,75,0,0

  就可以看到已经把数据发送到平台上了:

  如果点击读资源后,看到平台一直在等待,最后超时,而且模组也没有上报URC,就说明模组当前处于跟基站断开的状态。

  可以发送一下更新请求,这样模组就会恢复与基站的连接,同时就能收到平台下发的请求了。指令为:

AT+MIPLUPDATE=<ref>,<lifetime>,<withObjectFlag>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<lifetime> 整型。 更新后的设备使用期限值(实际使用期限为<lifetime>×0.9)。 单位:秒。
0 360015-268435455
<withObjectFlag> 整型。 是否更新对象列表。
0 不更新
1 更新

  因此发送指令为:

AT+MIPLUPDATE=0,86400,1

  指令响应为:

OK

+MIPLEVENT: 0,11

  发送之后,再在平台上点击读资源,模组就能立马上报URC了。

7、写入操作

  模组收到平台的写操作,上报的URC为:

+MIPLWRITE: <ref>,<msgId>,<objId>,<insId>,<resId>,<valueType>,<len>,<value>,<flag>,<index>

<ref> 整型。 OneNET 通信套件的实例 ID;范围: 0-65535<msgId> 整型。 数据包消息 ID。
<objId> 整型。 从 OneNET 或者应用服务器处接收到的 LwM2M 对象 ID。
<insId> 整型。 从 OneNET 或者应用服务器处接收到的实例 ID。
<resId> 整型。 从 OneNET 或者应用服务器处接收到的资源 ID。
<valueType> 整型。 <value>值的类型(当前仅显示十六进制类型。
    1 字符串类型
    2 十六进制类型
    3 整型
    4 浮点型
    5 布尔型(Boolean)
<len> 整型。 <value>值的长度;单位: 字节。
<value> 字符串类型。数据。从 OneNET 或者应用服务器处接收到的数据,仅在 Direct push模式下有效。
<flag> 整型。 消息指示;范围: 0-20 表示<value>中最后一条消息
    1 表示<value>中第一条消息
    2 表示<value>中中间的消息
    该版本仅支持<flag>=0<index> 整型。 写入请求的索引号。若写入请求包含多条消息,则 URC 会被分成多个部分进行上报。例如, 若写入请求包含 N 条消息,则参数<index>需从 N-10 依次递减, URC 按照<index>取值从大到小的顺序进行上报。 <index>=0 表示这是写入请求中最后一条消息。 

  模组响应写入操作的指令为:

AT+MIPLWRITERSP=<ref>,<msgId>,<result>

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

  首先在平台上发起,写Resource ID=5706资源的请求,写入内容为“hello”:

  模组收到平台操作后,上报URC:

+MIPLWRITE: 0,33178,3311,0,5706,2,5,68656C6C6F,0,0

  这个时候根据前面的指令格式,响应平台:(要在10s内回复,否则平台会超时)

AT+MIPLWRITERSP=0,33178,2

  平台收到回复后,会提示操作成功。
  从模组上报的URC,我们可以得到平台下发了5个字符“68656C6C6F”,是十六进制格式的,内容刚好是“hello”。
  当然也可以以字符串的形式上报,操作如下:

AT+MIPLCONFIG=1,1                                 //设置 Buffer Access 模式,接收文本字符串类型数据

OK
AT+MIPLUPDATE=0,86400,1

OK

+MIPLEVENT: 0,11

+MIPLWRITE: 0,4012,3311,0,5706,2,5,0,0          //仅显示所接收数据的长度,然后发送 AT+MIPLRD 命令读取数据。
AT+MIPLWRITERSP=0,4012,2

OK
AT+MIPLRD=5                                    //从缓存中读取数据

+MIPLRD: 5,0                             //已读取数据长度为 5 字节, 未读取数据长度为 0 字节
hello                                            //所读取的文本字符串类型数据

OK

8、执行操作

  模组收到平台的执行操作,上报的URC为:

+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=<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       方式不允许

  操作过程如上:

//UE 已成功注册到 OneNET 平台。
//应用服务器已经向 UE 发送执行请求,其中包含 Argument: reset。
+MIPLEXECUTE: 0,36476,3303,0,5605,5,"reset" //接收到执行请求。
AT+MIPLEXECUTERSP=0,36476,2 //响应执行请求, 其结果码为 2。
OK

9、模组主动上报数据操作

  指令格式为:

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-10 依次递减, AT 命令按照<index>取值从大到小的顺序执行。 <index>=0 表示数据中最后一条消息。
<flag> 整型。 指示消息,范围: 0-20 表示<value>中最后一条消息
    1 表示<value>中第一条消息
    2 表示<value>中中间消息
    该版本仅支持<flag>=0<ackid> 整型。范围: 0-655350 上报的数据为不需要确认的消息
    1-65535 上报的数据为需要确认的消息

相关文章