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

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

开发者学堂课程【嵌入式之 RFID 开发与应用2020版:NB-IoT 通信之 MQTT 发布订阅 】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:/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一站式入门使用
从源码编译、部署broker、部署namesrv,使用java客户端首发消息等一站式入门RocketMQ。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
相关文章
|
1天前
|
消息中间件 Java 中间件
详解rocketMq通信模块&升级构想(上)
详解rocketMq通信模块&升级构想(上)
166 0
|
1天前
|
消息中间件 Java 应用服务中间件
详解rocketMq通信模块&升级构想(下)
详解rocketMq通信模块&升级构想(下)
399 0
详解rocketMq通信模块&升级构想(下)
|
8月前
|
存储 网络协议 物联网
Android集成MQTT教程:实现高效通信和实时消息传输
Android集成MQTT教程:实现高效通信和实时消息传输
791 0
|
9月前
|
物联网 Java Linux
Linux安装与配置Eclipse Paho库:实现MQTT通信
Eclipse Paho是一个开源的MQTT(Message Queuing Telemetry Transport)实现,提供了多种编程语言的客户端库,包括C、C++、Java、Python等。在Linux系统中,通过安装和配置Eclipse Paho库,我们可以方便地实现MQTT通信功能。本文将详细介绍在Linux系统中安装和配置Eclipse Paho库的步骤,以便于开发者在物联网项目中使用MQTT协议进行通信。
729 0
|
6月前
|
存储 传感器 物联网
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
326 0
如何在Docker中配置Mosquitto MQTT代理,以便在容器化环境中运行和管理MQTT通信
|
9月前
|
传感器 网络协议 物联网
Linux MQTT通信:实现轻量级物联网传输协议
MQTT(Message Queuing Telemetry Transport)是一种轻量级的物联网传输协议,专门设计用于低带宽、不稳定网络环境下的传感器和物联网设备通信。本文将深入探讨Linux环境下如何实现MQTT通信,介绍MQTT协议的基本原理、常用MQTT库以及如何在Linux系统中编写MQTT客户端和服务器端程序。
469 0
|
1天前
|
传感器 物联网 5G
物联网的通信技术以及Wi-Fi、一键配网技术、BLE、GPRS(2G)、LTE-Cat1 、NB-IoT简介
物联网的一个重要的特点是接入了网络,因此这些设备才能将传感器采集的数据上传到云平台,然后根据平台对数据的分析做出反应。而这种接入网络的技术,就是通信技术,是物联网的基础之一。通信的方式可以分为有线和无线两种方式,因为有线通信的成本较高,无线通信技术在物联网中应用比较广泛。
124 1
|
1天前
|
消息中间件 存储 算法
RocketMQ学习笔记
RocketMQ学习笔记
71 0
|
1天前
|
传感器 网络协议 中间件
Mqtt学习笔记--交叉编译移植(1)
Mqtt学习笔记--交叉编译移植(1)
23 0
|
1天前
|
消息中间件 缓存 API
http://www.vxiaotou.com