当前位置: 首页 > news >正文

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

目录

概述

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 第一阶段:设备发现与连接

在这一阶段,双方建立物理链路,并确定角色。

  1. 广播与扫描:作为GATT服务器的设备(如传感器)会周期性向外广播自己的存在和基本信息。作为GATT客户端的设备(如手机)则主动扫描周围的广播。

  2. 发起连接:客户端选定目标服务器后,向其发起连接请求。连接成功后,一个双向通信的通道便建立起来,此时服务器会暂停广播。

4.2.2 第二阶段:服务与特征发现

连接建立后,客户端第一件事就是“探索”服务器能提供什么。

  1. 发现所有主服务:客户端向服务器发送Discover All Primary Services请求。服务器回复一个服务列表,每个服务由其唯一的UUID标识。

  2. 发现服务的特征:客户端对感兴趣的服务,发送Discover Characteristics请求。服务器回复该服务下所有的特征列表。这是最关键的一步,客户端将获取到每个特征的:

    • 句柄:特征在属性表中的唯一地址,后续所有操作都基于它。

    • UUID:标识特征类型(如心率测量值)。

    • 属性(Properties):定义了客户端能对此特征做什么(如读、写、通知)。

    • 权限(Permissions):定义了操作的安全要求(如是否需要加密)。

4.2.3 第三阶段:数据交互(核心)

探索完毕后,真正的数据交换开始,主要有两种模式:

1)模式一:客户端主动发起

  • 读取特征值:客户端向指定特征的值句柄发送Read Request。服务器回复Read Response,其中包含特征值。

  • 写入特征值:客户端向指定特征的值句柄发送Write Request(要求确认)或Write Command(无需确认)。服务器会根据请求类型和权限决定是否执行并回复。

2)模式二:服务器主动推送

这是实现传感器数据实时上传的关键。但它需要客户端先完成订阅

  1. 客户端启用通知/指示:客户端找到目标特征下的CCCD描述符,并向其写入0x0001(启用通知)或0x0002(启用指示)。

  2. 服务器主动推送:一旦订阅成功,当特征值变化或满足条件时,服务器无需客户端询问,就会主动向客户端发送Notification(单向通知)或Indication(需客户端回复确认的指示)。

3)两种模式的交互流程对比

交互模式发起方通信方式典型应用场景
客户端读写客户端请求-响应读取设备名称、写入配置参数
服务器通知服务器主动推送心率、温度等传感器数据的实时上传
http://www.cnnetsun.cn/news/1696751.html

相关文章:

  • 治35+焦虑汇总版
  • K8S存储管理:Volume、PV/PVC与StorageClass详解
  • 华为:渐进解锁细粒度视觉感知
  • 深度拆解 Linux Ext 系列文件系统:从硬件底层到软硬链接全流程
  • AI算力芯片黑马!“图灵进化”完成新一轮数千万级别融资
  • Android compose 可见性动画未执行问题修复
  • 告别命令行手敲:用Python脚本自动化你的第一个OpenFOAM腔体流动模拟
  • Ubuntu 16.04 图形界面循环登录问题排查指南:从驱动兼容到内核版本适配
  • python实现分离不同人声、wespeaker
  • RANSAC算法
  • 计算机毕业设计:Python新能源车型数据洞察与情感推荐引擎 Django框架 snowNLP 协同过滤推荐算法 requests爬虫 可视化(建议收藏)✅
  • 避坑指南:手把手教你用Java生成定制化词云图(解决中文乱码、背景图加载问题)
  • Python 3 CGI 编程
  • DOM EventListener
  • 别再死磕梯形图了!写给工控新手的ST语言入门指南(附常用指令速查表)
  • 别再用copy /b了!三种制作哥斯拉图片马的保姆级对比(含010 Editor实操)
  • B站缓存视频合并工具:让离线内容重获完整价值
  • Iron Beam高能激光武器系统
  • Gemma 4:Google扔出的开源AI重磅炸弹,手机也能跑的ChatGPT级大脑
  • VS2019项目重构实战:从命名空间到解决方案的全面重命名指南
  • 鸿蒙Flutter混合开发:如何优雅地实现离线TTS/STT的多语言动态切换?
  • 16 指挥AI写数据库SQL代码:增删改查与存储过程实现
  • 大车间降温新选择:蒸发冷省电空调凭关键词优势脱颖而出
  • javaweb小区车辆停车场车位预约管理系统 可视化
  • 从零设计一个AXI Master:手把手教你为Xilinx MIG DDR4控制器编写自定义测试逻辑
  • 宾州大学让AI学会“记忆管理“:多智能体协作破解长期对话难题
  • 残差缩放块改进YOLOv26可学习权重自适应特征融合双重突破
  • 技术文章大纲:用Anaconda驯服AI开发流
  • Canape实战指南:XCP工程配置与调试(一)
  • 算法解析 | 深入EGO Planner:无ESDF的实时避障与轨迹优化