首先,罗列一下蓝牙工作的四种模式:
从机模式: Peripheral
广播,等待被扫描,可连接
在连接中作从机
代表例子:心率带,智能手环手表主机模式: Central
无广播,可扫描周围广播设备,可以要求与广播设备的连接。
在连接中做主机
代表例子: 手机广播模式 Broadcaster
广播,不可连接
代表例子: 温控器,beacon设备观察者模式 Observer
无广播,可扫描周围广播设备,不能要求与广播设备的连接
例子: 智能网关
通常情况下我们设计的产品通常是Peripheral模式和手机连接(手机作为master模式),所以下面以peripheral为重点分析。
如上图所示,ATT层定义了两个概念,Client和Server。Server通常建立在Peripheral设备上,Client通常建立在Mater上。简单来说,Peripheral模式建立了一个小型数据库,Client可以通过ATT指令访问数据库进行数据读写。
关键问题来了,小型数据库的数据是怎么定义的?
我们来看图说话,profile是一个大类,SIG有定义几个标准的大类profile,比如心率,防丢失,靠近检测,通常一个peripheral设备可以有一个或者多个profile,取决于应用。
大类定好了再来一层一层细化,profile下面又分为不同的Service,每一个服务里面对应一个可控的对象,每一个对象我们起一个名字叫Characteristic,每一个Characteristic下面包含对该对象的说明,数据和属性(只读或者只写)。
如上图所说,我们拿心率profile为例,一个标准的Heart rate Profile(SIG规定)包含两个service: 一个用于手机主端读取service数据(从机读取心率数值,写入该service,这样主端可以在任何时候去读取),一个service用于对该心率设备进行说明。
最后做个总结,我们把Profile放在GATT 层,用户通过ATT指令进行访问读写,让整个两个不同模式的设备进行数据交互。