目录
概述
1 GATT服务器架构
2 核心组成部分及功能介绍
3 工作原理:服务器与客户端的互动
3.1 工作原理介绍
3.2 工作流程
4 GATT服务器和客户端通信流程
4.1 通信流程框图
4.2 流程分解
4.2.1 第一阶段:设备发现与连接
4.2.2 第二阶段:服务与特征发现
4.2.3 第三阶段:数据交互(核心)
概述
GATT服务器是蓝牙低功耗(BLE)通信中的核心数据提供方,简单理解,它是一个包含结构化数据的数据库。当两个BLE设备连接后,扮演GATT服务器角色的设备负责存储并向客户端(Client)提供数据。
1 GATT服务器架构
其数据采用一个清晰的分层结构进行组织:

2 核心组成部分及功能介绍
1) 服务(Service)
一个或多个相关功能的集合。例如,“心率监测服务”就是一个完整的服务单元。每个服务由一个唯一的UUID(通用唯一标识符)来标识。
2) 特征(Characteristic)
服务中数据交互的实际载体,是最常被读写的基本单元。例如,在“心率服务”中,“心率测量值”就是一个特征。一个特征包含多个属性,例如:
-
值(Value):特征的实际数据。
-
声明(Declaration):描述该特征的数据类型和权限。
-
客户端特征配置描述符(CCCD):一个非常关键的描述符,客户端通过写入这个描述符来订阅或取消订阅服务器的通知(Notification)或指示(Indication)。
3) 属性(Attribute)
存储数据的最小单位。服务、特征、描述符在底层都是以属性的形式存储在属性表中。每个属性由句柄(Handle,唯一地址)、类型(UUID)、值和权限组成。
3 工作原理:服务器与客户端的互动
3.1 工作原理介绍
GATT服务器和客户端的角色是动态的,取决于数据流向。在同一个连接中,一个设备可以同时作为某些服务的服务器和另一些服务的客户端。
| GATT 服务器 | 存储数据,响应读取(Read) 和写入(Write) 请求,主动向客户端推送数据(通知/指示)。 | 心率手环、温湿度传感器、智能灯泡 |
| GATT 客户端 | 发现服务,向服务器发起读取/写入请求,接收服务器推送的数据。 | 智能手机、平板电脑 |
3.2 工作流程
1) 客户端发现服务
连接建立后,客户端首先向服务器请求其属性表,以发现有哪些可用的服务和特征。
2) 客户端读写数据
客户端根据需求,向特征值(通过其句柄)发起读取或写入请求,服务器根据该特征的权限决定是否响应。
3) 服务器主动推送(关键机制)
这是服务器向客户端发送实时数据的常用方式,有两种模式:
-
通知(Notification):服务器单向发送,不要求客户端确认。适用于数据丢失影响不大的场景(如实时心率)。
-
指示(Indication):服务器发送后,必须等待客户端确认。适用于必须可靠送达的数据。
-
要实现推送,客户端必须先写入CCCD来启用订阅。
4 GATT服务器和客户端通信流程
4.1 通信流程框图
GATT服务器与客户端的通信流程是一个精心设计的单向请求-响应和订阅推送相结合的过程。为了让你快速掌握全貌,下图概括了从设备连接到数据交互的完整通信流程:

4.2 流程分解
4.2.1 第一阶段:设备发现与连接
在这一阶段,双方建立物理链路,并确定角色。
广播与扫描:作为 GATT服务器的设备(如传感器)会周期性向外广播自己的存在和基本信息。作为 GATT客户端的设备(如手机)则主动扫描周围的广播。
发起连接:客户端选定目标服务器后,向其发起连接请求。连接成功后,一个双向通信的通道便建立起来,此时服务器会暂停广播。
4.2.2 第二阶段:服务与特征发现
连接建立后,客户端第一件事就是“探索”服务器能提供什么。
发现所有主服务:客户端向服务器发送 Discover All Primary Services 请求。服务器回复一个服务列表,每个服务由其唯一的UUID标识。
发现服务的特征:客户端对感兴趣的服务,发送 Discover Characteristics 请求。服务器回复该服务下所有的特征列表。这是最关键的一步,客户端将获取到每个特征的:
-
句柄:特征在属性表中的唯一地址,后续所有操作都基于它。
-
UUID:标识特征类型(如心率测量值)。
-
属性(Properties):定义了客户端能对此特征做什么(如读、写、通知)。
-
权限(Permissions):定义了操作的安全要求(如是否需要加密)。
4.2.3 第三阶段:数据交互(核心)
探索完毕后,真正的数据交换开始,主要有两种模式:
1) 模式一:客户端主动发起
-
读取特征值:客户端向指定特征的值句柄发送 Read Request。服务器回复 Read Response,其中包含特征值。
-
写入特征值:客户端向指定特征的值句柄发送 Write Request(要求确认)或 Write Command(无需确认)。服务器会根据请求类型和权限决定是否执行并回复。
2) 模式二:服务器主动推送
这是实现传感器数据实时上传的关键。但它需要客户端先完成订阅。
客户端启用通知/指示:客户端找到目标特征下的 CCCD 描述符,并向其写入 0x0001 (启用通知)或 0x0002 (启用指示)。
服务器主动推送:一旦订阅成功,当特征值变化或满足条件时,服务器无需客户端询问,就会主动向客户端发送 Notification (单向通知)或 Indication (需客户端回复确认的指示)。
3) 两种模式的交互流程对比
| 客户端读写 | 客户端 | 请求-响应 | 读取设备名称、写入配置参数 |
| 服务器通知 | 服务器 | 主动推送 | 心率、温度等传感器数据的实时上传 |
网硕互联帮助中心





评论前必须登录!
注册