答复:
- 什么是MQTT
物联网(IoT)发展迅猛,传感器、网关、云平台之间如何高效通信成了核心问题。MQTT(Message Queuing Telemetry Transport)作为一种轻量级的消息传输协议,近年来被广泛应用于智能家居、工业控制、车联网等场景。
MQTT 是一种基于发布/订阅(Pub/Sub)模式的轻量级消息协议,设计初衷是为低带宽、不稳定网络环境下的设备通信而生。它更像是广播电台:你订阅频道,谁在频道里发布了消息你就能收到,中间由一个叫做 Broker 的中间人来转发消息。
- MQTT 的三大角色
Broker(消息代理)
Broker 就是 MQTT 网络的大脑。客户端不互相通信,所有消息都通过 Broker 中转。主流 Broker 有
Mosquitto(轻量、适合嵌入式开发)
EMQX(高性能、支持百万连接)
HiveMQ、RabbitMQ(企业级)
Publisher(发布者)
发布消息的人,比如你家的温湿度传感器,每隔 5 秒发布一次环境数据。
Subscriber(订阅者)
对某类消息感兴趣的接收者,比如你手机里的 APP 订阅了“家里客厅/温度”,只要 Broker 收到这个主题的消息,就会推送给你。
- 核心机制-主题、保留消息
主题(Topic)
MQTT 的消息没有标题,靠的是主题(Topic)分类。
保留消息(Retained Message)
比如你家的空调状态是“开启”,订阅者上线时希望立刻知道当前状态,可以发布一条“保留消息”,Broker 会记住它,并在有人订阅时立刻推送。
- GraniStudio是否支持MQTT
GraniStudio平台是苏州格拉尼视觉科技有限公司推出的对标Labview的零代码工控开发平台,该平台支持MQTT服务器,客户端,发送文本,接收文本和关闭MQTT通信。这几个工具算子的介绍如下:
MQTT服务器
MQTT服务器属于资源管理器算子部分,归属于资源管理器通用工具
通过主界面可配置IP地址和端口号.然后选配高级设置是否启用密码功能,连接时是否需要验证账号密码,并在列表中支持显示客户端连接列表和主题列表,消息列表方便用户调试使用。
操作示例
- 创建IP地址和端口号,一定要注意IP格式如:127.0.0.1 默认端口号:1883
- 如输入IP地址格式不正确将出现弹窗提示。
- 如需要客户端连接时需要输入正确的账号和密码,就需要开启高级设置,设置连接验证,用户名和密码。
- 设置完毕后点击开启服务即可。
- 打开MQTT客户端测试工具。注意客户端IP为自动分配
- 点击连接
连接不成功原因是因为服务器那边开启了连接验证,所以需要输入正确的验证信息才能连接成功。
- 服务器列表中已显示该客户端的连接
- 再次开启客户端连接该服务器
列表中已显示两个客户端的连接,
- 客户端1订阅主题,客户端2发布主题
- 客户端1显示客户端2发布主题。
从上图可看出 MQTT服务器是一个代理服务,不同客户端之间的通信。
一个客户端可订阅多个主题,。
MQTT客户端
MQTT客户端属于资源管理器算子部分,归属于资源管理器通用工具
算子内部自动分配客户端ID,通过主界面输入MQTT服务器IP地址和端口号可连接MQTT服务器,然后选配高级设置是否启用密码功能,连接时是否需要验证账号密码,并支持显示接收消息列表,通过界面可订阅主题和发布主题,实现与MQTT服务器与MQTT其他客户端的通信。
操作示例
- 打开客户端算子后将默认配分客户端ID,无法修改
- 配置IP和端口号,IP格式:127.0.0.1 端口号:1883 默认端口号:1883
- 是否开启高级设置,开启高级设置需输入用户名和密码,,未开启将无需输入, 默认未开启。如果服务器开启用户名验证将开启。
- 点击连接按钮
即可在连接列表中显示该客户端连接信息
- 点击断开按钮
点击断开连接后服务器列表那会刷新,当前客户端处于未连接状态
- 订阅主题
服务器将显示客户端订阅列表。
使用客户端2发布该主题
客户端2发布主题并附加消息Test
- 发布主题消息
客户端2订阅T1主题, 客户端1发布主题T1
MQTT发送文本
MQTT发送文本属于主任务设计器算子部分,归属于主任务设计器通用工具
算子内部无需连接操作,通过引用依赖引用MQTT客户端对象即可,实现代理客户端对象发布主题消息功能,通过界面配置可配置主题,可引用主题和手动输入主题,也可引用消息和手动输入消息两种方式。
需要发送消息必须有主题,需要发布主题必须消息,如用户输入主题当前客户端未发布将自动发布该主题消息。
操作示例
创建服务器调试工具。
GS MQTT客户端连接该服务器
创建两个客户端,模拟两个客户端之间通信
- 引用MQTT 客户端 对象
- 使用自定义主题方式,输入文本 R1
- 使用自定义消息方式,输入消息 Test
- 注意事项主题和消息两者均不可为空。
- 点击执行按钮
服务器已接收到MQTT客户端发布主题和消息
客户端2订阅R1主题,与 GS MQTT客户端建立连接
订阅主题成功, 将刚GS MQTT客户端发布主题和消息发送至该客户端中
- 使用引用方式
使用局部变量定义两个变量,一个主题一个消息变量 均是GString类型
- 引用主题方式
- 引用消息方式
因为客户端2订阅R1主题,发送文本发送的主题为R1 消息为GRaniTest。正常发送主题消息
MQTT接收文本
MQTT接收文本属于主任务设计器算子部分,归属于主任务设计器通用工具
算子内部无需连接操作,通过引用依赖引用MQTT服务器或客户端对象即可,实现代理接收MQTT服务器或客户端消息功能,通过界面选配项可配置接收超时功能,如在设置时长内未接收文本消息将视为超时,如未打开超时功能将默认持续不断等待接收,直到接收到文本即可。
时长单位设置以毫秒为单位。
接收到文本将设置为本算子输出项,输出结果字符串类型未字符串类型,字节类型未Byte字节类型。
操作示例
- 订阅客户端主题 T1
- 接收文本选择引用对象
- 是否打开高级设置,默认 未打开
未打开高级设置将一直等待文本接收
- 是否打开高级设置,打开超时设置需要设置一个时长,如在规定时间内为未接收到文本消息,则视为超时,否则将接收文本显示到输出界面
打开高级设置将在规定时间段内接收文本
3000毫秒内未接收到文本
- 主动和被动触发,当引用一个MQTT通信对象时,内部已为此通信建立起一个接收事件,如果用户点击执行按钮为主动触发等待接收功能,如果是程序在流程中正常执行到此处为被动触发等待接收功能,一般主动触发适用于调试阶段的使用,被动出发适用于在自动流程中接收信号的使用。
主动执行接收
被动接收
被动接收
MQTT关闭
MQTT关闭属于主任务设计器算子部分,归属于主任务设计器通用工具
MQTT关闭算子将代理MQTT服务器或客户端关闭通信功能,可通过引用依赖配置MQTT服务器或客户端,如内部引用MQTT服务器将停止监听,禁止发送消息和客户端的连接.如为MQTT客户端将停止需MQTT服务器的连接,停止发送消息。
操作示例
步骤一、使用拖拉拽方式在主任务设计器工具箱中将关闭MQTT通信算子创建在画布中。
步骤二、选择引用依赖框配置一个MQTT类相关算子如:GMQTT服务器,GMQTT客户端。暂时支持类型(GMQTTClient,GMQTTServer)),两种数据类型
步骤三、算子执行成功,可继续使用初始化算子再次初始化方可继续使用标刻功能。
- 为什么选择GraniStudio MQTT通信协议?
保持 ClientID 唯一,防止连接互踢
合理规划主题命名,避免混乱
连接长时间保持,不必频繁重连
消息机制更灵活,低功耗设备友好
更适合物联网中“一对多”或“多对多”的场景