参考资料:http://www.cnblogs.com/savagemorgan/p/3722657.html
Android4.3 蓝牙BLE初步
http://www.cnblogs.com/zdz8207/category/434664.html
谈谈几个月以来开发android蓝牙4.0 BLE低功耗应用的感受
http://blog.csdn.net/jimoduwu/article/details/21604215
Android BLE 蓝牙低功耗教程,中央BluetoothGatt和周边BluetoothGattServer的实现
http://blog.csdn.net/woshasanguo/article/details/41082395
android ble蓝牙开发略解 (写的不错)
?
- 首先需要明白一些概念
蓝牙2.0 vs 蓝牙4.0,主要的区别在于协议变了,4.0主打省电策略,与其他相比,这个更省电。而且,最坑的不是这个,最坑的是蓝牙2.0 只能与蓝牙2.0 通讯,蓝牙4.0与蓝牙4.0通讯。
协议不一样,无法直接通讯。
在开发手机与单片机通过蓝牙通讯的过程中,我们要知道,其实手机和单片机也是一样,2.0的蓝牙无法同4.0的蓝牙通讯。
还有一点就是,手机间,蓝牙通讯一般用系统自带的app进行开发,而不是用我们自己开发的app,这是因为手机没有root,无法用手机的 app进行相互的通讯。
所以,现在市面上都是,手机蓝牙4.0 与模块蓝牙4.0 之间的通讯。
- 蓝牙相关概念:
GATT、ATT: 这两者都是BLE间小数据传输的协议规范,都是通用的。
Characteristic: 数据类型,它包括一个value和0至多个value的描述。
Descriptor: 对上面的描述,例如范围、计量单位等。
Service:Characteristic的集合,例如一个service可能包含多个ch,一个ch也可能包含多个des.
?
?
3、数据的传递问题:
一定要搞清,数据的流向问题:
程序结构:
在DeviceScanActivity当中,数据怎么回传回来?数据在这个里面通过Intent传到这个这里。
在DeviceControlActivity当中,数据是这样的:
各种回调之后,数据在device里面,我们现在的目的是要发送数据,要发送数据就是需要
mNotifyCharacteristic
它怎么得到:
?
?
?
?
?
从上到下,我们可以看到,我们想要得到的其实就是mDeviceAddress,而此已经得到了。只需要从下往上找即可找到。
mBluetoothLeService
?
- 概念还是概念
BLE分为三部分Service、Characteristic、Descriptor,这三部分都由UUID作为唯一标示符。一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个Value和多个Descriptor,一个Descriptor包含一个Value。
?
?
第二大块,分析的有点复杂。
上面的每一个部分都有唯一的UUID,而且对于某个固定的设备其UUID是固定的,但是设备那么多,我们如何确定是那个设备呢?
如下面所示:
上面是对于某个固定的设备是有用的,但是对于不是固定的设备就很难说了。
?
也就是说,对于某些相同的设备,gatt都不一样,而gatt下面的?services,character,descriptor都有相同的UUID。
gatt是通过?设备mac获取到的,其函数?connectgatt。
一个设备一个gatt,换设备就要换gatt。
其实我们也可以做成下面这样,一个设备对应多个services,一个service 可能对应着多个characteristic,相同设备的相同服务(service)
和属性(characteristic)的UUID相同。
?