1. 蓝牙设备角色和状态简介
蓝牙设备在连接过程中扮演不同角色,分为经典蓝牙和低功耗蓝牙(BLE)两类。
- 经典蓝牙中,主设备(Master)发起连接并控制通信,从设备(Slave)响应请求;BLE中,中心设备(Central)扫描并连接外围设备(Peripheral)。
- GATT模型中,服务器(Server)提供数据,客户端(Client)访问数据。通常,中心设备作为GATT客户端,外围设备作为服务器。双模设备(如手机)在不同场景下可切换角色。
蓝牙连接过程中的角色:
(发现者)Observer —> Master —> Central --> Client
(广播者)Advertiser —> slaver —>Perpheral --> Server
连接过程中两个角色对应的状态:
- Standby 准备、Aderversing 广播、Scaning 监听
- Intiating 发起连接 、Connect 连接
2. 设备角色关系详解 (Server/Client, Central/Peripheral, Master/Slave)
这些术语描述了蓝牙设备在连接建立和通信过程中扮演的逻辑角色。它们分属不同的层次,但相互关联:
-
2.1 经典蓝牙中的角色:
- 主设备(Master): 负责发起连接、控制连接时序(跳频序列)、管理微微网中的通信。一个主设备可以连接多个从设备(最多7个活跃从设备)。
- 从设备(Slave): 接受主设备发起的连接,响应主设备的请求。它不能主动发起连接,只能与连接它的主设备通信。
- 关系: 经典蓝牙的连接是点对多点的星形拓扑,一个主设备对应一个或多个从设备,形成一个“微微网”。主设备绝对控制通信的时机。
-
2.2 低功耗蓝牙中的角色:
- 中心设备(Central): 功能类似于经典蓝牙中的主设备。它主动扫描寻找可用的外围设备,并负责发起连接请求。连接建立后,它通常作为通信的发起方,向外围设备请求数据或发送命令。
- 外围设备(Peripheral): 功能类似于经典蓝牙中的从设备。它广播自身的存在(发送广播包,包含服务信息),等待中心设备来连接它。连接建立后,它主要响应中心设备的请求或向中心设备发送通知/指示。
- 关系: BLE的连接也是点对点的(一个中心连接一个外围),但中心设备可以同时连接多个外围设备(形成星形拓扑)。外围设备广播,中心设备扫描并选择连接哪个外围设备。
比如手机和手环进行BLE连接,手机就是作为Central,手环作为Peripheral。那么对于Broadcaster角色,大家应该听过iBeacon,它就是作为该角色的功能存在的,只能接受到他的广播包,不需要连接,因为它的信息都在广播包中。那么对应iBeacon使用的主设备就是Observer了,只需要扫描到广播包,不需要连接。
- 2.3 GATT 模型中的角色 (在已建立的BLE连接上):
- GATT 服务器(Server): 这是数据提供者。它存储数据并通过定义好的“服务”和“特征”向外暴露数据接口。例如,一个心率监测器(作为外围设备)也是一个GATT服务器,它存储并提供心率数据。
- GATT 客户端(Client): 这是数据访问者/消费者。它发现GATT服务器提供的服务,读取或写入服务器上的特征值,或者订阅服务器发送的通知/指示。例如,手机上的健身APP(作为中心设备)就是一个GATT客户端,它读取心率监测器(服务器)的数据。
- 关系: GATT角色是在BLE连接建立之后定义的,并且依赖于中心/外围角色:
- 一个中心设备在连接后几乎总是充当GATT客户端。
- 一个外围设备在连接后几乎总是充当GATT服务器。
- 这个关系非常固定:客户端(中心)请求数据,服务器(外围)提供数据。
总结蓝牙设备角色关键关系:
层级/术语 | 角色1 | 角色2 | 主要职责 | 发起连接? | 广播? | 典型关系/拓扑 |
---|---|---|---|---|---|---|
经典蓝牙 | 主设备 | 从设备 | 主:控制连接和通信时序 从:响应主设备请求 | 主发起 | 否 | 1主 -> 多从 (微微网) |
低功耗蓝牙 | 中心设备 | 外围设备 | 中心:扫描、发起连接、请求数据 外围:广播、等待连接、提供数据 | 中心发起 | 外围广播 | 1中心 -> 多外围 (星形) |
GATT (BLE) | GATT 客户端 | GATT 服务器 | 客户端:发现服务、读/写/订阅数据 服务器:存储数据、定义服务/特征、响应请求/发送通知 | 不适用 | 不适用 | 中心设备 通常是 GATT 客户端 外围设备 通常是 GATT 服务器 |
重要说明:
- Master/Slave vs. Central/Peripheral: Central/Peripheral 是 BLE 对 Master/Slave 概念的重新命名,其核心思想(谁发起连接、谁控制通信)是一致的。Central=Master, Peripheral=Slave。
- Server/Client vs. Central/Peripheral: Server/Client (GATT) 定义的是数据交互模型,发生在连接建立之后。Central/Peripheral 定义的是连接建立模型。在BLE中,它们有很强的关联性(Central->Client, Peripheral->Server),但概念上属于不同层面。
central/peripheral和client/server没有对应关系,central不等于client, peipheral也不等于server。central/peripheral是区分连接角色的, client/server是区分数据的请求和发送角色的。peripheral角色既可以作为client也可以作为server, 同理central角色。
- 双模设备的角色: 双模设备(如手机)可以在不同场景下扮演不同角色:
- 当连接经典蓝牙音箱时:手机是 Master。
- 当连接BLE手环时:手机是 Central 和 GATT Client。
- 当作为热点或共享文件时(通过经典蓝牙):手机也可以作为 Slave (等待其他主设备连接) 和 Server (提供文件服务)。