树莓派系列教程:物联网之MQTT

来自丢石头百科

MQTT协议简介

MQTT(消息队列遥测传输)是ISO 标准(ISO/IEC PRF 20922)下基于发布/订阅范式的消息协议。它工作在 TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议。

MQTT协议特点

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:

  1. 使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
  2. 对负载内容屏蔽的消息传输;
  3. 使用 TCP/IP 提供网络连接;
  4. 有三种消息发布服务质量:“至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。“至少一次”,确保消息到达,但消息重复可能会发生。“只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。
  5. 小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量;
  6. 使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

MQTT协议原理

MQTT协议有三种身份:代理(Broker)、发布者(Publish)、订阅者(Subscribe)。

代理:MQTT的服务器,有了服务器,才能在服务器上发布和订阅内容。

发布者:在服务器上发布信息的设备。

订阅者:订阅服务器信息的设备。

以某视频平台作为例子,某视频平台的服务器称为代理(Broker),在上面发布视频的人称为发布者,订阅视频的人称为订阅者。

树莓派的安装

这里选用知名的MQTT开源应用mosquitto作为例子,将树莓派变成MQTT协议的代理设备(则MQTT服务器)和客户端。

  • 将树莓派连接网络。
  • 打开终端,运行以下命令:
 sudo apt update
 sudo apt install mosquitto,mosquitto_client
 根据提示输入“y”确认安装
 systemctl restart mosquitto

此时MQTT服务器已开始运作。

其中,sudo apt install mosquitto 安装的是代理设备(服务器);

sudo apt install mosquitto_client 安装的是客户端(发布者、订阅者)。

发布消息

打开树莓派的终端,输入以下命令:

 mosquitto_pub -t "my/channel" -m "a message"

其中,"-t"为发布到什么频道,"my/channel"为频道的名称,频道名称一般以斜杠隔开。 "-m"为要发送什么消息,消息的正文"a message"。

订阅消息

打开新的树莓派终端,输入以下命令:

 mosquitto_sub -t "my/channel"

即可订阅"my/channel"频道的消息。 此时另外的终端再次输入命令:

 mosquitto_pub -t "my/channel" -m "a message"

订阅终端即可收到消息。

以上示例是仅有一台树莓派的示例,实际上服务器、订阅设备、发布设备可以是多个不同的设备。

系列教程

树莓派系列教程