1. 首页
  2. 物联网相关
  3. 「物联网」基于Mosquitto实现MQTT通讯

「物联网」基于Mosquitto实现MQTT通讯

  • 发布于 2024-05-07
  • 91 次阅读

「简介」

Mosquitto 是一个轻量级的开源消息代理,遵守 MQTT(Message Queuing Telemetry Transport)协议。它通常用于 IoT(物联网)设备之间的消息传递。以下是对 Mosquitto 的详细介绍:

特性

- 轻量级:Mosquitto 的设计使其适用于资源有限的设备,能够在小型服务器和单板计算机上运行。

- 支持多种平台:可以在 Linux、Windows 和 macOS 等多个操作系统上运行。

- 多用户:支持多客户端连接,能够处理大量并发会话。

- 支持 QoS 级别:支持 MQTT 的三种服务质量(QoS)级别,允许用户根据需求选择消息传递的可靠性。

- QoS 0:最多一次交付

- QoS 1:至少一次交付

- QoS 2:只有一次交付

- 持久性:支持将消息持久化到磁盘,便于在重启后恢复会话状态。

使用场景

- 物联网应用:广泛用于智能家居、工业自动化、环境监控等领域,设备间可以通过低带宽的网络进行高效的消息传递。

- 移动应用:支持低功耗设备,以降低电池消耗,并实现实时数据传输。

- 节点间通信:在分布式系统中,Mosquitto 可用于不同节点之间的异步通信。

组件

- Broker:Mosquitto 的核心是消息代理(Broker),负责接收、过滤、存储和转发消息。所有的通信都通过 Broker 进行。

- Client:连接到 Broker 的应用或设备,可以是发布者(Publisher)、订阅者(Subscriber)或二者兼具。

安全性

- 认证与授权:支持通过用户名和密码进行用户认证,可对主题进行访问控制。

- SSL/TLS 加密:支持加密连接,保护数据传输的安全性。

安装与使用

- 安装:Mosquitto 可以通过 Docker、包管理工具(如 apt、yum)或编译源代码安装。

- 配置:可以通过配置文件轻松定制其行为,如连接参数、认证等。

- 命令行工具:提供 mosquitto_pubmosquitto_sub 命令行工具用于快速发布和订阅消息。

社区与支持

Mosquitto 拥有活跃的开发社区,提供丰富的文档和支持渠道。开发者可以从 GitHub 或官方文档查找资源,解决问题或贡献代码。

总结的来说Mosquitto 是一个强大而灵活的消息代理,非常适合需要高效通信的物联网和分布式应用场景。它的轻量级和易用性,使其成为开发者和企业的热门选择。

「相关环境」

使用MQTTX软件以及一个实际的串口服务器进行连接与通讯。串口服务器使用ebyte公司单串口服务器进行连接。

Mosquitto部署的系统:Debian 12

使用SSH远程服务器进行安装,SSH开启Root权限或者使用sudo权限进行部署(不建议正式部署场景直接使用Root权限)

「相关地址」

Mosquitto官网:https://mosquitto.org

Debian官网:https://www.debian.org

MQTTX官网:https://mqttx.app

串口服务器:https://www.ebyte.com/product/2124.html

串口服务器的使用可以参考:

「视频教程」

「Mosquitto的安装与部署」

首先,在服务器或设备上安装Mosquitto工具。可以在Mosquitto官网找到安装方法。这里我们演示在Debian 12系统上进行简单安装。安装相对简单,您可以参考官方指南进行安装。

大多数开源系统已将Mosquitto添加到源中,可以直接使用apt-get install mosquitto进行安装。

apt-get install mosquitto

安装完成后,打开配置文件,根据实际需求配置Mosquitto。

vim /etc/mosquitto/mosquitto.conf

有关详细配置信息,请参阅官方手册。这里我们简要总结一下。

# 监听的端口
port 1883

# 使用TLS/SSL加密的端口
# port 8883

# 使用WebSocket协议的端口
# listener 9001
# protocol websockets

# 允许匿名连接
allow_anonymous true

# 用户名和密码认证
password_file /etc/mosquitto/passwd

# 设置客户端ID前缀
# clientid_prefix client-

# 设置日志文件路径
log_dest file /var/log/mosquitto/mosquitto.log

可以根据需要修改以下参数:

  • port:设置Mosquitto监听的端口,默认是1883。如果使用TLS/SSL加密,可以取消注释并修改为8883。

  • listener:如果要使用WebSocket协议,可以取消注释并设置一个新的端口。

  • allow_anonymous:设置是否允许匿名连接。如果设为false,则需要设置用户名和密码认证。

  • password_file:指定存储用户名和密码的文件路径。可以使用mosquitto_passwd命令生成该文件。

  • clientid_prefix:设置客户端ID的前缀。可以用于标识不同类型的客户端。

  • log_dest:设置日志文件的路径,用于记录Mosquitto的日志信息。

为方便起见,我们进行简单配置:设置端口并允许匿名连接。

# Place your local configuration in /etc/mosquitto/conf.d/
#
# A full description of the configuration file is at
# /usr/share/doc/mosquitto/examples/mosquitto.conf.example

pid_file /run/mosquitto/mosquitto.pid

persistence true
persistence_location /var/lib/mosquitto/

allow_anonymous true

log_dest file /var/log/mosquitto/mosquitto.log

include_dir /etc/mosquitto/conf.d

listener 1883
listener 9001

protocol websockets

配置完成后,重新启动Mosquitto服务以使更改生效。

在Linux上,使用systemd管理Mosquitto服务的情况下:

sudo systemctl restart mosquitto

在Windows上,使用服务管理器来重启Mosquitto服务:

txt

net stop mosquitto
net start mosquitto

在macOS上,使用launchctl来重启Mosquitto服务:

txt

sudo launchctl stop homebrew.mxcl.mosquitto
sudo launchctl start homebrew.mxcl.mosquitto

根据不同的操作系统和安装方式,可能会有所不同。请根据你的实际情况选择适当的命令来重启Mosquitto服务。

「连接MQTT服务器」

配置成功后,您可以使用设备连接MQTT服务器。打开NE2-D11配置软件,根据需要选择链路并将工作模式更改为MQTT模式。

填入实际MQTT服务器的地址和端口。

然后开始设置MQTT参数。选择标准的「MQTT 3.1.1」,根据Mosquitto配置填入「设备名称」、「用户名」、「密码」。在此示例中,我们使用匿名连接,因此随意填写用户信息。

订阅和发布设置根据实际情况进行配置。我们使用MQTTX软件模拟服务器的数据采集和指令下发。因此,随意填写订阅和发布主题。

设置完成后,保存并重新启动设备。通过产品指示灯观察是否成功连接到服务器。

「MQTT模拟通讯」

成功连接到服务器后,可以开始通讯。我们使用MQTTX软件进行模拟通讯。

连接MQTTX软件后,配置好订阅和发布主题

发送数据进行通讯。使用XCOM串口工具模拟产品串口采集的数据发送到服务器。会发现MQTTX软件成功接收到通过串口发送的数据。

然后使用MQTTX软件发送数据,模拟服务器下发指令,同样可以看到XCOM软件成功接收到MQTTX发送的数据。

至此,关于Mosquitto的MQTT通讯教程就到此结束。有兴趣的朋友可以继续探索。

「Mosquitto其他功能配置」

*用户和密码

在Mosquitto的配置文件中添加用户和密码认证,可以按照以下步骤进行操作:

  1. 创建一个密码文件,用于存储用户名和密码。可以使用mosquitto_passwd命令生成密码文件。例如,执行以下命令创建一个名为passwd的密码文件:

mosquitto_passwd -c /etc/mosquitto/passwd <username>

替换<username>为你要创建的用户名。然后会提示输入密码,输入密码后会生成密码文件。

  1. 在Mosquitto的配置文件中添加以下行来启用用户名和密码认证:

txt

password_file /etc/mosquitto/passwd
allow_anonymous false

这里的/etc/mosquitto/passwd应该是你在第一步中创建的密码文件的路径。

  1. 保存并关闭配置文件。

  2. 重启Mosquitto服务以使配置生效。具体的重启方法可以参考前面的回答。

配置完成后,客户端连接Mosquitto时需要提供正确的用户名和密码才能进行连接和访问。