# 1、gatt基础
1、GATT 概述
GATT 是建立在 ATT(Attribute Protocol)之上的高层协议,用于在BLE设备之间传输数据。
GATT 定义了数据的组织方式(如服务、特征值等)以及设备之间的通信规则。
GATT 采用客户端-服务器模型:
GATT 服务器:存储数据并提供数据访问(如传感器设备)。
GATT 客户端:向服务器请求数据或发送数据(如手机或中央设备)。2、GATT 数据结构
GATT 数据以层次化的方式组织,主要包括以下元素:
服务(Service):
一个服务是相关功能的集合,包含一个或多个特征值。
每个服务由一个唯一的 UUID(通用唯一标识符)标识。
例如,心率服务(Heart Rate Service)的 UUID 是 0x180D。
特征值(Characteristic):
特征值是服务中的具体数据项,包含一个值和描述其属性的元数据。
每个特征值也有一个唯一的 UUID。
例如,心率测量特征值(Heart Rate Measurement Characteristic)的 UUID 是 0x2A37。
描述符(Descriptor):
描述符用于描述特征值的附加信息,例如通知使能(Client Characteristic Configuration Descriptor, CCCD)。
属性(Attribute):
GATT 数据的最小单位,包含一个句柄(Handle)、UUID、值和权限。
- 3、GATT 操作(GATT 客户端可以通过以下操作与服务器交互)
读取(Read):客户端从服务器读取特征值或描述符的值。
写入(Write):客户端向服务器写入特征值或描述符的值。
通知(Notify):服务器主动向客户端发送数据,客户端无需确认。
指示(Indicate):服务器主动向客户端发送数据,客户端需要确认。
发现(Discover):客户端发现服务器上的服务、特征值和描述符。
- 4、GATT 连接过程(通常包括以下步骤)
设备发现:客户端通过扫描发现附近的BLE设备。
建立连接:客户端与目标设备建立连接。
服务发现:客户端发现服务器上的服务。
特征值发现:客户端发现服务中的特征值。
数据交互:客户端通过读取、写入、通知或指示与服务器交互数据。
# 2、mqtt基础
- 1、 MQTT 概述
MQTT 是一种基于客户端-服务器架构的协议,采用发布/订阅模式。
设计目标:轻量、高效、低带宽占用,适合资源受限的设备。
主要应用场景:物联网、传感器网络、移动应用、智能家居等。
- 2、MQTT 核心概念
客户端(Client):
发布或订阅消息的设备或应用程序。
可以是传感器、手机、服务器等。
服务器(Broker):
负责接收客户端发布的消息,并将其转发给订阅了相关主题的客户端。
主题(Topic):
消息的分类标签,采用分层结构(如 home/livingroom/temperature)。
客户端通过订阅主题来接收相关消息。
消息(Message):
客户端发布的数据,包含主题和有效载荷(Payload)。
QoS(Quality of Service):
定义消息传递的服务质量等级,分为 0、1、2 三个级别。
保留消息(Retained Message):
服务器会保存最后一条发布到某个主题的消息,新订阅者会立即收到该消息。
遗嘱消息(Last Will and Testament, LWT):
客户端意外断开时,服务器会发布预先设置的遗嘱消息。
- 3.、MQTT 连接过程
1.建立 TCP 连接:客户端与服务器建立 TCP 连接(默认端口 1883,加密端口 8883)。
2.发送 CONNECT 报文:客户端发送 CONNECT 报文,包含客户端 ID、用户名、密码等信息。
3.服务器响应 CONNACK:服务器验证客户端信息后,返回 CONNACK 报文,确认连接成功。
4.发布/订阅消息:客户端可以发布消息或订阅主题。
5.保持连接:客户端通过定期发送 PINGREQ 报文保持连接。
6.断开连接:客户端发送 DISCONNECT 报文,断开连接。
- 4、MQTT 报文类型
CONNECT:客户端请求连接到服务器。
CONNACK:服务器确认连接。
PUBLISH:发布消息。
PUBACK:确认收到 QoS 1 的消息。
PUBREC:确认收到 QoS 2 的消息(第一步)。
PUBREL:确认收到 QoS 2 的消息(第二步)。
PUBCOMP:完成 QoS 2 的消息传递。
SUBSCRIBE:订阅主题。
SUBACK:确认订阅。
UNSUBSCRIBE:取消订阅。
UNSUBACK:确认取消订阅。
PINGREQ:客户端发送心跳请求。
PINGRESP:服务器响应心跳请求。
DISCONNECT:客户端断开连接。
- 5、QoS 服务质量
QoS 0:最多一次(At most once),消息可能丢失。
QoS 1:至少一次(At least once),消息可能重复。
QoS 2:恰好一次(Exactly once),消息不丢失且不重复。
# 3、mqtt和gatt 的异同点
# 相同点
1、物联网应用:
均广泛用于物联网(IoT)场景,支持设备间的数据传输。2、低功耗设计:
针对资源受限的设备(如传感器、可穿戴设备)优化,强调低功耗。3、异步通信:
支持非实时或事件驱动的数据传输模式。
# 核心差异
特性 | MQTT | GATT |
---|---|---|
协议层级 | 应用层协议(基于 TCP/IP) | 蓝牙低功耗(BLE)协议栈的一部分 |
通信模型 | 发布/订阅(Pub-Sub)模型 | 客户端-服务器(Client-Server)模型 |
连接方式 | 依赖 MQTT Broker(代理服务器) | 直接通过蓝牙连接(点对点) |
传输距离 | 支持远程通信(通过互联网) | 短距离(蓝牙范围,通常 <100 米) |
数据格式 | 灵活(支持任意二进制或文本数据) | 结构化数据(基于 BLE 的 Attribute) |
典型应用场景 | 远程监控、云端设备管理 | 近场设备交互(如手机与智能手表) |
协议依赖 | 需要 IP 网络(Wi-Fi/蜂窝网络等) | 依赖蓝牙协议栈(无需 IP 网络) |
安全性 | 支持 TLS/SSL 加密 | 依赖蓝牙的配对和加密机制 |
标准化组织 | OASIS | Bluetooth SIG |
# 适用场景选择
1、选择 MQTT 的情况:
需要跨地域、跨网络的设备通信(如远程传感器上报数据)。
多对多通信(多个设备订阅同一主题)。
需要与云端服务(如 AWS IoT、Azure IoT)集成。2、选择 GATT 的情况:
短距离点对点通信(如手机控制蓝牙耳机)。
低功耗设备(如电池供电的传感器)。
无需互联网连接的本地交互场景。
# 技术细节对比
1、MQTT 核心概念:
主题(Topic):设备通过订阅主题接收消息。
QoS(服务质量):0/1/2 三种消息可靠性级别。
Broker:中心化的消息代理(如 Mosquitto、EMQX)。2、GATT 核心概念:
Service(服务):定义设备功能(如心率监测服务)。
Characteristic(特征):具体的数据属性(如心率值)。
UUID:唯一标识服务和特征。
# 总结
MQTT 是互联网场景下的轻量级消息协议,适合需要远程、多设备协作的物联网系统。
GATT 是蓝牙近场通信的核心协议,适合低功耗、短距离的本地设备交互。
根据项目需求(距离、网络环境、设备类型)选择合适的协议,也可结合两者(例如:BLE 设备通过网关使用 MQTT 上传数据到云端)。
# 4、OEM 和 ODM 的区别
1、OEM(Original Equipment Manufacturer):
OEM 是指原始设备制造商,指的是一家公司设计并制造产品,然后将其品牌和设计授权给另一家公司使用。2、ODM(Original Design Manufacturer):
ODM 是指原始设计制造商,指的是一家公司设计产品,然后将其设计方案和制造流程授权给另一家公司使用。
说直白点就是:OEM——我设计好产品后,找代加工厂按照我的(设计图纸、技术要求)进行加工生产,生产出来的产品贴上我的品牌商标;ODM——我把我的要求告诉代加工厂后,代加工厂根据我的要求自行设计出图纸,进而进行加工生产,生产出来的产品贴上我的品牌商标。
区别还是很明显的:OEM是委托方提供设计图纸,由代工方生产;ODM是委托方不提供设计图纸,只提要求,由代工方完成从设计到生产的过程。
举个具体案例:某新锐美妆品牌要推出洁面仪,如果选择OEM模式,需要自己组建团队设计外观结构、选定马达型号、确定震动频率等技术参数,再找工厂开模生产。而选择ODM模式,可以直接从工厂现有设计方案里挑选成熟产品,最快两周就能完成包装设计上市销售。
两种模式的核心区别在于知识产权归属。OEM模式下设计专利归品牌方,工厂未经允许不得将设计用于其他客户。ODM模式下设计方案归工厂所有,可能出现“一鱼多吃”现象——同一款洁面仪可能同时出现在A品牌的直播间和B品牌的线下专柜,只是换了颜色和logo。
米家相关 →