近年来,随着物联网技术的快速发展,MQTT(Message Queuing Telemetry Transport)作为一种轻量级的通讯协议,被广泛应用于物联网设备之间的通讯。EMQX平台作为一款开源的MQTT消息服务器,提供了稳定可靠的消息传输服务。本次教程中,我们将探讨如何基于EMQX平台自建MQTT服务器,并实现设备之间的高效通讯。无论是在工业控制、智能家居还是智能城市等领域,搭建自己的MQTT服务器都能为我们带来更大的灵活性和可扩展性。让我们一起深入了解这个过程,为物联网应用打下坚实的基础。
开始前,我们需要准备一台服务器,本地或是公网服务器均可。此次教程我们使用的是本地服务器,服务器系统使用的是Debian 12系统,公网服务器的方法相同。为了方便新人操作,这里推荐使用Docker搭建方法,可以避免环境不同导致的错误。
一
服务器中安装Docker以及Docker Compose
在开始之前,我们需要确认服务器的 root 账号是否正常启用。本教程将使用 ssh 的 root 账号连接服务器,请确保服务器能够通过 ssh 工具正常连接。
首先,通过 ssh 连接服务器。这里大家可以任意选择连接的方法,原理相同,不需要完全一致。这里我们为了方便,直接使用本地终端命令 ssh 连接服务器:
接下来,我们需要在服务器上安装 Docker 和 Docker Compose。如果已经安装完成,可以跳过此步骤。关于 Docker 和 Docker Compose 的安装方法,大家可以参考官网手册(https://docs.docker.com/desktop/install/linux-install/ )进行安装,也可以使用我们为大家准备的命令进行安装。
首先,更新并安装会用到的工具:
apt-get update && apt-get install -y wget vim
完成后,通过以下命令安装 Docker:
wget -qO- get.docker.com | bash
安装完成后,我们可以使用 docker -v 命令查看是否安装成功。
然后,我们开始安装 Docker Compose。在 Docker 的官方文档中可以找到相关的安装教程。
curl -SL https://github.com/docker/compose/releases/download/v2.19.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
安装完成后,将可执行权限应用于安装目标路径中的独立二进制文件:
sudo chmod +x /usr/local/bin/docker-compose
然后,使用 docker-compose --version 命令查看版本,检查安装是否成功。
至此,我们已经成功安装了 Docker 和 Docker Compose。接下来,我们将正式开始部署 EMQX 服务。
二
在 Docker 中部署 EMQX 服务
在 EMQX 官网中,我们点击 Download 进入下载页面,可以找到不同系统的教程。
在本次教程中,我们将使用 Docker 部署,因此我们看到 Docker 部署页面的教程。
这里演示使用 SSH 的方式连接服务器。我们可以参考官方介绍进行部署。
使用 Docker 指令直接部署,可以使用以下命令:
docker pull emqx/emqx:5.1.1
docker run -d --name emqx -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:5.1.1
安装完成后,可以使用 docker ps 命令查看是否安装成功。
安装完成后,打开浏览器,并在地址栏中输入 http://localhost:18083/(localhost 可以用您的 IP 地址替换)以访问 EMQX 仪表板,您可以从那里连接到客户端或检查运行状态。
默认用户名和密码:
admin
public
首次登录时,会要求修改密码。根据提示修改密码即可:
之后,我们即可进入 EMQX 管理页面。
至此,EMQX 已成功安装到我们的服务器内。接下来,我们可以通过配置 EMQX 平台将 MQTT 设备接入服务器。
三
使用 MQTT 将设备连接到 EMQX 服务器
接下来,我们将使用串口服务器 NB114 模拟实际设备,演示设备如何使用 MQTT 协议连接 EMQX 服务器。在连接过程中,我们将使用上位机软件和串口调试助手软件(XCOM)。这些软件可在产品相关页面下载,如果您对产品的连接通讯方法不熟悉,可以参考产品的快速入门教程。在这里,我们假设您已经成功连通了设备。
这里我们不详细介绍 EMQX 的配置,您可以参考官方提供的手册进行配置。我们将重点介绍如何进行连接和通讯。
在默认情况下,EMQX 可以直接通过 MQTT 协议连接,无需额外的设置。在“访问控制→客户端授权”页面中,可以配置客户端的访问规则。
为了方便,我们不进行修改,直接打开上位机软件,配置 NB114 进行连接。
其中,“目标 IP”即为 EMQX 的 IP 地址。
“目标端口”为 MQTT 端口号(1883)。在“平台”中选择“标准 MQTT 3.1.1”,并填写“ClientID”、“UserName”、“PassWord”、“订阅与发布主题”。由于 EMQX 并未配置访问规则,我们可以任意填写这些信息,不会影响设备的连接。完成配置后,点击“保存”并重启设备。稍等片刻,即可看到设备已经成功连接到服务器。我们在 EMQX 服务器中的“监控→客户端”页面中可以查看到设备的连接状态。
接下来,我们测试发布和订阅主题是否正常。首先,我们需要打开 EMQX 平台中的“问题分析→WebSocket 客户端”页面,并将协议版本设置为 3.1.1,其余内容可以保持不变。完成后,点击“连接”。
接下来,我们需要设置订阅和发布主题,将其设置为刚才在 NB114 中填写的订阅和发布主题。注意,这里填写的订阅和发布主题需要交叉填写(订阅填写发布的内容,发布填写订阅的内容)。完成后,在订阅主题中,需要先点击“订阅”,确保 WebSocket 客户端能够收到消息。
接下来,我们打开串口调试助手(XCOM)软件,填写 NB114 的参数,并选择连接。
随后,我们发送任意内容,即可在 WebSocket 客户端的订阅列表中查看到相关信息。
此时,我们再点击发布主题后面的“发布”按钮,即可在 XCOM 软件中查看到相关信息。
至此,我们已经成功实现了 NB114 与 EMQX 服务器之间的通讯。
所有教程相关的内容都已经讲解完成。在本次教程中,我们从 EMQX 服务器的搭建开始,到最终实现设备与服务器之间的基础通讯,全部讲解完毕。当然,本次教程的内容相当基础,设备的连接并未设置任何相关的限制,这样是相当不安全并且浪费资源的。如果您需要将这些内容应用到实际项目中,可以参考 EMQX 手册中的相关内容进行配置。