MQTT协议(概括与详解)

article/2025/9/29 15:29:22

I概括

一,MQTT协议

1、MQTT协议可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。

2、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。
对负载内容屏蔽的消息传输。
使用 TCP/IP 提供网络连接。

3、实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。
在这里插入图片描述

4、MQTT传输的消息分为:主题(Topic)和负载(payload)两部分:
(1)Topic,可以理解为消息的类型,订阅者订阅(Subscribe)后,就会收到该主题的消息内容(payload)。
(2)payload,可以理解为消息的内容,是指订阅者具体要使用的内容。
在这里插入图片描述

II详解

一、MQTT是什么?

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(Publish/Subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上,由IBM在1999年发布,目前最新版本为v3.1.1。MQTT最大的优点在于可以以极少的代码和有限的带宽,为远程设备提供实时可靠的消息服务。做为一种低开销、低带宽占用的即时通讯协议,MQTT在物联网、小型设备、移动应用等方面有广泛的应用。

当然,在物联网开发中,MQTT不是唯一的选择,与MQTT互相竞争的协议有XMPP和CoAP协议等,

应用消息 Application Message

MQTT协议通过网络传输应用数据。应用消息通过MQTT传输时,它们有关联的服务质量(QoS)和主题(Topic)。

客户端Client
使用MQTT的程序或设备。客户端总是通过网络连接到服务端。
它可以发布应用消息给其它相关的客户端。
订阅以请求接受相关的应用消息。取消订阅以移除接受应用消息的请求。从服务端断开连接。
一般情况,云下设备==客户端

服务端 Server
一个程序或设备,作为发送消息的客户端和请求订阅的客户端之间的中介。
服务端接受来自客户端的网络连接。接受客户端发布的应用消息。处理客户端的订阅和取消订阅请求。转发应用消息给符合条件的已订阅客户端。
(服务端不是数据的终点,它只是数据的中转站)
(一般情况下,云平台==服务端)

订阅 Subscription
订阅包含一个主题过滤器(Topic Filter)和一个最大的服务质量(QoS)等级。
订阅与单个会话(Session)关联。会话可以包含多于一个的订阅。会话的每个订阅都有一个不同的主题过滤器。

主题名 Topic
Name附加在应用消息上的一个标签,服务端已知且与订阅匹配。服务端发送应用消息的一个副本给每一个匹配的客户端订阅。

主题过滤器 Topic Filter
订阅中包含的一个表达式,用于表示相关的一个或多个主题。主题过滤器可以使用通配符。

会话 Session
客户端和服务端之间的状态交互。一些会话持续时长与网络连接一样,另一些可以在客户端和服务端的多个连续网络连接间扩展。

控制报文 MQTT Control Packet
通过网络连接发送的信息数据包。MQTT规范定义了十四种不同类型的控制报文,其中一个(PUBLISH报文)用于传输应用消息。

ASCII:0~31127(共33个)是控制字符或通信专用字符(其余为可显示字符32~126(共95个)是字符(32是空格),其中48~5709十个阿拉伯数字。
65~9026个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。GBK:汉字内码扩展规范(国标)。
采用单/双字节变长编码,完全兼容AsCH字符编码英文使用单字节编码,中文部分采用双字节编码。UTF-8:是一种针对 Un i code的可变长度字符编码,又称万国码。UTF-816个字节编码 Uni code字符。
可以表示中文简体繁体及其它语言(如英文,日文,韩文)。注意:即使是同一个汉字,在不同的编码中所对应的数值/长度是不同的(如:GBK/UTF-8安信可IDE默认是GBK编码,MTT规定为UTF-8编码。
如果使用安信可编译器编程发送汉字,需将安信可IDE的编码方式设为UTF-8

清理会话 Clean Session
当MTT客户端接入MTT服务端时,选择是否继续之前的会话。
如果不清理会话,MTT服务端会在之前交互的基础上,继续交互如果清理会话,MTT服务端必须新建一个全新的会话。

二、MQTT的特点

消息质量(QoS)

MQTT消息质量有三个等级,QoS 0,QoS 1和 QoS 2。

QoS 0:最多分发一次。消息的传递完全依赖底层的TCP/IP网络,协议里没有定义应答和重试,消息要么只会到达服务端一次,要么根本没有到达。
QoS 1:至少分发一次。服务器的消息接收由PUBACK消息进行确认,如果通信链路或发送设备异常,或者指定时间内没有收到确认消息,发送端会重发这条在消息头中设置了DUP位的消息。
QoS 2:只分发一次。这是最高级别的消息传递,消息丢失和重复都是不可接受的,使用这个服务质量等级会有额外的开销。

eg.
目前流行的共享单车智能锁,智能锁可以定时使用QoS level 0质量消息请求服务器,发送单车的当前位置,如果服务器没收到也没关系,反正过一段时间又会再发送一次。之后用户可以通过App查询周围单车位置,找到单车后需要进行解锁,这时候可以使用QoS level 1质量消息,手机App不断的发送解锁消息给单车锁,确保有一次消息能达到以解锁单车。最后用户用完单车后,需要提交付款表单,可以使用QoS level 2质量消息,这样确保只传递一次数据,否则用户就会多付钱了。

MQTT的消息类型(Message Type)

固定报文头中的第一个字节包含连接标志(Connect Flags),连接标志用来区分MQTT的消息类型。MQTT协议拥有14种不同的消息类型(如表2),可简单分为连接及终止、发布和订阅、QoS 2消息的机制以及各种确认ACK。至于每一个消息类型会携带什么内容。

在这里插入图片描述
异步发布/订阅实现

发布/订阅模式解耦了发布消息的客户(发布者)与订阅消息的客户(订阅者)之间的关系,这意味着发布者和订阅者之间并不需要直接建立联系。
这个模式有以下好处:

  1. 发布者与订阅者只需要知道同一个消息代理即可
  2. 发布者和订阅者不需要直接交互
  3. 发布者和订阅者不需要同时在线

JSON

JSON中文全称是JavaScript对象标记语言,在这门语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字符串、数字、对象、数组等。其语法规则是:

对象表示为键值对;
数据由逗号分隔;
花括号保存对象;
方括号保存数组。

JSON层次结构简洁清晰,易于阅读和编写,同时也易于机器解析和生成,有效提升网络传输效率。

对于单片机开发者,主流的微控制器软件开发工具Keil有提供JSON库,可以用于STC、STM32等微控制器开发,所以在微控制器上解析JSON不需要自己写一个JSON解析器或者移植了。

如果实在懒得使用JSON库生成或解析,也可以直接使用C语言中的sprintf生成JSON字符串,比如:

sprintf(buf, "{\"String\":\"%s\", \"Value\":%d}", "Hello World!", 12345);

超级详细的MQTT协议教学:
百度网盘链接:https://pan.baidu.com/s/1beAq8LlHRxjVIXe9it_jKA
提取码:qtzs

在这里插入图片描述


http://chatgpt.dhexx.cn/article/8mMxIKfo.shtml

相关文章

大数据挖掘分析经典案例,主要包含哪几种?

1.预测产品未来一段时间用户是否会流失,流失情况怎么样; 2.公司做了某个促销活动,预估活动效果怎么样,用户接受度如何; 3.评估用户信用度好坏; 4.对现有客户市场进行细分,到底哪些客户才是目…

用户复购行为预测--数据挖掘分析案例(天池/python)

–阿里天池新人赛中的一个,记录分享。 Repeat Buyers Prediction-Challenge the Baseline-天池大赛-阿里云天池 第一次提交:8简单特征,随机森林模型,score:0.5507327,排名:278 第二次提交:13特…

数据挖掘简介

数据挖掘(Data Mining,DM)又称数据库中的知识发现(Knowledge Discover in Database,KDD) 数据挖掘又称数据库中的知识发现(Knowledge Discover in Database,KDD)&#xf…

数据挖掘实战(聚类分析)

目录 数据探索 数据初步认识 查看数据相关信息 图形数据探索 回归分析 矩阵图分析 相关性分析 数据预处理 k-means聚类 算法简介 算法实现 k-medoids方法 算法简介 算法实现 层次聚类 som方法 实验对比 数据探索 数据初步认识 为研究我国31个省市的城镇居民…

基于数据挖掘的疾病数据可视化分析与预测系统

温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目简介 随着医院信息系统(HIS)在全国各大医院的推广和应用,会有大量和病人相关的临床数据每天在医院中记录,而这些真实的数据随着规模积累的增加&a…

2019疫情海量数据挖掘分析与可视化实战(源码数据见附件)

海量数据挖掘分析与可视化实战报告 课程名称:海量数据挖掘分析与可视化实战 实训学期: 2021-2022学年第二学期 实训时间: 第16周 专 业: 数据科学与大数据技术 班 级: …

数字MIC(es7202 PDM协议)MIC录音声音较小

问题:我司有个项目,android 11 rk3566 的项目,该项目带audio 模块,项目MIC 使用的es7202(ADC),该芯片是一个编码芯片,没有解码功能,该模块的录音的增益已经调到最大,但录入的MIC音量…

麦克风MIC 工作原理以及灵敏度调整

1、先看MIC电路连接 这是个差分输入的例子,MICP2和MICN2是一对差分信号,经过C156的滤波,输入到MIC两端 MIC两引脚分别是到地和供电,上图的R177参数就关系到MIC输入的灵敏度 2、电阻R177影响灵敏度分析 MICBIAS是提供MIC的偏置电压…

WO Mic -免费话筒

原文:https://wolicheng.com/womic/ WO Mic -免费话筒 一、特点 WO Mic 可以把你的手机变成电脑的麦克风。您无需支付一分钱即可购买任何小工具。如果您选择无线传输,它就是移动的。数以百万计的人安装了它,并且每天都在使用它进行通话、录…

麦克风测试指标术语

麦克风测试指标术语 1. dB 2. 谐波 3. THD 4. 灵敏度 5. 频率响应 6. 本底噪音 7. 持续中。。。 1,dB 多数的麦克风技术指标里最基础的就是dB 的单位。分贝是一个相对数,等同于人耳在声音的压力下感到的变化曲线。此外,分贝的变化是很…

浅析硬件“好声音”:麦克风技术指标及选型指南

如今大多数IoT类设备都具有语音唤醒和声控的功能,如天猫精灵、百度音箱等。 这类设备中都集成了麦克风和喇叭等电声器件,其中麦克风用于识别用户的声音,喇叭用于播放设备对用户指令的反应。麦克风的性能是影响语音唤醒率高低的重要因数&…

麦克风概述

麦克风可以将声音的变化通过特定的机制转换为电压或者电流的变化,再交给电路系统进行处理。声音的强度,通过声压表示,对应电压或电流的幅值;声音变化的快慢,则对应电信号的频率。 声压级和距离的关系:其中…

硬件参数 调整 麦克风MIC灵敏度 原理

1、先看MIC电路连接 这是个差分输入的例子,MICP2和MICN2是一对差分信号,经过C156的滤波,输入到MIC两端 MIC两引脚分别是到地和供电,上图的R177参数就关系到MIC输入的灵敏度 2、电阻R177影响灵敏度分析 MICBIAS是提供MIC的偏置电…

浏览器检测麦克风音量

开发直播类的Web应用时在开播前通常需要检测设备是否正常,本文就来介绍一下如果如何做麦克风音量的可视化。 AudioWorklet出现的背景 做这个功能需要用到 Chrome 的 AudioWorklet。 Web Audio API 中的音频处理运行在一个单独的线程,这样才会比较流畅。…

最大信息系数(MIC)

童鞋们觉得文章不错,就麻烦点一下下面人工智能的教程链接吧,然后随便翻阅一下 https://www.captainbed.net/qtlyx MIC(Maximal information coefficient)一个很神奇的东西,源自于2011年发在sicence上的一个论文。 学…

麦克风基础参数

麦克风由Microphone读音翻译的,正确的翻译为微音器,或者称拾音器,传声器。我们的咪芯其实就是一只麦克风,只不过属于半成品。给它加网罩,手柄,开关,导线就成了一支完整的麦克风了。 我们生产的…

mic的灵敏度和声音的大小

今天查看麦克风的一些资料,发现这个博客写得很好,不知道这样转载是否可以。 mic的灵敏度和声音的大小 我对于mic的灵敏度一直无法说出其准确定义的表述。我看过mic的sepc上面都是标注的负的多少dB,比如-42dB。所以我一直认为-30dB的mic的灵…

MIC(最大信息系数)

MIC 我在论文使用MIC来衡量两个基因之间的关联程度,线性或非线性关系,相较于Mutual Information(MI)互信息而言有更高的准确度巴拉巴拉的,按作者的话说总之比其他的方式好。 原文参照: Detecting Novel As…

MIC相关基础知识

一、mic及声音的指标: (1)声音的分贝(dB) 分贝 Decibel 分贝(dB)是一个对数单位(logarithmic unit), 它和很多常见的单位如“米”,“秒”或者“千克”等物理单…

MIC - 最大信息系数

MIC 文章目录 MIC前言MIC介绍MIC库Python实例MIC缺陷参考文章 前言 皮尔逊相关系数即我们通常说的(线性)相关系数,是用来反映两个变量线性相关程度的统计量,变化范围为-1到1。 系数的值为1意味着X和Y可以很好的由直线方程来进行描述,所有的…