Windows下搭建MQTT服务器实现多设备间实时图传

测试了两种场景:

【1】图像采集端:采集电脑自己的摄像,通过MQTT协议上传到MQTT服务器,图像显示端订阅采集端的主题,获取实时图像显示。

【2】设备端:ESP32 + OV2640 采集图像上传到MQTT服务器, 应用端订阅设备端的主题,获取实时图像显示。

【3】设备端: STM32F103 + OV7725 + ESP8266 采集图像上传到MQTT服务器, 应用端订阅设备端的主题,获取实时图像显示。

【4】设备端: STM32F103 + OV7725 + 4G模块 采集图像上传到MQTT服务器, 应用端订阅设备端的主题,获取实时图像显示。

图片

二、EMQX介绍

2.1 EMQX介绍

EMQX是一款大规模可弹性伸缩的云原生分布式物联网MQTT消息服务器。它是完全开源的,基于Apache 2.0许可证,且自2013年起已经有200+的开源版本迭代。EMQX提供了三种服务:云服务版本、商业版和开源版。

作为一款MQTT消息服务器,EMQX支持MQTT 5.0和3.x协议标准,具有更好的伸缩性、安全性和可靠性。在性能上,单节点支持500万MQTT设备连接,集群可扩展至1亿并发MQTT连接。同时,它能支持每秒实时接收、移动、处理与分发数百万条的MQTT消息,消息分发与投递时延低于1毫秒。

EMQX还有一些高级特性,如采用Masterless的大规模分布式集群架构,实现系统高可用和水平扩展。此外,它还内置了强大的规则引擎,支持一站式数据提取、过滤与转换,并能灵活集成SQL、NoSQL、时序数据库,及Kafka等流处理中间件。

EMQX支持跨平台部署,可以在Linux、Windows、MacOS、ARM嵌入系统等平台进行部署。生产环境下,推荐在CentOS、Ubuntu、Debian等Linux发行版上进行部署,不建议使用Windows。

帮助文档:https://www.emqx.io/docs/zh/v5.2/

2.2 MQTT核心概念

MQTT(消息队列遥测传输)是物联网(Internet of Things)中最常用的轻量级消息协议。该协议基于发布/订阅(pub/sub)模式进行消息通信,允许设备和应用程序实时交换数据,使用简单有效的消息格式,最大限度地减少网络开销并降低功耗。

作为MQTT消息平台,EMQX Enterprise为完整的MQTT消息功能提供全面支持。

2.3 发布/订阅模式

该协议是事件驱动的,并使用发布/订阅模式连接设备。与传统的客户端/服务器模式不同,它是一种消息传递模式,其中发送方(发布者)不直接将消息发送给特定的接收方(订阅者)。相反,发布者将消息分类为不同的主题,订阅者订阅他们感兴趣的主题。当发布者向主题发送消息时,MQTT代理路由并过滤所有传入消息,然后将其传递给对该主题表达兴趣的所有订阅者。

发布者和订阅者彼此解耦,不需要知道对方的存在。他们之间的唯一连接基于预定的消息协议。发布/订阅模式支持灵活的消息通信,因为可以根据需要动态添加或删除订阅者和发布者。它还使消息广播、多播和单播的实现更加容易。

2.4 MQTT服务器

MQTT服务器充当发布客户端和订阅客户端之间的代理,将所有收到的消息转发给匹配的订阅客户端。因此,有时服务器被直接称为MQTT代理。

2.5 MQTT客户端

客户端是指可以使用MQTT协议连接到MQTT服务器的设备或应用程序。它们既可以充当发布者和订阅者,也可以单独担任这两个角色中的任何一个。在MQTT通信中,客户端可以向服务器发布消息,同时也可以订阅一个或多个主题以接收来自其他客户端的消息。通过这种方式,MQTT客户端能够在物联网环境中实现高效、实时的数据传输和交互。

2.6 主题与通配符

在MQTT中,主题是用于识别和区分不同消息的,构成了MQTT消息路由的基础。发布者在发布消息时可以指定消息的主题,而订阅者可以选择订阅感兴趣的主题以接收相关消息。

为了实现一次订阅多个主题的目标,订阅者在订阅主题时可以使用通配符。MQTT提供了两种类型的主题通配符,单级通配符和多级通配符,以满足不同的订阅需求。

  • 单级通配符:用于匹配主题中的一个级别。
  • 多级通配符:用于匹配主题中的多个级别。

通过使用这两种通配符,订阅者可以灵活地订阅一系列相关的主题,而不仅仅是一个具体的主题。

2.7 服务质量(QoS)

MQTT定义了三个级别的QoS,以提供不同级别的消息可靠性。每个消息在发布时可以独立设置自己的QoS。

  • QoS 0:最多传递一次消息,可能会丢失;
  • QoS 1:至少传递一次消息,保证到达,但可能会重复;
  • QoS 2:精确传递一次消息,保证到达且不重复。

随着QoS级别的增加,消息传输的复杂性也增加。需要根据实际情况选择合适的QoS级别。

在选择QoS级别时,需权衡消息传递的可靠性和网络资源的消耗。例如,在网络资源有限但对消息可靠性要求不高的情况下,可以选择QoS 0;而在对消息可靠性要求较高,且能容忍一定网络资源消耗的场景中,可以选择QoS 1或QoS 2。

三、Windows下安装EMQX

3.1 官网地址

链接:https://www.emqx.io/downloads?os=Windows

3.2 下载EMQX

【1】点击下载压缩包。

图片

【2】下载后解压。

图片

3.3 打开PowerShell命令行

鼠标右键点击Windows左下角的windows图标,弹出对话框,选择 Windows PowerShell,打开命令行窗口。

图片

图片

3.4 启动EMQX

【1】进入到刚才EMQX解压的目录。

图片

【2】在 Windows PowerShell命令行窗口,输入cd命令切换路径。

 

cpp

cd C:Users11266Downloadsemqx-5.3.0-windows-amd64

图片

【3】输入命令启动EMQX

 

cpp

.binemqx start

启动的时候会弹出防火墙提示窗口,记得点击 允许访问 。

图片

启动成功的提示如下:

 

cpp

PS C:Users11266Downloadsemqx-5.3.0-windows-amd64> .binemqx start
EMQX_NODE__DB_ROLE [node.role]: core
EMQX_NODE__DB_BACKEND [node.db_backend]: mnesia
PS C:Users11266Downloadsemqx-5.3.0-windows-amd64>

图片

3.5 EMQX常用的命令

 

cpp

PS C:Users11266Downloadsemqx-5.3.0-windows-amd64> .binemqx
usage: emqx (install|uninstall|start|stop|restart|console|ping|ctl|list|remote_console|attach)
    
.binemqx start    启动
.binemqx stop     停止
.binemqx restart  重启

四、配置EMQX服务器

4.1 登录EMQX内置管理控制台

EMQX 提供了一个内置的管理控制台,即 EMQX Dashboard。方便用户通过 Web 页面就能轻松管理和监控 EMQX 集群,并配置和使用所需的各项功能。

在浏览器里输入: http://127.0.0.1:18083 就可以访问EMQX的后台管理页面。可以管理以连接的客户端或检查运行状态。

图片

默认用户名和密码:

 

 

用户名:admin
密码:public

第一次登录会提示你修改新密码,如果不想设置,也可以选择跳过。

登录成功的页面显示如下:

图片

4.2 MQTT配置

http://127.0.0.1:18083/#/mqtt/general

这里可以配置MQTT的一些参数,根据自己的需求进行配置。

图片

4.3 测试MQTT通信

http://127.0.0.1:18083/#/websocket

新建一个客户端,点击连接。

图片

连接之后,然后点击订阅,和发布,如果下面消息能正常的接收。说明MQTT服务器通信是已经正常,没问题了。

并且在这个页面也可以看到主题发布主题订阅的格式。

图片

4.4 MQTT客户端登录服务器测试

接下来就打开我们自己的MQTT客户端登录MQTT服务器进行测试数据的通信。

端口选择: 1883

根据软件参数填入参数,登录,进行主题的发布和订阅。

说明:目前还没有配置客户端认证,现在只要IP和端口输入正确,MQTT三元组可以随便输入,都可以登录上服务器的,服务器没有对三元组做校验。

EMQ X 默认配置中启用了匿名认证,任何客户端都能接入 EMQX。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQX 将根据匿名认证启用情况决定是否允许客户端连接。

图片

http://127.0.0.1:18083/#/clients

然后打开EMQX的管理后台,可以看到我们的设备已经登录服务器了,名字为test1

图片

在订阅主题的页面也可以看到我们客户端设备订阅的主题。

图片

4.5 客户端认证配置

EMQX 默认配置中启用了匿名认证,任何客户端都能接入 EMQX。没有启用认证插件或认证插件没有显式允许/拒绝(ignore)连接请求时,EMQX 将根据匿名认证启用情况决定是否允许客户端连接。

在正式产品里肯定是要启用认证的,不然任何设备都能接入。

下面就介绍如何配置 客户端认证。

http://127.0.0.1:18083/#/authentication

【1】打开客户端认证页面

图片

【2】选择密码认证

图片

【3】选择内置数据库

图片

【4】设置认证方式(都可以默认,不用改),直接点击创建。

图片

【5】创建成功后,点击用户管理

图片

【6】添加用户

图片

图片

【7】添加成功

图片

【8】添加完毕之后,打开MQTT客户端可以进行测试。

登录的时候,MQTT用户名和密码必须输入正确,按照上一步添加的信息进行如实填写,否则是无法登录服务器的。

图片

4.6 客户端授权配置

客户端授权页面可以配置每个客户端(设备)的主题发布,订阅权限。限制它是否可以发布主题,订阅主题。如果有需要就可以进行配置。

http://127.0.0.1:18083/#/authorization/detail/built_in_database?tab=users

【1】创建数据源

图片

【2】选择内置数据库

图片

【3】完成创建

图片

【4】点击权限管理

图片

【5】选择客户端ID,点击添加

图片

【6】配置权限

图片

4.7 数据转发(集成)

在集成选项里,可以对设备数据处理。比如:转发到自己的HTTP服务器,转发到自己其他的MQTT服务器,创建规则,某些事件触发某些动作等等。

图片

选择数据桥接。

可以把数据发送端自己的HTTP服务器,或者发送到其他的MQTT服务器。

图片

选择HTTP服务 (如果自己有HTTP服务器,可以将数据转发给自己的HTTP服务器)。

图片

五、MQTT客户端消息互发测试

本教程用到的全部软件工具下载链接(网盘):https://pan.quark.cn/s/c7c7aa4d8ee2

5.1 添加2个设备

为了方便测试设备间互相订阅主题,数据收发,在客户端认证页面至少添加2个设备。我这里分别添加了test1test2

图片

5.2 设备间测试

下面软件的下载地址:

【1】软件的下载地址(可执行文件,0积分免费下载):https://download.csdn.net/download/xiaolong1126626497/18784012

【2】如果想要学习软件如何开发,获取源码,看这里:https://blog.csdn.net/xiaolong1126626497/article/details/129258844

设备A订阅设备B的主题,设备B订阅设备A的主题,实现数据互发。

图片

设备A的MQTT信息:

 

cpp

MQTT服务器地址:127.0.0.1
MQTT服务器端口号:1883
MQTT客户端ID:AAA
MQTT用户名:test1
MQTT登录密码:12345678

订阅主题:BBB/#
发布主题:AAA/1
发布的消息:{ "msg": "我是AAA设备" }

设备B的MQTT信息:

 

cpp

MQTT服务器地址:127.0.0.1
MQTT服务器端口号:1883
MQTT客户端ID:BBB
MQTT用户名:test2
MQTT登录密码:12345678

订阅主题:AAA/#
发布主题:BBB/1
发布的消息:{ "msg": "我是BBB设备" }

5.3 MQTT实时图传测试

下面演示,利用MQTT协议进行图像传输。

【1】软件的下载地址(可执行文件,0积分免费下载):https://download.csdn.net/download/xiaolong1126626497/88512661

【2】如果想要学习软件如何开发,获取源码,看这里:https://download.csdn.net/download/xiaolong1126626497/87614468

这是Qt的工程,利用Qt开发的图传软件,分别为发送端和接收端。

图片

运行效果: 进行图传效果是非常的好。 报文最大一次可以发送 256MB

图片

到此,本篇文章内容结束。

原创文章,作者:guozi,如若转载,请注明出处:https://www.sudun.com/ask/89818.html

Like (0)
guozi的头像guozi
Previous 2024年6月5日 上午10:54
Next 2024年6月5日 上午11:01

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注