开发者学堂课程【嵌入式之 RFID 开发与应用2020版:NB-IoT 通信之 MQTT 发布订阅 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/665/detail/11195
NB-IoT 通信之 MQTT 发布订阅
内容介绍:
一、 MQTT 发布
二、通信功能演示
三、小结
一、MQTT 发布
最重要的是 MQTT 通信, 没有写到 PPT 里面,因为数据手册已经讲得够详细了,打开它的数据手册。 MQTT 的通信,相比 UDP、TCP 而言那就更复杂了,而且 MQTT 的通信已经是做的还算是比较完善的,MP 模块它已经可以支持非匿名登录了。
演示匿名登陆:
1. 连接配置:需要通过 MQTT 去配置连接的主机、端口、包括 ID、饱和时间、用户名密码等之类的。还有选择是否清除筛选。那么这些参数一般情况并不是每个参数都要设置,因为有的参数它有默认值,可以设一些你认为重要的核心的就可以,不需要每个都进行设置。
设好了之后,并不代表就跟服务器连上了。服务器上有专门的接口叫做 mqtt open,表示连接服务器的。只有掉了这个 Mptd open 的话,服务器才会显示出有客户端连接。这里面涉及到一些参数,这些参数的话不会去讲那么细,因为我们的重点是把它跑起来。数据手册里面有解释,更详细的还是要看数据手册,包括状态的查询。
2. 发布和订阅:比如说要去订阅一个消息,如果有多个 ndlt 的这样的终端设备,它们两个终端设备之间是通过搭建的 MQTT 服务器去完成通信。除了订阅以外,还可以发布主题、消息质量、消息是否存储、是否重发等。
3. 可能涉及到取消订阅、断开:断开是跟 open 是对应起来的,open 是连接,disconnect 就是断开。除了断开以外,delate 是释放资源。其他的超时,包括 pin 心跳包,作为一个了解,就不详细去演示了。
二、通信功能演示
1.输入 AT+ MQTTCFG= 已知的 IP 地址。
这里的参数比较多,建议大家加上双引号。即为主机。接着输入端口、客户端 ID。ID 会自动分配就打双引号,意思就是保留,虽然不用填,但这个位置得留下来。接下来就是这个饱和时间,随便填一个,比如说 60 秒、70 秒都可以。然后是用户名密码,还有是否删除 session,session 是在过去的 HTTP 通信中一种客户端的服务器的确认的标签;现在都换成了 topic,那可以选删除,不要让前面的影响到后面。用户名、密码也不填,所以说用户名没有;密码没有;session 删除。这就是我们的 m qt t 的配置,就自己的配置,此时跟服务器还没有关系,是完成了自己的配置。
2.连接服务器
MQTT open=?涉及的参数就比较多了,首先表示一个客户端不需要用户名及密码,因此全部填为 0。接下来的参数是所谓的遗嘱,就是遇到问题之后,要不要发遗嘱,发不发都可以。写上不发则为 0;但是包括后面还有出现意外之后要不要发这个遗嘱,消息上面是断开,下面是出现意外,所以再输入一个 0。接下来就是消息级别,消息级别就是分为 012:至少一次只有一次,用 1 表示无论如何都要发一次出去。接下来就是主题和消息体。这个主题和消息是指的是遗嘱,这个遗嘱建议大家把它写上,就是出现问题的时候的遗言。比如遗嘱的主题叫 my will,那么遗嘱的内容就是为什么要这个发遗嘱,就是 good bye。
3.成功连接到服务器后,就可以 AT+MQTTSUB 订阅消息。
这个在实际应用当中,一般在 sub 之前都最好执行一次unsub,就是不知道这个主题有没有订阅过,订阅有时候出错,不订阅有时候收不到,不是那么可靠。订阅的主题名叫 hello,后面呢有它的消息质量和 index,index 就是索引,目前只支持你,不用清不清楚了。消息质量的话,为 1 以保证能收到一次;索引的话它只能是0。这就表示订阅了一个东西,先把这些命令都写好,然后统一操作。
4.发布: AT+MQTTPUB= 发布的主题、消息、级别、是否存储等之类的。
这里主题为 hello;消息级别 1,是否保存也填个 1,万一没收到,下次上去还能收到;重发标志按手册上来,即填;类型填 0。紧接着后面就是内容消息,内容就是 ABCD
接下来试一下,服务器这端必须要先配好,比如客户端要无论订阅、发布还是链接,服务器都先跑起来。服务器是讲 MQTT 的时候专门去下载的,而且是移植的最新版的一个 MQTT ,而不用自带的,因为自带的还有支持加密之类的。这个什么都不支持,非常纯洁。但是这里需要注意的是,它需要指定一个配置文件,把配置文件在这个路径找到,在 Etc下的这个 mosquitto 下,然后复制一下。所以要把这个
复制一下,然后点 /mosquitto-c 指定这个配置文件路径,并且一定要指定端口号。这里使用的端口是 8088,不能用默认端口,默认端口是 1883。服务器已经开始监听 8088 端口,就是等待客户端的连接。输入 usr / local / bin 退出 ,因为要进到这里面,它里面有发布订阅的命令。
4.连接服务器、订阅主题。
发布主题内容:/ mosquitt_pub - t hello - h 192.168.1.13 - p 8088- m nihao
一切工作准备就绪,现在开始在客户端进行配置。首先配置自己;配置完了之后,要去连接服务器,连接这个地方会打印连接的信息;点一下 open,显示 ok;再看能不能收到连接。 MQTT 的话,底层的协议是 TCP,它的这个通讯就时间就比较慢,这个 MQTT 肯定也快不了。现在有一个新的客户端连接到了这台IP信息,这个信息跟刚才是一样的。连接 ok 后,接下来要去订阅了。订阅这边也是能看到信息的,订阅 hello 的主题 sub。必须看到服务器收到这个订阅,那再去发布才有意义。
这个地方虽然没有打印,是因为没有加更多调试信息,所以看不到。之前讲 MQTT 的时候就讲过,如果是消息级别为1的话,会回复 back 、subback。告知订阅是成功的。接下来的话呢就要进行发布。检验一下发布的是不是你好。回车,马上来看,因为 TCP 的通讯过程是先建立连接和通信的,连接已经建立了,所以它很快就收到了。所以可以再换一个内容练习一下,发送内容为 hehe。
5.除此以外,也可以发数据,如果要发送数据就要改成订阅。
订阅 sub,此时就不要再跟内容,就仅仅订阅主题 hello。订阅了之后,就用 hub去发送 abcd。改为发送 aaaa,再次进行尝试。又收到了,而且每次都有回复。所以说 MQTT 的这个发送其实还是比较可靠的,后面真正用 NB 模块, MQTT 很重要,MQTT 应用的更广泛一些,后面如果说是要去通信完成一些产品的落地,都不建议大家用 UDP、TCP 。
三、小结
从 UDP、 TCP 、 MQTT 讲了 AT 指令,可以自己验证一下刚才讲的所有操作。所谓的操作PPT上虽然没有,但是官方文档里面非常详细,而且如果要具体去用某种协议的话,应该反复的去调试,因为有些时候实不太可靠,原因是因为对他的这个很多指令还不熟,这可能会导致决定某个时间点就断掉了。