Board logo

标题: MQTT 开发入门(1) [打印本页]

作者: look_w    时间: 2018-1-13 19:33     标题: MQTT 开发入门(1)

开始进行 MQTT 开发的最简单工具是 Python mosquitto 模块,该模块包含在  中,提供了多种编程语言格式的                MQTT SDK 和库。它包含一个能在本地计算机上运行的 MQTT 代理,还包含使用消息与代理交互的命令行工具。可以从  下载并安装 mosquitto 模块。
mosquitto 命令在本地计算机上运行 MQTT 代理。也可以使用 -d 选项在后台运行它。
$ mosquitto -d
接下来,在另一个终端窗口中,可以使用 mosquitto_sub                命令连接到本地代理并订阅一个主题。运行该命令后,它将等待从订阅的主题接收消息,并打印出所有消息。
$ mosquitto_sub -t "dw/demo"
在另一个终端窗口中,可以使用 mosquitto_pub 命令连接到本地代理,然后向一个主题发布一条消息。
$ mosquitto_pub -t "dw/demo" -m "hello world!"
现在,运行 mosquitto_sub 的终端会在屏幕上打印出 “hello world!”。您刚才使用 MQTT 代理发送并接收了一条消息!
当然,在生产系统中,不能使用本地计算机作为代理。相反,可以使用 IBM Bluemix Internet of Things Platform                服务,这是一种可靠的按需服务,功能与 MQTT 代理类似。要进一步了解这个 Bluemix 服务如何集成并使用 MQTT                作为与设备和应用程序通信的协议,请参阅 。)
的工作原理如下。
图 2. 在 IBM Bluemix 中创建 Internet of Things Platform                    服务
使用远程 MQTT 代理时,需要将代理的主机名和身份验证凭证传递给 mosquitto_sub 和 mosquitto_pub                命令。例如,下面的命令使用了 Bluemix 提供的用户名和密码,订阅我们的 Internet of Things Platform 服务上的                demo 主题:
$ mosquitto_sub -t "demo" -h host.iotp.mqtt.bluemix.com -u username -P password
有关使用 mosquitto 工具的更多选择,以及如何使用 mosquitto API 创建自己的 MQTT 客户端应用程序,请参阅  上的文档。
有了必要的工具后,让我们来更深入地研究 MQTT 协议。
了解 MQTT                协议MQTT 是一种连接协议,它指定了如何组织数据字节并通过 TCP/IP                网络传输它们。但实际上,开发人员并不需要了解这个连接协议。我们只需要知道,每条消息有一个命令和数据有效负载。该命令定义消息类型(例如 CONNECT                消息或 SUBSCRIBE 消息)。所有 MQTT 库和工具都提供了直接处理这些消息的简单方法,并能自动填充一些必需的字段,比如消息和客户端                ID。
首先,客户端发送一条 CONNECT 消息来连接代理。CONNECT 消息要求建立从客户端到代理的连接。CONNECT 消息包含以下内容参数。
表 1. CONNECT 消息参数参数说明 cleanSession  此标志指定连接是否是持久性的。持久会话会将所有订阅和可能丢失的消息(具体取决于 QoS) 都存储在代理中。(请参阅                                表 3 获取 QoS 的描述。) username  代理的身份验证和授权凭证。 password  代理的身份验证和授权凭证。 lastWillTopic  连接意外中断时,代理会自动向某个主题发送一条 “last will” 消息。  lastWillQos  “last will” 消息的 QoS。(请参阅 表 3 来查看 QoS                            的描述。)  lastWillMessage  “last will” 消息本身。  keepAlive  这是客户端通过 ping 代理来保持连接有效所需的时间间隔。 客户端收到来自代理的一条 CONNACK 消息。CONNACK 消息包含以下内容参数。
表 2. CONNACK 消息参数参数说明 sessionPresent  此参数表明连接是否已有一个持久会话。也就是说,连接已订阅了主题,而且会接收丢失的消息。  returnCode  0 表示成功。其他值指出了失败的原因。 建立连接后,客户端然后会向代理发送一条或多条 SUBSCRIBE                消息,表明它会从代理接收针对某些主题的消息。消息可以包含一个或多个重复的参数。如表 3。
表 3. SUBSCRIBE 消息参数参数说明 qos  qos(服务质量或 QoS)标志表明此主题范围内的消息传送到客户端所需的一致程度。
topic  要订阅的主题。一个主题可以有多个级别,级别之间用斜杠字符分隔。例如,“dw/demo” 和                            “ibm/bluemix/mqtt” 是有效的主题。 客户端成功订阅某个主题后,代理会返回一条 SUBACK 消息,其中包含一个或多个 returnCode 参数。
表 4. SUBACK 消息参数参数说明 returnCode  SUBCRIBE 命令中的每个主题都有一个返回代码。返回值如下所示。
与 SUBSCRIBE 消息对应,客户端也可以通过 UNSUBSCRIBE 消息取消订阅一个或多个主题。
表 5. UNSUBSCRIBE 消息参数参数说明 topic  此参数可重复用于多个主题。 客户端可向代理发送 PUBLISH 消息。该消息包含一个主题和数据有效负载。代理然后将消息转发给所有订阅该主题的客户端。
表 6. PUBLISH 消息参数参数说明 topicName  发布的消息的相关主题。  qos  消息传递的服务质量水平。(请参阅 表 3 来查看 QoS                            的描述。) retainFlag  此标志表明代理是否保留该消息作为针对此主题的最后一条已知消息。  payload  消息中的实际数据。它可以是文本字符串或二进制大对象数据。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0