个人理解中的蓝牙:蓝牙的应用场景很广泛,也发展了很多年了,蓝牙包含经典蓝牙和低功耗蓝牙,两个可以说是不是同一个东西,低功耗蓝牙是从蓝牙4.0后发展而来的,简称为BLE。在平常使用中,像听音乐(A2DP)打电话(HFP)这种对功耗要求较高的服务都在经典蓝牙中,像GATT这种服务,一般应用在低功耗设备中。

GAP

Generic Access Profile(通用访问规范),用于提供蓝牙设备的通用访问功能,包括设备发现、连接、鉴权、服务发现等等。
GAP规定了蓝牙广播双方角色,其中主要的是两个:外围设备peripheral和中心设备central
外围设备:这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如小米手环。
中心设备:中心设备相对比较强大,用来连接其他外围设备。例如手机等。

GATT

GATT 是脱胎于ATT ,ATT是Attribute Protocol Specification 属性规范协议,注意ATT是协议,而GATT是规范,两者不同点在于ATT规定了数据格式,而GATT则是按照ATT的格式将具体数据填充进去。

通信方式

GATT采用服务器与客户端的通信方式,GATT 规定了蓝牙设备双方传输数据时的通信规则和数据格式,通信双方以C/S模式进行通信,何为C/S那 就是 server 和client 。其中包含GATT配置的设备作为server(GATT服务端)外设peripheral,另外读取它信息的设备叫做client(GATT客户端)也叫做中心设备(master)。(注意一个gatt的外设只能连接一个master)一个中心设备(例如手机)却可以连接多个外设。
CS.png

通信间隔

当两个设备建立起连接之后,外设将会给中心设备建议一个连接间隔(Connection Interval),这样,中心设备就会在每个连接间隔尝试去重新连接,检查是否有新的数据。但是,这个连接间隔只是一个建议,你的中心设备可能并不会严格按照这个间隔来执行,例如你的中心设备正在忙于连接其他的外设,或者中心设备资源太忙。
CS2.png

GATT结构

GATT事务是建立在嵌套的Profiles,Services和Characteristics之上的,如下如所示:
heere image

  • Profile: Profile并不是实际存在于BLE外设上的,它只是一个被Bluetooth SIG或者外设设计者预先定义的Service的集合。例如心率Profile(Heart Rate Profile)就是结合了Heart Rate Service和Device Information Sercvice。所有官方通过GATT Profile的列表可以从这里找到。
  • Service :Service是把数据分成一个个的独立逻辑项,它包含一个或者多个characteristic。每个Service有一个UUID唯一标识。UUID有16bit的,或者128bit的。16bit的UUID是官方通过认证的,需要花钱购买,128bit是自定义的,这个就可以自己随便设置。官方通过了一些标准Service,完整列表在这里。以Heart Rate Service为例,可以看到它的官方通过16bitUUID是0x180D,包含3个Characteristic:Heart Rate Measurement,Body Sensor Location和Heart Control Point,并且定义了只有一个第一个必须的,它是可选实现的。
  • Characteristic :在GATT事务中的最低界别的是Characteristic,Characteristic是最小的逻辑数据单元,当然它可能包含一个组关联的数据,例如加速度计的X/Y/Z三轴值。与Service类似,每个Characteristic用16bit或者128bit的UUID唯一标识。你可以免费使用Bluetooth SIG官方定义的标准Characteristic,使用官方定义的,可以确保BLE的软件和硬件能相互理解。当然,你可以自定义Characteristic,这样的话,就只有你自己的软件和外设能够相互理解。
    3.png
文章目录