前言
最近(2017年8月)NB IoT的实际应用越来越多,网络和微信公众号中出现了不少NB IoT的文章。NB IoT的介绍资料越来越多,NBIoT的模块也层出不穷。华为主推的Hi2110或许是2017年使用最为广泛的NB IoT模块,这款模块支持UDP通信和CoAP通信。UDP部分的描述非常清晰,该部分与常见的2G模块/3G使用较为相似,但是CoAP相关的AT指令很难体现CoAP特性,例如AT指令未指定CoAP请求方法、CoAP请求路由等等,CoAP的使用需要与华为CDP服务器配合,这让不少用户忽略了CoAP的细节而仅仅认为CoAP是个透传的通道。华为把这套CoAP通信机制成为TUP。TUP与LWM2M相似,借鉴了LWM2M注册、数据上报等过程,但是TUP并不能与LWM2M等价。
AT指令
在NB IOT的AT指令文档中,大概可以分为终端向CDP发送数据,终端通过串口发送接收指示,终端读取CDP服务器发送而来的内容。更简单的说,终端支持上行发送和下行接收两种功能。
发送数据
发送数据使用NMGS指令,发送数据也成为上行数据。发送是需要指定发送内容长度,发送内容也要格式化为HEX字符串。
# 发送10字节数据
AT+NMGS=10, AA7232088D0320623399
- 1
- 2
下载数据指示
一旦终端收到来自CDP服务器的数据(也成为下行数据),NB终端打印+NNMI,提示已经收到数据。
# NB模块收到来自CDP服务器的数据
+NNMI
- 1
- 2
读取下载数据
NB终端收到数据之后,通过AT+NMGR读取下行数据,NB终端将返回下行数据长度和HEX字符串。
AT+NMGR
# NB模块返回,第一个数字提示数据包长度
2,AABB
- 1
- 2
- 3
AT指令分析和疑惑
- NB终端借助华为CDP服务器可实现上行数据和下行数据。
- 从AT指令来看,无论是上行还是下行似乎都与CoAP无关,没有设置请求方法,例如GET、POST,没有指定URL,例如test,obs等,没有明显的响应码处理。
那么是不是NB IoT和CoAP完全没有关系了,其实不是这样的!
过程说明
NB模块内的CoAP资源
CoAP资源其实是一个逻辑上的概念,也可以称为路由(Nodejs中经常使用这种概念),或者称为Endpoint。NB IoT模块中包含一个CoAP服务器,和HTTP服务器不同在一个内存受限制的设备中实现一个CoAP服务器并不是一件难事。 - NB模块中包含了一个CoAP Server,并实现了CoAP Client(用于向CDP服务器注册)。 - NB模块中包含一个URL为“t/d”的资源(也可称为路由),该资源支持GET方法和POST方法 - NB模块中内的“t/d”支持**观察者模式**,可支持**订阅**
上行过程
上行过程包括注册过程、服务器订阅过程、NB终端向服务器发送指示等过程。
- 注册过程 NB终端向服务器r/d路由进行注册,query参数而ep=
- 华为CDP服务器将订阅NB终端t/d资源,等待NB终端向它发送指示
- NB终端一旦收到+NMGS指令,通过CoAP指令方式向CDP发送数据
- 该过程使用了CoAP的观察者模式
下行过程
下行过程比上行过程简单,华为CDP服务器将使用POST方法向NB终端传递数据
- 华为CDP服务器作为CoAP Client,NB终端作为CoAP Server。
- 华为CDP服务器通过POST方法,把下行数据POST到NB终端t/d资源中
- NB终端收到数据后显示“+NNMI”提示
华为CDP服务器相关接口
华为没有还未发布过CoAP/TUP的相关接口,但是依然可以火狐浏览器中的Copper插件进行分析。
- 通过GET方法访问 coap://117.60.157.137:5683/.well-known/core
LWM2M相关过程介绍
华为的TUP协议与LWM2M存在不少的区别。
LWM2M注册过程
LWM2M 读/写/执行过程
LWM2M信息上报过程
总结与分析
- 个人认为华为IoT平台的灵活性不够。华为有采用一个接口,一个通道,一个平台,一统江湖,捆绑用户的嫌疑。强势有余而开放不足。
- 个人认为华为对于NB的推广立足点不对,总觉得给用户带来一个一统江湖的东西。其实NB可以给物联网工程师带来新的思维,新方法和新技术,最重要的使用新思维去解决物联网问题。例如CoAP/LWM2M可以解决设备联网、物联网服务器开发问题,CBOR(二进制JSON)可解决JSON数据压缩问题等等。
- 华为的IoT平台依然给大家带来的老方法和老思维,其实NB终端有足够的IP联网能力(节点的说它有IP地址),这是和Zigbee终端,Sigfox终端,LoRA终端的明显区别。