BLE设备角色
-
BLE角色
对于一个BLE设备,当和其他蓝牙设备通信或者加入一个BLE网络时,其可能有四个角色:
-
Broadcaster: 又称为Advertiser,周期性的向周围设备广播数据,
-
Observer:又称为Scanner,可以监听广播数据或者搜索周围设备,
-
Central: 又称为master,负责扫描设备并发起建立请求,在建立连接后变成master
-
Peripheral: 可称为slave, 负责广播的并接收连接请求的设备在建立连接后称为slave
这些角色是链路层定义的,是根据设备是否建立连接来划分分的,可以将这四个类型的设备逻辑的划分为两组:
-
advertiser和scanner
-
master和slave
advertiser 和 scanner属于广播阶段的概念,即在建立连接之前设备角色。master 和slave属于建立连接之后的概念,一旦建立连接,scanner角色变为master,advertiser变为slave。
例如一个心率感应器(Heart rate sensor)和手机连接:
心率感应器HRS(Heart rate sensor)发送广播数据,当手机扫描时,能发现心率感应器,并与其建立连接,那么建立连接后,心率感应器的角色是slave,而手机的角色是maser。
但是有的设备做法相反,例如小米手机和小米手环,在他们的实现中,则是由手机发送广播,手环负责扫描周围设备,来建立连接,这种情况,手机作为slave,而手环作为master。
2. Server 和client
根据应用场景的需求,一个设备可以是master,也可以是slave或者二者兼备。初始化建立连接的设备称为master,负责广播的并接收连接请求的设备称为slave
通过上面的例子可以看到,在建立连接后,支持HRS的手环提供了检测心率的功能,称其为server,因为其提供了某种服务,而手机仅仅是将server端的功能获取并展现出来,称其为client。于是对于BLE设备,依据是否提供服务,可以将这个设备分为是server还是client。
Server 和client是ATT/GATT层定义的概念,ATT采用的是client/server模式的交互方式,Client从server端请求数据,server将数据发送给client。
Master和slaver是相对连接而言,client和server是独立于master和slave的概念,每个BLE设备有可能是client或者server或者二者兼备。
举例如下:
一个支持BLE的灯可以使用手机APP通过BLE协议来控制,手机负责发现灯并主动发起建立连接,灯的角色是Peripheral,手机的角色是Central。
而灯提供了亮度和色彩控制服务,可以使用手机来调节,因此灯是一个服务的提供者(Server)角色,而手机是响应的client。
3. 状态转换
BLE定义的角色,可以相互转换,于是有一个或者多个状态机(BLE4.0仅支持一个状态机),每个状态机可能有五种状态。
Standby:没有任何活动,即不发送数据也不接收数据,
Advertising:发送广播数据
Scanning:监听广播数据或者主动扫描周围设备
Initiating:接到广播数据后,主动发起连接(CONNECT_REQ),由Scanning的角色发起。
Connection:master和slave建立连接,而后两个设备在数据通道上通信,而不再使用广播和扫描的方式。