云计算百科
云计算领域专业知识百科平台

BLE协议栈GATT服务器详细介绍

目录

概述

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) 两种模式的交互流程对比

    交互模式发起方通信方式典型应用场景
    客户端读写 客户端 请求-响应 读取设备名称、写入配置参数
    服务器通知 服务器 主动推送 心率、温度等传感器数据的实时上传
    赞(0)
    未经允许不得转载:网硕互联帮助中心 » BLE协议栈GATT服务器详细介绍
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!