一、蓝牙理论方面的总结
1.是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。
2.蓝牙使用跳频技术,蓝牙4.0使用2 MHz 间距,可容纳40个频道。第一个频道始于2402 MHz,每2MHz一个频道,至2480 MHz。
3.蓝牙是基于数据包、有着主从架构的协议。一个主设备至多可和同一微微网中的七个从设备通讯。
4.蓝牙4.0版本的一般性改进包括推进蓝牙低功耗模式所必需的改进、以及通用属性配置文件(GATT) 和AES加密的安全管理器(SM) 服务。
5.蓝牙4.2,实现物联网:支持灵活的互联网连接选项(IPv6/6LoWPAN 或 Bluetooth Smart 网关);让Bluetooth Smart 更智能:业界领先的隐私权限、节能效益和和堪称业界标准的安全性能;让Bluetooth Smart 更快速: 吞吐量速度和封包容量提升。
二、蓝牙实践总结
1).控制设备基本流程
1. 获取蓝牙适配器
2.判断蓝牙是否打开-- 方法1:
传打开蓝牙意图ACTION_REQUEST_ENABLE
方法2:blueadapter.enable(); 直接调Api。
3.通过蓝牙设备地址(如:54:4A:16:1F:41:79),通过蓝牙设备地址获取BluetoothDevice对象,然后调用connectGatt()方法,获取BluetoothGatt设备,直到目前最新的Android4.4.2,Android手机只能作为中央来使用和处理数据。中央BluetoothGatt和周边BluetoothGattServer的实现。
4.BluetoothLeService类集成BluetoothGattCallback抽象类,BluetoothGattCallback返回中央的状态和周边提供的数据。这个方法里面判断是否处于连接状态,如果不是的,要把中央设备BluetoothGattCallback的对象释放出来。
5.重写onServicesDiscovered(...),这个方法里面做两件事情。第一件,判断周边设备是否与中央设备连接上。每一个周边BluetoothGattServer,包含多个服务Service,每一个Service包含多个特征Characteristic。第二件,中央BluetoothGatt通过具体服务名称(fff0)找到周边设备中具体某一个服务,然后通过特征字(fff1)找到这个服务中具体某一个特征通道,然后传输指令值。
6 .重写onCharacteristicWrite()方法,这个特征值传入成功后的一个回调,然后读取周边设备返回的数据。
7. 重写onCharacteristicRead(),读到的数据都会回调在这里。
8.发送广播拿到数据
2).BluetoothGatt(作为中央来使用和处理数据)的源代码分析
1.BluetoothGatt实现BluetoothProfile接口,现在先讲一下蓝牙属性接口BluetoothProfile,BluetoothProfile包含一些状态值。
2. BluetoothProfile属性中,public static final int A2DP = 2; A2DP是Advanced Audio Distribution Profile,Bluetooth的profile总结。
3. 还有获取连接的设备集合、通过状态数组获取匹配这个状态设备集合、具体某个设备的连接状态等。这三个方法就是实现BluetoothProfile接口,必须要实现的。
3. 下面两个属性很重要,控制蓝牙设备每一个步骤都会有一个相应的回调方法,并且返回state状态值,通过判断state等于什么值来判断每一个步骤是否成功。
public static final int GATT_SUCCESS = 0;
public static final int GATT_FAILURE = 0x101;
4.常用方法之一close()方法,如果中央设备处于断开连接状态,我们需要调用close方法,底层代码把状态改为CONN_STATE_CLOSED状态,并且调用unregisterApp()方法,
3).Android 蓝牙4.0(BLE)开发实现对蓝牙的写入数据和读取数据 (lib.csdn.net/article/embeddeddevelopment/32602)
三、蓝牙兼容性问题
1.这个问题怎么来的呢?虽然蓝牙SIG组织在应用的互操作性方面以profile的形式对一些功能做了规定,但有的功能并没有在profile中定义,还有就是做了规定的没有做那么多的严格界定条件,那么这个功能的实现便取决于各个手机厂商的具体实现,实现不同这就带来了兼容性问题。
2.手机的兼容性问题可以说是制约蓝牙应用的一个关键因素,同时也是决定一款优秀的车载蓝牙设备的功能完善性的一个因素。怎么解决这个问题呢,首先要在底层解决,这个取决于采用的蓝牙芯片供应商及其方案,比如CSR(Cambridge Silicon Radio)公司,它是蓝牙业界的领导者,在兼容性方面做了非常充分的测试,其固件和蓝牙协议栈凝结了CSR在蓝牙领域的多年开发经验,而且其固件可升级,每次固件的升级都经过了大量的严格的测试,首先在底层上就保证了最大程度的蓝牙兼容性。
4.支持“智能蓝牙”(Bluetooth Smart):Android 4.3系统正式支持低能耗蓝牙4.0技术(Bluetooth 4.0 Low Energy)。相较于3.0版本,蓝牙4.0拥有低功耗、3毫秒低延迟、AES-128加密等特点,它将三种规格集一体,包括传统蓝牙技术、高速技术和低耗能技术。根据官方的数据,蓝牙4.0的峰值能耗约为3.0的一半,极低的运行和待机功耗使得一粒纽扣电池甚至可连续工作一年之久。考虑到安卓设备的全球占有率情况,低能耗的连接方式,将会促进可穿戴设备的普及,并加速互联网的建设。
5.日前,蓝牙技术联盟推 出BluetoothSmart Ready和BluetoothSmart两个新商标,未来将帮助消费者识别具有蓝牙4.0版本兼容性的新设备。蓝牙技术联盟首席营销官Suke Jawanda在接受本刊记者采访时说,蓝牙4.0是最新的蓝牙无线技术, 其具备的低耗能特点是Bluetooth Smart设备的基础。贴有Bluetooth Smart Ready和BluetoothSmart商标的产品必须配置蓝牙4.0版本。Suke Jawanda介绍说,蓝牙4.0支持两种不同的无线射频,Bluetooth SmartReady设备的射频被称为双模式射频,表示其同时支持传统蓝牙无线连接和新蓝牙低耗能连接。Bluetooth Smart设备的射频被称为单模式射频,表示其仅支持新蓝牙低耗能连接。
6.兼容性问题总结下既是:
Smart Ready可以和Smart Ready、smart、传统蓝牙之间连接和通信;
Smart可以和Smart、Smart Ready之间连接和通信;
传统蓝牙可以和传统蓝牙、Smart Ready之间连接和通信;
由于现在比较主流的CC2540是BLE单模芯片,属于Smart, 所以只能和Smart Ready、Smart之间连接和通信,是不兼容传统蓝牙的。同时支持BR和BLE的设备成为双模设备,目前一般手机采用的蓝牙芯片都是双模的。本人使用的手机蓝牙硬件是支持BLE的,但是由于系统是安卓4.1的,所以必须要通过刷机到4.3以上版本,才能和CC2540进行连接通信。
7.根据Bluetooth SIG发布的Bluetooth 4.0核心规范白皮书,Bluetooth 4.0低耗电模式有双模式和单模式两种应用。低功耗蓝牙的单模式功能组件是一个高度集成的装置,具备轻量的链路层(Link Layer),能在最低成本的前提下,支持低功耗的待机模式、简易的设备发现、可靠的点对多点的数据传输、安全的加密链接等;位于上述控制器中的链路层, 适用于网络连接传感器,并确保在无线传输中,都能通过低功耗蓝牙传输。
低功耗蓝牙单模式架构,L2CAP为新开发的替代模块
在双模式应用中,蓝牙低功耗的功能会整合至现有的传统蓝牙控制器中,共享传统蓝牙技术已有的射频和功能,相较于传统的蓝牙技术,增加的成本更小;除 此之外,制造商可利用升级版蓝牙低功耗技术的功能模块,集成目前的蓝牙3.0高速版本、或2.1+EDR等传统蓝牙功能组件,从而改善传统蓝牙设备的数据 传输效能。