一、MQTT介绍
MQTT是一种能实现一对多通信(人们称之为发布或订阅型)的协议。它由3种身份构成,分别是中介代理(broker)、发布者(publisher)和订阅者(subscriber)。消息的发布者和订阅者是客户端,中介代理是服务器,消息的发布者同时可以是订阅者。
发布者是负责发送消息的客户端,而订阅者是负责接收消息的客户端。MQTT交换的消息都附带"主题"地址。使用"邮箱"形象地比喻一下,订阅"主题"相当于参加了这次会议,会议内容都会发送到你的邮箱,中介相当于邮箱的总服务器。
我们详细看一下MQTT通信的机制。首先,中介在等待各个客户端对其进行连接。订阅者连接中介,把自己想订阅的主题告诉中介,这就叫作订阅——以后相关会议都要抄送订阅者;然后发布者连接中介,以主题为收信地址发送消息,这就是发布——谁参加了会议就发给谁。
主题采用的是分层结构。用“#”和“+”这样的符号能指定多个主题。 如下图所示 /Sensor/temperature/# 中使用了“#”符号,这样就能指定所有开头为/Sensor/temperature/ 的主题。/Sensor/+/room1中使用了符号“+”,这样就能指定所有开头是 /Sensor/、结尾是 /room1的主题。
二、MQTT通信测试
测试工具:MQTTfx-jfx.jar。可免费使用的MQTT的服务器有很多,这里使用test.mosquitto.org作为中介,MQTTfx-jfx.jar作为客户端。
如果用户有2个或者多个NT35(CAT1模组),也可以不使用MQTTfx-jfx.jar作为客户端,模组之间相互作为发布者、订阅者。
上面测试工具、NT35分别作为客户端,连接了test.mosquitto.org的服务器。这里注意每个客户端需要独立的Client ID,如果重复则连接断开。服务器连接完成后,先订阅消息,然后其他客户端发布消息,已经订阅消息的客户端可以收到数据了。
借助于中介的发布/订阅型通信,MQTT就能实现物联网服务与多台设备之间的通信。另外,MQTT 还实现了轻量型协议。因此它还能在网络带宽低、可靠性低的环境下运行;又因为消息小、协议机制简单,所以在硬件资源(设备、CPU和内存等)受限的条件下也能运行,可以说是为物联网量身定做的协议。
参考文档:
《图解物联网》河村雅人,大冢紘史,小山武士等 2017
《Lierda NT90&NT35 MQTT ApplicationNote》
《Lierda NT90&NT35_Module_AT CommandSet》