1、BT4.0
蓝牙4.0标准包含两个蓝牙标准,准确的说,是一个双模的标准,它包含传统蓝牙部分(也有称之为经典蓝牙Classic Bluetooth)和低功耗蓝牙部分BLE(Bluetooth Low Energy)。蓝牙4.0芯片存在单模和双模;
2、GAP、GATT
GAP(Generic Access Profile),它在用来控制设备连接和广播。GAP 使你的设备被其他设备可见,并决定了你的设备是否可以或者怎样与合同设备进行交互。例如 Beacon 设备就只是向外广播,不支持连接,小米手环就等设备就可以与中心设备连接。GAP 给设备定义了若干角色,其中主要的两个是:外围设备(Peripheral)(这一般就是非常小或者简单的低功耗设备,用来提供数据,并连接到一个更加相对强大的中心设备。例如小米手环)和中心设备(Central)(中心设备相对比较强大,用来连接其他外围设备。例如手机等。)
GATT (Generic Attribute Profile) 是一个在蓝牙连接之上的发送和接收很短的数据段的通用规范,这些很短的数据段被称为属性(Attribute)。它定义两个 BLE 设备通过叫做 Service 和 Characteristic 的东西进行通信。GATT 就是使用了 ATT(Attribute Protocol)协议,ATT 协议把 Service, Characteristic遗迹对应的数据保存在一个查找表中,次查找表使用 16 bit ID 作为每一项的索引。
一旦两个设备建立起了连接,GATT 就开始起作用了,这也意味着,你必需完成前面的 GAP 协议。这里需要说明的是,GATT 连接,必需先经过 GAP 协议。实际上,我们在开发中,可以直接使用设备的 MAC 地址,发起连接,可以不经过扫描的步骤。这并不意味不需要经过 GAP,实际上在芯片级别已经给你做好了,蓝牙芯片发起连接,总是先扫描设备,扫描到了才会发起连接。GATT 连接需要特别注意的是:GATT 连接是独占的。也就是一个 BLE 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当设备断开,它又开始广播。中心设备和外设需要双向通信的话,唯一的方式就是建立 GATT 连接。
Service服务 和 Characteristic 特征值(包括一个单一的变量和N个用来描述Characteristic变量的descriptor,Descriptor 用来描述Characteristic变量的属性)均需要通过一个UUID来识别。UUID为128,但是在BLE中,UUID通常用16位,也就是两个字节来替代。16位UUID和128位UUID可以相互转换.蓝牙联盟已经定义了常用的蓝牙服务UUID,如要自己定义(指16位的uuid,128位的uuid号可以自己随便定义,随便改。),可以向蓝牙联盟申请。
3、BLE手机应用开发
Android 从 4.3(API Level 18) 开始支持低功耗蓝牙,但是只支持作为中心设备(Central)模式,这就意味着 Android 设备只能主动扫描和链接其他外围设备(Peripheral)。从 Android 5.0(API Level 21) 开始两种模式都支持。
苹果在IOS 6系统之后开始支持BLE 4.0,iPhone4s,iPod 5,iPad 3等之后的机型开始内嵌BLE4.0硬件,并且苹果在BLE4.0之后,对外部的连接设备已经不在需要MFI认证;
BLE开发流程:
a、检测蓝牙状态,扫描设备;
b、连接设备,寻找服务Service;
c、在服务Service里寻找特征值Characteristic;
d、根据服务和特征值进行数据收发、添加通知处理等;(发送数据时都是 20 字节一个包)
4、虚拟蓝牙设备
Android 5.0和IOS都支持外围设备(Peripheral)模式,这样在手机中实现虚拟蓝牙设备。比如终端设备中可以把内置打印机虚拟成蓝牙打印机设备;