目前,对于传说中的智能家居来说,了解ble蓝牙知识必不可少;低功耗蓝牙从4.3版本开始,可以使用它来发现设备(ScanBlutTooth),查询服务和读写特写。蓝牙底层是基于GATT协议,我们要操作蓝牙读取是要了解Api中BluetoothGATT类,里面包含Service(服务),Characteristic(特征值),Descriptor(属性);在连接后想做读写的操作,需要特定的Service_UUID,uuid是什么呢,是唯一统一标识符,每一个标识符是128位,例如这样的格式
![](https://img.haomeiwen.com/i3347740/a344f12a54391402.png)
怎么理解深层次蓝牙?蓝牙底部由 Service,Characteristic,Descriptor组成,他们可以由不同的uuid表示,一个Service由多个Characteristic,而Characteristic有多个Descriptor组成,从而构成一个服务,假如这个服务,这个Service表是蓝牙灯的信息,那么Characteristic可以是色温,色差,那么Descriptor就是里面一个属性值,可以是代表argb值;连接蓝牙有几个步骤:
1.蓝牙权限
![](https://img.haomeiwen.com/i3347740/1666b6a617be8b7e.png)
2.scanBlueTooth 扫描蓝牙设备
一般在Activity、Fragment使用蓝牙场景中,将附近的蓝牙在扫描过后添加到BlueTooth列表;
(1).获取蓝牙服务,得到blueAdaper,再在开始扫描:
![](https://img.haomeiwen.com/i3347740/f925d08ad9fffe5f.png)
(2).开始扫描,开启扫描,这里的TimeOut是默认扫描15s,因为蓝牙扫描是很耗费电量以及性能,恩,电量是一定的,但性能我不知道,也许是我瞎编的;15s后结束扫描动作;
![](https://img.haomeiwen.com/i3347740/2b59509dd145a00f.png)
(3).startScan,扫描是要通过BluetoothAdapter开启扫描过程
![](https://img.haomeiwen.com/i3347740/4c12e228e3c51b13.png)
(4).将扫描到的蓝牙设备添加到列表当中,以供连接选择;
![](https://img.haomeiwen.com/i3347740/de41bffc064bef9e.png)
3.连接蓝牙
(1),通过Mac地址,在使用BluetoothAdapter获取Device,再使用Device连接
![](https://img.haomeiwen.com/i3347740/710101343ffffb04.png)
![](https://img.haomeiwen.com/i3347740/cd0d0f144e2909eb.png)
![](https://img.haomeiwen.com/i3347740/a4f11efa4b6eded5.png)
4.获取服务
![](https://img.haomeiwen.com/i3347740/754591cafb4c63d7.png)
5.收发数据
(1)收取数据
需要判断characteristic的uuid是否与通讯协议一致,如果一致,那么从gatt当中读取数据
![](https://img.haomeiwen.com/i3347740/16b05d0edda5227d.png)
(2)写数据
![](https://img.haomeiwen.com/i3347740/bb804c81b5382130.png)
(3)一般而言,收取通知是从这里,被动的收取从蓝牙模块发送的数据,根据协议不同,dealData各有所不同;其中注意需要判断uuid;rssi是蓝牙信息强度,值是负数,如果值越大,那么信息强度越强;
![](https://img.haomeiwen.com/i3347740/989a4cee1193405b.png)
6.固件升级
待续;
网友评论