NB-IoT 通信之 MQTT 发布订阅 | 学习笔记

简介: 快速学习 NB-IoT 通信之 MQTT 发布订阅

开发者学堂课程【嵌入式之 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.png

演示匿名登陆:

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.连接服务器

图片2.png

MQTT  open=?涉及的参数就比较多了,首先表示一个客户端不需要用户名及密码,因此全部填为 0。接下来的参数是所谓的遗嘱,就是遇到问题之后,要不要发遗嘱,发不发都可以。写上不发则为 0;但是包括后面还有出现意外之后要不要发这个遗嘱,消息上面是断开,下面是出现意外,所以再输入一个 0。接下来就是消息级别,消息级别就是分为 012:至少一次只有一次,用 1 表示无论如何都要发一次出去。接下来就是主题和消息体。这个主题和消息是指的是遗嘱,这个遗嘱建议大家把它写上,就是出现问题的时候的遗言。比如遗嘱的主题叫 my will,那么遗嘱的内容就是为什么要这个发遗嘱,就是 good bye。

图片3.png

3.成功连接到服务器后,就可以 AT+MQTTSUB 订阅消息。
这个在实际应用当中,一般在 sub 之前都最好执行一次unsub,就是不知道这个主题有没有订阅过,订阅有时候出错,不订阅有时候收不到,不是那么可靠。订阅的主题名叫 hello,后面呢有它的消息质量和 index,index 就是索引,目前只支持你,不用清不清楚了。消息质量的话,为 1 以保证能收到一次;索引的话它只能是0。这就表示订阅了一个东西,先把这些命令都写好,然后统一操作。

4.发布: AT+MQTTPUB= 发布的主题、消息、级别、是否存储等之类的。

图片4.png

这里主题为 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上虽然没有,但是官方文档里面非常详细,而且如果要具体去用某种协议的话,应该反复的去调试,因为有些时候实不太可靠,原因是因为对他的这个很多指令还不熟,这可能会导致决定某个时间点就断掉了。

相关实践学习
消息队列RocketMQ版:基础消息收发功能体验
本实验场景介绍消息队列RocketMQ版的基础消息收发功能,涵盖实例创建、Topic、Group资源创建以及消息收发体验等基础功能模块。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
7月前
|
消息中间件
RabbitMQ消息模型之发布订阅Publish-Subscribe
RabbitMQ消息模型之发布订阅Publish-Subscribe
92 0
RabbitMQ消息模型之发布订阅Publish-Subscribe
|
2月前
|
存储 消息中间件 安全
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
【10月更文挑战第9天】本文介绍了如何利用JUC组件实现Java服务与硬件通过MQTT的同步通信(RRPC)。通过模拟MQTT通信流程,使用`LinkedBlockingQueue`作为消息队列,详细讲解了消息发送、接收及响应的同步处理机制,包括任务超时处理和内存泄漏的预防措施。文中还提供了具体的类设计和方法实现,帮助理解同步通信的内部工作原理。
JUC组件实战:实现RRPC(Java与硬件通过MQTT的同步通信)
|
3月前
|
消息中间件 Kafka 数据安全/隐私保护
RabbitMQ异步通信详解
RabbitMQ异步通信详解
108 16
|
3月前
|
传感器 监控 安全
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
物联网通信的基石:LoRa、Sigfox与NB-IoT详解
399 0
|
4月前
|
物联网 C# Windows
看看如何使用 C# 代码让 MQTT 进行完美通信
看看如何使用 C# 代码让 MQTT 进行完美通信
650 0
|
4月前
|
物联网 网络性能优化 Python
"掌握MQTT协议,开启物联网通信新篇章——揭秘轻量级消息传输背后的力量!"
【8月更文挑战第21天】MQTT是一种轻量级的消息传输协议,以其低功耗、低带宽的特点在物联网和移动应用领域广泛应用。基于发布/订阅模型,MQTT支持三种服务质量级别,非常适合受限网络环境。本文详细阐述了MQTT的工作原理及特点,并提供了使用Python `paho-mqtt`库实现的发布与订阅示例代码,帮助读者快速掌握MQTT的应用技巧。
94 0
|
5月前
|
网络协议 物联网 定位技术
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
毕设(二)——NB-IOT通信模块(nb卡通信测试)+gps定位
|
7月前
|
消息中间件 存储 JSON
服务器的异步通信——RabbitMQ2
服务器的异步通信——RabbitMQ
58 0
|
7月前
|
消息中间件 缓存 中间件
服务器的异步通信——RabbitMQ1
服务器的异步通信——RabbitMQ
64 0