社区投稿丨详解车载 TBox 的 MQTT 协议

科技   2024-10-08 11:59   北京  

基本概念

MQTT 全称为消息队列遥测传输协议,是基于 TCP/IP,WebSocket,QUIC 等传输协议之上的应用层协议,采用发布订阅的模式,由于非轮询或周期传输消息,减小了网络带宽,不同重要度的消息采用不同的 QoS 等级,保证重要消息不丢失。

MQTT 协议本身占用资源很小,通常作为客户端部署于各种嵌入式系统内,包括各种传感器、执行器,即可完成消息的订阅和发布。


车联网中的应用

MQTT 协议一般部署在可以联网的 ECU 内,实现远程控制、远程刷写、数据上传、远程诊断、OTA 等功能。

         

 

   远程控制
用户通过手机 APP 下发远程解门锁的请求,该请求以 MQTT 的 topic 发布到云服务器,云服务器根据 topic 名称,将该 topic 发布到车载终端内,车载终端订阅该 topic。
当车辆收到该 topic 后,解析 payload 的内容,将解锁报文通过 CAN 总线发送到门窗控制器,并将解锁结果通过 topic 发布到云服务器,云服务器将 topic 发布到手机 APP,用户即成功执行了远程解锁的动作。

   数据上传

车载终端接受车内 ECU 发送的 CAN 报文,解析所需的信号,按周期将信号打包后,通过指定的 topic 将信号上传到平台。
   远程诊断
云平台通过指定的 topic 下发诊断指令,终端订阅到该 topic,发起向车内 ECU 的诊断请求,例如读取 ECU 的故障码,收到诊断响应后,通过指定 topic 将诊断结果发布到云平台。


技术细节

介绍一下 MQTT 协议的报文格式、端口号、以及相关的概念。

   报文格式

MQTT 报文有固定报头、可变报头、有效载荷 3 个部分。

   固定报头组成
1、报文类型:位于固定报头的第一个字节的高 4 位(bit 7-4),用于标识MQTT报文的类型。MQTT 协议定义了 14 种不同类型的报文,如 CONNECT(连接请求)、CONNACK(连接确认)、PUBLISH(发布消息)、PUBACK(发布确认)等。
2、标志位:位于固定报头的第一个字节的低 4 位(bit 3-0),用于某些特定类型的报文,如 PUBLISH 报文中的 DUP(重复分发标志)、QoS(服务质量等级)、RETAIN(保留标志)等。这些标志位的具体含义取决于报文类型。   
3、剩余长度:紧接着报文类型之后,表示当前报文剩余部分的字节数,包括可变报头和有效载荷。剩余长度字段使用变长编码方案,最小一个字节,最大四个字节。
   可变报头组成

可变报头存在于某些类型的报文中,如 CONNECT、PUBLISH、SUBSCRIBE 等,可变报头的内容根据报文类型的不同而不同,通常包含以下字段:

1、报文标识符:一个两字节的字段,用于标识 MQTT 报文,在需要确认的报文中,如PUBLISH(QoS > 0)、PUBACK、PUBREC、PUBREL、PUBCOMP、SUBSCRIBE、SUBACK、UNSUBSCRIBE、UNSUBACK 等,报文标识符用于匹配请求和响应。

2、其他字段:根据报文类型的不同,可变报头还可能包含其他字段,如 CONNECT 报文中的协议名(Protocol Name)、协议级别(Protocol Level)、连接标志(Connect Flags)和保持连接(Keep Alive)等。

   有效载荷

包含客户端和服务器之间传输的应用数据,不是所有 MQTT 报文都包含有效载荷,只有那些需要传输数据的报文(如 PUBLISH、CONNECT 等)才包含有效载荷。

1、CONNECT 报文的有效载荷:包含客户端标识符(Client Identifier)、遗嘱主题(Will Topic)、遗嘱消息(Will Message)、用户名(User Name)和密码(Password)等字段。

2、其他报文的有效载荷:对于其他类型的报文,如 PUBLISH 报文,有效载荷就是实际要传输的应用消息。


以 CONNECT 报文为例,其报文格式如下:

固定报头:

0x10(报文类型CONNECT)+ 剩余长度(根据有效载荷长度计算)

可变报头:

协议名(Protocol Name):MQTT(UTF-8编码)

协议级别(Protocol Level):0x04(表示MQTT 3.1.1版本)

连接标志(Connect Flags):包含多个标志位,如会话清理标志、遗嘱标志、用户名标志、密码标志等

保持连接(Keep Alive):两次发送数据的最大时间间隔(秒)   

有效载荷:

客户端标识符(Client Identifier)+(可选)遗嘱主题(Will Topic)+(可选)遗嘱消息(Will Message)+(可选)用户名(User Name)+(可选)密码(Password)。


Demo 实操

借助 MQTTX 软件,我们简单实操一下。

1、连接配置:我们这里配置连接到 MQTTX 的测试服务器,当然,实际使用时,一般连接到我们自己的 MQTT 服务器。

连接配置

2、发布消息:我们模拟发布一个解锁的 topic,然后再订阅这个 topic,实际应用中,我们连接到自己的 MQTT 服务器以后,发布 topic 消息,服务器会把该 topic 消息发送到车载终端。

发布解锁topic
点击阅读原文,学习更多 MQTT 相关知识


点击“阅读原文”,了解更多






EMQ中文社区
EMQ 映云科技是全球领先的「云边端」连接与数据平台供应商,通过自主研发的 MQTT 软件,实现物理世界与数字世界间的数据采集、传输、转换、存储、分析与控制。
 最新文章