物联网协议之MQTT(一)基础概念和设备

news2025/6/7 2:42:53

前言: 本文内容均以实战出发,像MQTT概念这种基础内容建议大家自行百度。

推荐资料: mica-mqtt文档

一、MQTT简单介绍

  作为当今物联网的主流协议,MQTT的使用范围非常广,如果你想了解甚至是从事物联网行业,MQTT是避不开的。

1.1 clientId

  看名字不难看出,clientId就是客户端的ID,服务端可以通过clientId判断出对应的是哪台设备。

ID就意味着唯一,所以请在定义clientId时保证它的唯一性,如果重复,可能导致两个设备互踢下线的情况。

  1. 唯一性: 保证clientId的唯一,才能做到对设备的唯一识别;
  2. 长度限制: 根据不同的MQTT,一般都有长度限制,有限制23个字符的,有64个字符的。所以,建议大家不要超过20个字符。
  3. 别用特殊字符: 这个其实大家都懂吧,别那么有个性,容易出奇奇怪怪的问题。尽量用大小写字母数字_-,这四种就行,实测没毛病。

1.2 Topic

  Topic是MQTT中很重要的概念,消息的分类标签,客户端通过订阅或发布特定的主题来进行消息交互。大家可以把它简单理解为我们代码里API接口(就是controller写的那个),都是以斜杠/分隔。当然,如果你是Kafka之类MQ消息队列的使用者,对Topic的概念应该不陌生。下面举个例子。

名称Topic地址
实时数据/mqtt/xxx/xxx/live
历史数据/mqtt/xxx/xxx/history
告警事件/mqtt/xxx/xxx/event
下发控制/cloud/xxx/xxx/switch

中间的两层xxx一般是设备的编号信息。👆上面只是举例Topic的格式,并不是说所有的MQTT设备都有这些Topic。

1.2.1 Topic应用场景

  1. 实时监控: 通过订阅相关Topic,实时接收设备状态和数据,实现对设备的实时监控;
  2. 远程控制: 通过发布命令到特定Topic,实现对远程设备的控制和操作;
  3. 报警通知: 当设备检测到异常情况时,通过发布报警消息到指定Topic,及时通知相关人员或系统;
  4. 数据采集: 通过订阅数据Topic,集中采集和处理来自多个设备的数据。

1.2.2 Topic命名习惯

以下信息主要是以标准网关为例,并不是强制要求。

一般标准的Topic格式有以下特征:

  1. 统一的开头: 一般第一层是传输方向,比如上面表格的例子。以/mqtt开头为设备上报到服务端,以/cloud开头为服务端下发到设备控制;
  2. 统一的结尾: 一般最后一层是传输方向,比如上面表格的例子。以/live结尾为设备上报实时数据,以/history结尾为设备上报历史数据;
  3. 自带设备编号: Topic的中间部分一般是网关的pkey、sn或者clientId。

当然,我们是可以在MQTT服务中自定义Topic,格式可以根据大家的个人习惯。但是希望大家每种功能都定义一个Topic,而不是在消息体内用type之类的字段来区分。

1.2.3 Topic通配符

  以上面表格为例,一般Topic中间会有代表设备编号或clientId,不可能每个设备都写个订阅,一般都以通配符表示。以表格第一行的/mqtt/xxx/xxx/liveTopic为例,我们简单演示两种通配符的使用。

  1. 匹配多层的# #可以模糊匹配多层,比如:我们可以用/mqtt/#/live表示上面的例子;
  2. 匹配单层的+ +可以模糊匹配单层,比如:我们可以用/mqtt/+/+/live表示上面的例子。

1.2.4 Topic共享订阅

这个功能一般是在服务端分发数据的时候时候,这个功能非常好用。后面会有单独的篇幅介绍,不了解的谨慎使用。

  一般而言多个客户端订阅同一个Topic,那么所有的客户端都会收到Topic的消息。但是,有时候我们只想有一个客户端收到数据。比如,数据量非常大时,我想用多个客户端来分担压力,这个时候就需要用到共享订阅。
  简单来说,共享订阅类似Nginx的负载均衡,服务端会把数据随机分到到一个客户端。

1.2.4.1 单组共享订阅

  订阅Topic加上前缀 $queue/(请注意后面有个/),当多个客户端订阅了Topic $queue/xxx,发布者发布到 Topicxxx时 ,则只有一个客户端会接收到消息。

1.2.4.1 分组共享订阅

  订阅Topic加上前缀 $share/<group>/(请注意后面有个/,中间<group>是分组的意思,可以用随便什么字符表示),当客户端订阅了Topic $share/aaa/xxx$share/bbb/xxx,发布者发布到 Topicxxx时 ,则每个分组中只有一个客户端会接收到消息。

相信大家肯定注意到共享订阅前缀最后的 /,所以如果你的Topic是以/开头,那么会出现两个/,比如Topic是/mqtt/xxx/xxx/live,共享订阅Topic就是$queue//mqtt/xxx/xxx/live,这样看起来比较奇怪。所以,一般自定义的共享订阅,我开头的/是不写的。大家一定注意⚠️!!!!!!!!!

1.3 QoS

  这个其实挺重要的,但是我们物联网一般也不需要单独设置,大家可以参考下mica-mqtt的文档了解下就行:mica-mqtt

1.4 消息体

  MQTT传输的消息,一般收到是字节数组byte[],转成字符串就行,就能获取到真正的信息。

二、MQTT常用工具

工具的使用后面会单开一章,有些会有特殊用法。

2.1 EMQX

  理论上说,EMQX不能说是一个工具,它是一个平台或者说一个系统。有开源版,也有更强的云服务和企业版,但是一般的小中型物联网平台,开源版足够了。
EMQX文档地址:EMQX文档

虽然EMQX很出名,使用的用户很多,但是正因如此。强烈建议大家不要把EMQX作为数据接收服务,暴露在公网,很可能因为EMQX的某些可能存在的漏洞影响整个平台。

2.1 MQTTX

通过网盘分享的文件:emqx-5.3.2-windows-amd64.zip
链接: https://pan.baidu.com/s/1BYmqQQaPHkshyf-vkFK5Sw?pwd=hpua 提取码: hpua
–来自百度网盘超级会员v9的分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2400950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

「Java教案」Java程序的构成

课程目标 1&#xff0e;知识目标 能够按照Java标识符的命名规则&#xff0c;规范变量的命名。能够区分Java中的关键字与保留字。能够对注释进行分类&#xff0c;根据注释的用途合理的选择注释方式。 2&#xff0e;能力目标 能编写符合规范的标识符。能识别Java中的关键字和…

区块链可投会议CCF B--EDBT 2026 截止10.8 附录用率

Conference&#xff1a;EDBT: 29th International Conference on Extending Database Technology CCF level&#xff1a;CCF B Categories&#xff1a;数据库&#xff0f;数据挖掘&#xff0f;内容检索 Year&#xff1a;2026 Conference time&#xff1a;24th March - 27th…

经典ReLU回归!重大缺陷「死亡ReLU问题」已被解决

来源 &#xff5c; 机器之心 在深度学习领域中&#xff0c;对激活函数的探讨已成为一个独立的研究方向。例如 GELU、SELU 和 SiLU 等函数凭借其平滑梯度与卓越的收敛特性&#xff0c;已成为热门选择。 尽管这一趋势盛行&#xff0c;经典 ReLU 函数仍因其简洁性、固有稀疏性及…

在VSCode中开发一个uni-app项目

创建项目 使用命令行工具&#xff08;例如 vue-cli&#xff09;来创建一个新的 uni-app 项目。 创建以JavaScript开发的工程 npx degit dcloudio/uni-preset-vue#vite my-vue3-project //或者 npx degit dcloudio/uni-preset-vue#vite-alpha my-vue3-project创建以TypeScript…

Python - 爬虫;Scrapy框架之插件Extensions(四)

阅读本文前先参考 https://blog.csdn.net/MinggeQingchun/article/details/145904572 在 Scrapy 中&#xff0c;扩展&#xff08;Extensions&#xff09;是一种插件&#xff0c;允许你添加额外的功能到你的爬虫项目中。这些扩展可以在项目的不同阶段执行&#xff0c;比如启动…

Spark实战能力测评模拟题精析【模拟考】

1.println(Array(1,2,3,4,5).filter(_%20).toList() 输出结果是&#xff08;B&#xff09; A. 2 4 B. List(2,4) C. List(1,3,5) D. 1 3 5 2.println(Array("tom","team","pom") .filter(_.matches("")).toList) 输出结果为(List(tom,…

【OSG学习笔记】Day 15: 路径动画与相机漫游

本章来学习下漫游相机。 路径动画与相机漫游 本届内容比较简单&#xff0c;其实就是实现物体的运动和相机的运动 当然这两个要一起执行。 贝塞尔曲线 贝塞尔曲线&#xff08;Bzier curve&#xff09;是一种在计算机图形学、动画制作、工业设计等领域广泛应用的参数曲线&am…

PostgreSQL(PostGIS)触发器+坐标转换案例

需求&#xff0c;只录入一份坐标参考为4326的数据&#xff0c;但是发布的数据要求坐标必须是3857 对这种需求可以利用数据库触发器实现数据的同步 步骤&#xff1a; 1. 使用ArcGIS Pro创建一个名字为testfc_4326的图层&#xff0c;坐标参考为4326 2. 使用Pro再创建一个名字…

Constraints and Triggers

目录 Kinds of Constraints Single-Attribute Keys Multiattribute Key Foreign Keys Expressing Foreign Keys Enforcing Foreign-Key Constraints Actions Taken Attribute-Based Checks Timing of Checks Tuple-Based Checks Assertions Timing of Assertion Ch…

BERT:让AI真正“读懂”语言的革命

BERT&#xff1a;让AI真正“读懂”语言的革命 ——图解谷歌神作《BERT: Pre-training of Deep Bidirectional Transformers》 2018年&#xff0c;谷歌AI团队扔出一篇核弹级论文&#xff0c;引爆了整个NLP领域。这个叫BERT的模型在11项任务中屠榜&#xff0c;甚至超越人类表现…

冷雨泉教授团队:新型视觉驱动智能假肢手,拟人化抓握技术突破,助力截肢者重获生活自信

研究背景&#xff1a;日常生活中&#xff0c;健康人依靠手完成对物体的操作。对于手部截肢患者&#xff0c;手部的缺失导致他们难以有效地操作物体&#xff0c;进而影响正常的日常生活。拥有一个能够实现拟人地自然抓取多种日常物体的五指动力假手是手部截肢患者的夙愿&#xf…

pikachu靶场通关笔记14 XSS关卡10-XSS之js输出(五种方法渗透)

目录 一、源码分析 1、进入靶场 2、代码审计 二、渗透实战 1、根据提示输入tmac 2、XSS探测 3、注入Payload1 4、注入Payload2 5、注入Payload3 6、注入Payload4 7、注入Payload5 本系列为通过《pikachu靶场通关笔记》的XSS关卡(共10关&#xff09;渗透集合&#x…

李沐-动手学深度学习:RNN

1.RNN从零开始实现 import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2l#8.3.4节 #batch_size&#xff1a;每个小批量中子序列样本的数目&#xff0c;num_steps&#xff1a;每个子序列中预定义的时间步数 #loa…

【教学类-36-10】20250531蝴蝶图案描边,最适合大小(一页1图1图、2图图案不同、2图图案相同对称)

背景说明: 之前做了动物头像扇子(描边20),并制作成一页一套图案对称两张 【教学类-36-09】20250526动物头像扇子的描边(通义万相)对称图40张,根据图片长宽,自动旋转图片,最大化图片-CSDN博客文章浏览阅读1k次,点赞37次,收藏6次。【教学类-36-09】20250526动物头像…

高效DBA的日常运维主题沙龙

2024年11月10日&#xff0c;在宁波组织了高效DBA的日常运维沙龙活动&#xff0c;大概有20人左右现场参加。会议的主题为&#xff1a; 目标&#xff1a; 1、识别高频低效操作并制定自动化方案 2、建立关键运维指标健康度体系 3、输出可立即落地的优化清单 会议议程 一、效能瓶…

AAAI 2025论文分享│STD-PLM:基于预训练语言模型的时空数据预测与补全方法

本文详细介绍了一篇发表于人工智能顶级会议AAAI 2025的论文《STD-PLM: Understanding Both Spatial and Temporal Properties of Spatial-Temporal Data with PLM》。该论文提出了一种基于预训练语言模型&#xff08;Pre-trained Language Model‌&#xff0c;PLM&#xff09;的…

Ethernet/IP转DeviceNet网关:驱动大型矿山自动化升级的核心纽带

在大型矿山自动化系统中&#xff0c;如何高效整合新老设备、打通数据孤岛、实现统一控制&#xff0c;是提升效率与安全的关键挑战。JH-EIP-DVN疆鸿智能EtherNet/IP转DeviceNet网关&#xff0c;正是解决这一难题的核心桥梁&#xff0c;为矿山各环节注入强劲连接力&#xff1a; …

[蓝桥杯]模型染色

模型染色 题目描述 在电影《超能陆战队》中&#xff0c;小宏可以使用他的微型机器人组合成各种各样的形状。 现在他用他的微型机器人拼成了一个大玩具给小朋友们玩。为了更加美观&#xff0c;他决定给玩具染色。 小宏的玩具由 nn 个球型的端点和 mm 段连接这些端点之间的边…

卡西欧模拟器:Windows端功能强大的计算器

引言 大家还记得初中高中时期用的计算器吗&#xff1f;今天给大家分享的就是一款windows端的卡西欧计算器。 软件介绍 大家好&#xff0c;我是逍遥小欢。 CASIO fx-9860G是一款功能强大的图形计算器&#xff0c;适用于数学、科学和工程计算。以下是其主要功能和特点的详细介…

机器学习基础(三) 逻辑回归

目录 逻辑回归的概念核心思想 Sigmoid 函数 逻辑回归的原理和底层优化手段伯努利分布最大似然估计 Maximum Likelihood Estimation &#xff08;MLE&#xff09;伯努利分布的似然函数交叉熵损失函数&#xff08;Cross-Entropy Loss&#xff09;&#xff0c;也称为 对数损失&…