==使用CoAP协议通信==
CoAP是一种类似HTTP的极其轻量级的应用层协议,HTTP基于TCP协议,而CoAP基于UDP协议,最小数据包仅有4个字节。非常适合低功耗物联网设备的使用。标准CoAP是一种类似HTTP的极其轻量级的应用层协议,HTTP基于TCP协议,而CoAP基于UDP协议,最小数据包仅有4个字节。非常适合低功耗物联网设备的使用。
BC28模块中集成了CoAP服务端和客户端,封装了内部接口,提供简洁的数据收发指令给用户使用。因此使用CoAP协议通信比UDP更简单。BC28模块内的CoAP协议并非指标准CoAP,而是按照LwM2M标准进行了一层封装。简单的说,BC28内部的CoAP协议是LwM2M标准协议的简化版本。为了简化描述,统称为CoAP。
CoAP通信的使用流程: 模块附着网络>>设置CDP服务器地址和端口>>发送数据>>接收数据。
使用CoAP通信前,也建议测试测试远程IP地址是否可用。为了方便测试,我们在云平台上启用了一个CoAP测试服务器,无论模块发送什么数据,测试服务器在收到的数据前加上iotxx前缀字符串,然后延时3s后返回给客户端。注意,使用电信卡的用户很可能无法与我们的服务器通信。因为电信NB网络有定向访问的限制。{| class="wikitable"!接口!功能|-|CoAP测试服务器:115.29.240.46,端口号:5683|5683端口时刻监听客户端数据,并且在收到的数据前加上iotxx前缀字符串,然后延时3s后返回给客户端。|}也可以使用我们的云透传平台创建电信平台设备,可在线测试。详情请参考《谷雨云透传平台接入指南<ref group="手册">[[谷雨云透传平台接入指南]],谷雨云透传接入指南</ref>》。{| class="wikitable"!接口!功能|-|电信平台:117.60.157.137,端口号:5683|电信商用物联网平台,需要先在谷雨云透传上创建电信平台设备,方可在线调试或透传。|}{{Note|text=1、NB模块中使用的CoAP协议是在标准CoAP基础上又封装一层,过程较复杂,因此大家很难自己创建CoAP服务器来测试,如果要自建CoAP协议服务器,请参考电信的模块对接手册。2、CoAP协议的通信需要对接电信/华为平台后进行,其他情况下很难正常测试。|type=info}}
===配置CDP服务器===
配置远程CoAP服务器的IP地址和端口,类似UDP的IP和端口。 发送指令:<syntaxhighlight lang="bash">#设置CoAP测试服务器地址
AT+NCDP=115.29.240.46,5683
</syntaxhighlight>模块返回:<syntaxhighlight lang="bash">#模块返回
OK
</syntaxhighlight>设置指令格式:AT+NCDP= <ip_addr>[,<port>]
{| class="wikitable"
|+
!参数
!说明
===配置新消息通知===
开启发送消息通知,配置后,若消息已发送,串口会返回异步命令开启发送消息通知,配置后若消息已发送,串口会返回异步命令+NSMI:SENT的提示。 发送指令:<syntaxhighlight lang="bash">#发送指令
AT+NSMI=1
</syntaxhighlight>模块返回:<syntaxhighlight lang="bash">#模块返回
OK
</syntaxhighlight>开启接收消息通知,配置后,若接收到服务器的数据下发,模块会主动向串口发送异步命令。 发送指令:<syntaxhighlight lang="bash">#发送指令
AT+NNMI=1
</syntaxhighlight>模块返回:<syntaxhighlight lang="bash">#模块返回
OK
</syntaxhighlight>指令格式:AT+NSMI/NNMI=<status>
{| class="wikitable"
!参数
===CoAP发送和接收数据===
注意,本节内容仅解释演示CoAP协议收发指令。因为涉及服务器联调问题,所以本节内容大家可能无法正常测试。 发送字符串"123" 发送指令:向CoAP测试服务器发送消息,消息内容为字符串123,对应长度为3,对应HEX格式字符串为313233<syntaxhighlight lang="bash">#向CoAP测试服务器发送消息
AT+NMGS=3,313233
</syntaxhighlight>模块随即返回:<syntaxhighlight lang="bash">#模块返回
OK
</syntaxhighlight>若数据已成功发送,并且服务器已收到,串口会打印:<syntaxhighlight lang="bash">#若数据发送成功,返回
+NSMI:SENT
</syntaxhighlight>如果失败,会打印失败错误码。#若数据发送失败,携带错误码返回
指令格式:AT+NMGS=<length>,<nowiki><data></nowiki>
</syntaxhighlight>指令格式:AT+NMGS=<length>,<nowiki><data></nowiki>
{| class="wikitable"
!参数
|}
当CoAP服务器有数据下发时,模块串口会打印:接收数据:等待约3秒,测试服务器返回数据:<syntaxhighlight lang="bash">
+NNMI:9,696F7478783A313233
</syntaxhighlight>指令格式为:+NNMI:<length>,<nowiki><data>,参数解释,请参考指令AT+NMGS</nowiki> {| class="wikitable"!参数!说明|-|<length>|已接收数据的数据长度|-|<nowiki><data></nowiki>|已接收到的数据内容,data是以16进制形式,例如字符串:123,则data为:313233,对应长度为:3|}
==本文参考==