最后更新:2022-04-16 15:14:07 手机定位技术交流文章
MQTT是一个机器对机器(M2M)/材料联网(IOT)连接协议,目的是一个轻量级分布/订阅电文运输系统。特别有利于要求较小的代码占用空间和(或)在网络能力方面非常重要的远程连接,专门为受限制设备和低带宽、超长或不可靠的网络而建造。。
MQTT 是一个为客户服务架构的分布/订阅模式所建的信息传输协议 。明亮、开放、不复杂、有控制和容易达到这些品质使得它成为广泛应用的极佳解决办法,特别是在机器对机器通信和物联网等有限情况下。
QQTT建立了一个系统,确保信息持续传递,包括信息响应、存储和转播,该机制提供了三种不同程度的 " 质量服务 " 。
| MQTT消息质量 | |
|---|---|
| QoS0 | 只能一次发一次发一次发一次; |
| QoS1 | 视MQTT标准而定,是否在发送后至少启动一次再传送; |
| QoS2 | 发送后, 依赖 MQTT 信息系统只保证一次 。 |
MQTT 协议规定了客户连接服务器、订阅主题、公布主题等机制。
| MQTT方法 | |
|---|---|
| Connect | 等待服务器连接 。 |
| Disconnect | 等待 MQTT 客户端完成任务,然后与服务器终止 TCP/ IP 会话 。 |
| Subscribe | 等待完成订阅。 |
| UnSubscribe | 等待服务器取消客户的一个或多个主题订阅 。 |
| Publish | 在发送信件请求后, MQTT 客户端返回程序线索 。 |
MQTT 协议需要完成客户端和服务器连接, MQTT 协议中有三个身份,在整个通信过程中使用:订户(订阅)、出版商(出版)、代理(印刷)(服务员)发件人和订户都是客户,电文代理是服务器,信息出版商既可以是发件人,也可以是订户。
MQTT 信息分类如下:主题和内容(有效载荷)两部分:
(1) 当订阅者订阅(订阅)时,可被视为通信类型的专题将接收关于该主题的信息(有效载荷)。
(2) 有效载荷,又称电文的内容,系指特别是用户将使用的内容。
| Mqtt 客户请求/回应的步骤 |
|---|
| 公布其他客户可能希望收到的信息; |
| 2. 订阅其他客户的电文; |
| 3. 通知你已撤回或删除申请; |
| 4. 从服务器上拔出插件。 |
| MQTT 服务器请求/回复程序 |
|---|
| 1. 接受客户网络连接; |
| 2. 接受客户提供的应用程序信息; |
| 3. 客户订阅和退款申请得到处理。 |
| 4. 向用户发送应用程序信息。 |
当你读过简介后 我会教你如何安装MQTT软件包一串十六进制,并通过一个捆绑的程序连接到我们的服务器,实现主题订阅和发布。我将不详细讨论以下各点,但将侧重于几个有充分根据的朋友。别这么残忍,因为我花了一天一小时的时间 来起草这个小组的规则,还有一个星期的时间在肝脏里。谢谢你的帮助。。
下面就是我们三个法医小组需要与MQTT联系我们的MQTT服务器就是这样运作的。
| 鉴权三元组 | |
|---|---|
| CLIENTID | 111|hmvcfu |
| USERNAME | hmvcfu |
| PASSWORD | a02d6361531c2dae941d5b022982d944 |
| Bit | 描述 | HEX | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 固定报头 | |||||||||||
| byte1 | 固定报头 | 0x10 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | |
| 剩余长度 | |||||||||||
| byte2 | Length MSB | 0x40 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
| byte3 | Length LSB | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 协议名称 | |||||||||||
| byte4 | 'M' | 0x4D | 0 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | |
| byte5 | 'Q' | 0x51 | 0 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | |
| byte6 | 'T' | 0x54 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | |
| byte7 | 'T' | 0x54 | 0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | |
| 协议级别 | |||||||||||
| byte8 | 四(4)级 | 0x04 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | |
| 连接连接的旗帜 | |||||||||||
| User Name Flag | Password Flag | Will Retain | Will QoS | Will Flag | Clean Session | Reserved | |||||
| byte9 | 连接标志位 | 0xC0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
| 保活时间 | |||||||||||
| byte10 | Length MSB | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| byte11 | Length LSB | 0x78 | 0 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | |
| 客户端ID长度 | |||||||||||
| byte12 | Length MSB | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| byte13 | Length LSB | 0x0A | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | |
| 客户端ID数据部分 | |||||||||||
| byte31 | 如果长度不为零, 这是数据部分 。 | 0x31 0x31 0x31 0x7C 0x68 0x6D 0x76 0x63 0x66 0x75 0x00 0x06 0x68 0x6D 0x76 0x63 0x66 0x75 | |||||||||
| 用户名长度 | |||||||||||
| byte32 | Length MSB | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| byte33 | Length LSB | 0x06 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | |
| 用户名数据部分 | |||||||||||
| byte39 | 如果长度不为零, 这是数据部分 。 | 0x68 0x6D 0x76 0x63 0x66 0x75 | |||||||||
| 密码长度 | |||||||||||
| byte40 | Length MSB | 00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | |
| byte41 | Length LSB | 20 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | |
| 密码数据部分 | |||||||||||
| byte69 | 如果长度不为零, 这是数据部分 。 | 0x61 0x30 0x32 0x64 0x36 0x33 0x36 0x31 0x35 0x33 0x31 0x63 0x32 0x64 0x61 0x65 0x39 0x34 0x31 0x64 0x35 0x62 0x30 0x32 0x32 0x39 0x38 0x32 0x64 0x39 0x34 0x34 | |||||||||
在我们订阅该主题之前,我们需要构建一个订阅主题(Topic),以便当订阅者订阅该主题(订阅)时,他将得到关于该主题(有效载荷)的信息。
| 订阅主题 | |
|---|---|
| 主题名称 | sys/hmvcfu/control |
| Bit | 描述 | HEX | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 固定报头 | ||||||||||||
| byte1 | 固定报头 | 82 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| 变量头长+主题名称长度+服务级别字节=剩余长度 | ||||||||||||
| byte2 | Length | 17 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| 变量头长 = 主题名称长度,以字节为字节+主题名称长度,以字节为字节 | ||||||||||||
| byte3 | Length MSB | 0x00 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| byte4 | Length LSB | 0x14 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
| 主题名称长度 | ||||||||||||
| byte5 | Length MSB | 0x00 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| byte6 | Length LSB | 0x12 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ||
| byte24 | 如果长度不为零, 这是数据部分 。 | 0x73 0x79 0x73 0x2F 0x68 0x6D 0x76 0x63 0x66 0x75 0x2F 0x63 0x6F 0x6E 0x74 0x72 0x6F 0x6C | ||||||||||
| 服务质量等级 | ||||||||||||
| byte25 | 服务质量等级 | 0x00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ||
在公布该主题之前,我们必须首先指定一个出版主题(Topic),在包装密封后,信息内容(有效载荷)将送交订阅该主题的订阅者。
| 发布主题 | |
|---|---|
| 主题名称 | sys/hmvcfu/post |
| 数据包 | {“msg”:{“paramdata”:[{“temp”:20,“humi”:98}]}} |
| Bit | 描述 | HEX | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 固定报头 | ||||||||||||
| byte1 | 固定报头 | 0x30 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||
| 主题名称 长度+包件长度 = 剩余长度 | ||||||||||||
| byte2 | Length | 0x3E | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | ||
| 主题名称长度 | ||||||||||||
| byte3 | Length MSB | 0x30 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | ||
| byte4 | Length LSB | 0x07 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | ||
| 主题名称 | ||||||||||||
| byte19 | 紧跟着的是主题名称 | 0x73 0x79 0x73 0x2F 0x68 0x6D 0x76 0x63 0x66 0x75 0x2F 0x70 0x6F 0x73 0x74 | ||||||||||
| 数据包 | ||||||||||||
| byte64 | 紧跟着的是数据包 | 0x7B 0x22 0x6D 0x73 0x67 0x22 0x3A 0x7B 0x22 0x70 0x61 0x72 0x61 0x6D 0x64 0x61 0x74 0x61 0x22 0x3A 0x5B 0x7B 0x22 0x74 0x65 0x6D 0x70 0x22 0x3A 0x32 0x30 0x2C 0x22 0x68 0x75 0x6D 0x69 0x22 0x3A 0x39 0x38 0x7D 0x5D 0x7D 0x7D | ||||||||||
这是我们将要使用的 MQTT 服务器。 这是由 EMQ 建立的官方的公共 MQTT 服务器, 可以自由使用 。
| MQTT服务器 | |
|---|---|
| IP地址 | broker-cn.emqx.io |
| 端口号 | 1883 |
为了连接到 MQTT 服务器, 我们打开 MQTT.fx 工具, 输入 IP 地址, 以及三组法医( 事实上, 它可能没有连接到这三组, 而是模仿三个组的存在 ) 。










模仿一个视频机, 我们可以通过网络调试辅助工具传输十六进制数据, 将服务器连接起来。




本文由 在线网速测试 整理编辑,转载请注明出处。