1.介绍

蓝牙是一种短距离的无线通信技术,可以实现固定设备、移动设备之间的数据交换。一般将蓝牙分为两大类,蓝牙3.0规范之前的版本称为传统蓝牙,蓝牙4.0规范之后的版本称为低功耗蓝牙,也就是常说的BLE(Bluetooth Low Energy)。

本文主要讲解的是Android设备与BLE设备之间的通信,Android 从4.3版本(API Level 18)开始支持BLE通信。

2.开发流程

7.1
 

首先要判断当前的Android设备是否支持蓝牙,如果支持则再判断当前蓝牙是否处于开启状态,如果未开启则发送广播通知系统开启蓝牙,蓝牙开启后开始搜索周围的蓝牙设备,注意搜索一定要设置超时处理,搜索到指定蓝牙设备后停止搜索任务。

此时可以以列表的形式供用户选择需要连接的设备,或者内部自动连接特定的设备,连接成功后,搜索此蓝牙设备提供的服务(特性、描述符的集合),搜索完成后设置一些对应的参数,即可与蓝牙设备进行通信了。

3.相关API

看下我们在开发过程中需要用到的一些API:

  • 1.BluetoothAdapter

本地蓝牙适配器,用于一些蓝牙的基本操作,比如判断蓝牙是否开启、搜索蓝牙设备等。

  • 2.BluetoothDevice

蓝牙设备对象,包含一些蓝牙设备的属性,比如设备名称、mac地址等。

  • 3.BluetoothProfile

一个通用的蓝牙规范,设备之间按照这个规范来收发数据。

  • 4.BluetoothGatt

蓝牙通用属性协议,定义了BLE通讯的基本规则,是BluetoothProfile的实现类,Gatt是Generic Attribute Profile的缩写,用于连接设备、搜索服务等操作。

  • 5.BluetoothGattCallback

蓝牙设备连接成功后,用于回调一些操作的结果,必须连接成功后才会回调

  • 6.BluetoothGattService

蓝牙设备提供的服务,是蓝牙设备特征的集合。

  • 7.BluetoothGattCharacteristic

蓝牙设备特征,是构建GATT服务的基本数据单元。

  • 8.BluetoothGattDescriptor

蓝牙设备特征描述符,是对特征的额外描述。

4.代码实现

需用用到的权限:

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />

当蓝牙连接成功后,会回调BluetoothGattCallback中的onConnectionStateChange方法,但是此时还不能与蓝牙设备进行通信,还需要调用BluetoothGatt中的discoverServices方法搜索蓝牙设备提供的服务,也就是我们上文中提到的BluetoothGattService,搜索完成后会回调BluetoothGattCallback中的onServicesDiscovered方法,这时就轮到setBleNotification方法大显身手了。

首先通过一个UUID获取到蓝牙设备提供的服务(BluetoothGattService),这个UUID是由硬件程序定义的,开发的过程中看文档就可以了,获取到服务后,再通过一个UUID获取到蓝牙设备的特征(BluetoothGattCharacteristic),然后再获取设备特征的描述符(BluetoothGattDescriptor),设置在蓝牙设备数据改变时,主动通知App,此时回调BluetoothGattCallback中的onCharacteristicChanged方法,通过characteristic.getValue()可以获取到通知的数据。

在BluetoothGattCallback还有很多回调方法,都是与BluetoothGatt的操作相对应的

应用启动后首先检测当前设备蓝牙是否可用,以及蓝牙是否开启,然后开始搜索蓝牙设备,注意一定要设置搜索的超时时间,将搜索到的蓝牙设备信息存到一个集合中,搜索时间为10s。

然后绑定BleService,以便调用Service中的方法,同时再通过startService的方式开启服务,这样Activity被销毁后service依旧可以运行。

接下来再注册一个广播接收器,接收service发来的消息并做一些处理,这时在蓝牙设备列表中点击你想要连接的设备就可以正常通信了。

在产品需求中,一般应用都是长时间连接一个硬件设备,比如手环,此时就需要做一些特殊处理,比如蓝牙连接断开后主动搜索之前已经连接的设备,或者应用运行过程中手机蓝牙被关闭之后的处理等。

蓝牙由蓝牙技术联盟(Bluetooth Special Interest Group,简称SIG)管理。蓝牙技术联盟在全球拥有超过25,000家成员公司,它们分布在电信、计算机、网络、和消费电子等多重领域。IEEE将蓝牙技术列为IEEE 802.15.1,但如今已不再维持该标准。蓝牙技术联盟负责监督蓝牙规范的开发,管理认证项目,并维护商标权益。制造商的设备必须符合蓝牙技术联盟的标准才能以“蓝牙设备”的名义进入市场。蓝牙技术拥有一套专利网络,可发放给符合标准的设备。

SoftDevice S132 is a high-performance Bluetooth® Low Energy protocol stack for the nRF52810 and nRF52832 System-on-Chips (SoCs). It supports up to 20 concurrent links in all roles (Broadcaster, Central, Observer, Peripheral). It is Bluetooth 5.1 qualified and supports the following Bluetooth features: high-throughput 2 Mbps, Advertising Extensions and channel selection algorithm #2 (CSA #2). The number of connections and bandwidth per connection are configurable, offering memory and performance optimization.

Download Link

一、关于蓝牙4.0

蓝牙4.0标准包含两个蓝牙标准,准确的说,是一个双模的标准,它包含传统蓝牙部分(也有称之为经典蓝牙Classic Bluetooth)和低功耗蓝牙部分(Bluetooth Low Energy)。这两个部分适用于不同的应用或者应用条件。传统蓝牙是在之前的1.0.1.2,2.0+EDR,2.1+EDR,3.0+EDR等基础上发展和完善起来的,低功耗蓝牙是Nokia的Wibree标准上发展起来的。

传统蓝牙可以用与数据量比较大的传输,如语音,音乐,较高数据量传输等,低功耗蓝牙这样应用于实时性要求比较高,但是数据速率比较低的产品,如遥控类的,如鼠标,键盘,遥控鼠标(Air Mouse),传感设备的数据发送,如心跳带,血压计,温度传感器等。传统蓝牙有3个功率级别,Class1,Class2,Class3,分别支持100m,10m,1m的传输距离,而低功耗蓝牙无功率级别,一般发送功率在7dBm,一般在空旷距离,达到20m应该是没有问题的。
所以蓝牙4.0是集成了传统蓝牙和低功耗蓝牙两个标准的,并不只是低功耗蓝牙。

蓝牙4.0是蓝牙3.0+HS规范的补充,专门面向对成本和功耗都有较高要求的无线方案,较3.0版本更省电、低成本和跨厂商互操作性、3毫秒低延迟、超长有效连接距离、AES-128加密等;蓝牙4.0可广泛用于卫生保健、体育健身、家庭娱乐、安全保障等诸多领域。通常用在蓝牙耳机、蓝牙音箱、计步器、心律监视器、智能仪表、传感器物联网等设备上,大大扩展蓝牙技术的应用范围。该技术拥有极低的运行和待机功耗,使用一粒纽扣电池甚至可连续工作数年之久。

蓝牙4.0支持两种部署方式:双模式和单模式。

双模式中低功耗蓝牙功能集成在现有的经典蓝牙控制器中,或再在现有经典蓝牙技术(2.1+EDR/3.0+HS)芯片上增加低功耗堆栈,整体架构基本不变,因此成本增加有限。
单模式面向高度集成、紧凑的设备,使用一个轻量级连接层(Link Layer)提供超低功耗的待机模式操作、简单设备恢复和可靠的点对多点数据传输,还能让联网传感器在蓝牙传输中安排好低功耗蓝牙流量的次序,同时还有高级节能和安全加密连接。超低的峰值、平均和待机模式功耗。

速度:支持1Mbps数据传输率下的超短数据包,最少8个八组位,最多27个。所有连接都使用蓝牙2.1加入的减速呼吸模式(sniff subrating)来达到超低工作循环。

跳频:使用所有蓝牙规范版本通用的自适应跳频,最大程度地减少和其他2.4GHz ISM频段无线技术的串扰。

主控制:更加智能,可以休眠更长时间,只在需要执行动作的时候才唤醒。

延迟:最短可在3毫秒内完成连接设置并开始传输数据。

范围:提高调制指数,最大范围可超过100米(根据不同应用领域, 距离不同)。

健壮性:所有数据包都使用24-bitCRC校验,确保最大程度抵御干扰。

安全:使用AES-128 CCM加密算法进行数据包加密和认证。

拓扑:每个数据包的每次接收都使用32位寻址,理论上可连接数十亿设备;针对一对一连接优化,并支持星形拓扑的一对多连接;使用快速连接和断开,数据可以再网状拓扑内转移而无需维持复杂的网状网络。

二、关于蓝牙BLE

BLE是蓝牙低能耗的简称(Bluetooh Low Energy)。蓝牙低能耗(BLE)技术是低成本、短距离、可互操作的鲁棒性无线技术,工作在免许可的2.4GHz ISM射频频段。它从一开始就设计为超低功耗(ULP)无线技术。它利用许多智能手段最大限度地降低功耗。

蓝牙低能耗架构共有两种芯片构成:单模芯片和双模芯片。蓝牙单模芯片可以和其它单模芯片及双模芯片通信,此时后者需要使用自身架构中的蓝牙低能耗技术部分进行收发数据。双模芯片也能与标准蓝牙技术及使用传统蓝牙架构的其它双模芯片通信。

双模芯片可以在目前使用标准蓝牙芯片的任何场合使用。这样安装有双模芯片的手机、PC、个人导航设备(PND)或其它应用就可以和市场上已经在用的所有传统标准蓝牙设备以及所有未来的蓝牙低能耗设备通信。然而,由于这些设备要求执行标准蓝牙和蓝牙低能耗任务,因此双模芯片针对ULP操作的优化程度没有像单模芯片那么高。

单模芯片可以用单节钮扣电池(如3V、220mAh的CR2032)工作很长时间(几个月甚至几年)。相反,标准蓝牙技术(和蓝牙低能耗双模器件)通常要求使用至少两节AAA电池(电量是钮扣电池的10至12倍,可以容忍高得多的峰值电流),并且更多情况下最多只能工作几天或几周的时间(取决于具体应用)。注意,也有一些高度专业化的标准蓝牙设备,它们可以使用容量比AAA电池低的电池工作。

蓝牙芯片组 MT1020基带控制器 PH2401无线收发器 蓝牙系统结构 功能块 蓝牙无绳电话 1 关于蓝牙 “蓝牙”是一项令人振奋的技术,它利用微波取代传统中错综复杂的电缆,使家庭或办公场所的移动电话、便携式计算机、打印机、复印机、键盘、耳机及其它手持设备实现互联互通,将人们从无数的连接电缆中解放出来,自由方便地构成自己的个人网络。有了蓝牙,你甚至不用掏出你的移动电话,就可以用PDA(个人数字助理)通过口袋中的移动电话查阅新闻、订票以及进行其它电子商务活动,无拘无束、自由自在。这个由爱立信公司于1995年提出的概念已广泛地为业界所接受,从SIG(蓝牙特殊利益集团)的成员就可以看出业界对它的重视程度。SIG的九个成员包括爱立信、诺基亚、摩托罗位、3COM、IBM、INTEL等,都是各自行业的“领导者”。

1 目前,这一技术已经有2000多家支持厂商。蓝牙技术的应用非常广泛,来自IDC的数据预测,到2005年全球围绕移动设备、桌面设备和其它设备将有40亿蓝牙产品被广泛应用,具有极大的市场潜力。 作为取代数据电缆的短距离无线通信技术,蓝牙支持点对点及对多点的通信,它以无线方式将家庭或办公室中的各种数据和语音设备联成一个微微网(Piconet),几个微微网还可以进一步实现互联,形成一个分布式网络(Scatternet),从而在这些联接设备之间实现快捷而方便的通信联系。蓝牙的工作频段为全球开放的2.4GHz ISM(工业、科学、医学)频段,由于就保证施行者可以毫无障碍地使用蓝牙设备。由于ISM频段是对所有无线电都开放的频段,汽车、微波炉等将有可能成为其不可预测的干扰源,因此对蓝牙特别设计了快速确认和跳频方案以确保连接的稳定和数据保密。在目前公布的蓝牙规范“Bluetooth V1.0”中,数据传输速率最大为721kbit/s,通信距离为10m,若加大发射功率,通信距离可达100m。

2 蓝牙系统结构 MT1020基带控制器和PH2401无线收发器分别由MITEL公司和PHILSAR公司提供,两者配合可构成完整的低功耗的蓝牙模块,提供高至HCI(主机控制接口)层的功能。它们在蓝牙系统中的位置如图1所示。 MT1020基带控制器负责蓝牙基带部分的功能,完成基带以及链路的管理,包括对SCO(同步)和ACL(异步)连接方式的支持、差错控制、物理层的认证与加密、链路管理等;PH2401实现数据的无线接收和发送;虚线以上部分由用户根据不同的应用需求来实现。特别值得一提的是,在该蓝牙模块解决方案中,即将推出的改进型基带控制器MT1020B可提供20K的用户ROM,使用户可以利用其内嵌的低功耗、高性能的32位ARM7TDMI内核,从而简化用户设计,实现最低楞耗、最高集成度的蓝牙产品。

3 蓝牙芯片组简介

3.1 MT1020的内部结构及各功能块介绍

  MT1020由嵌入式微处理器和蓝牙基带外设组成,如图2所示。在该芯片中,系统仙部时钟可以低至5MHz、内核供电电压为2V、硬件解码、支持DMA传输,所有这些使得该芯片具有超低功耗。

3.1.1 基带外设

  基带外设以最小的开销完成重要的蓝牙操作,它挂在“向上集成模块总线(Uintegration Module Bus)”上,由以下几个功能块组成。

  3.1.1.1 总线接口

    总线接口完成微处理器与基带外设之间的通信,基带外设内各个模块之间使用专门的BT总线传送数据。

  3.1.1.2 链路控制器

  链路控制器与PH2401无线收发器接口,需要发送的数据在链路控制器中被装配,加上同步字、帧头以及CRC校验字,并且被白化,是否进行加密可由用户选择;收到的数据由在此被解码、检错。 3.1.1.3 队列管理器 队列管理器完成缓冲RAM与链路控制器以及USB或串行主机与音频接口之间的智能DMA传输。它能识别不同格式的蓝牙数据包,并能进行相互转换。 3.1.1.4 缓冲RAM 专门用于存储蓝牙数据包和变量,容量为12K Byte。

  3.1.1.5 音频编解码器 音频编解码器是一个全双工的编解码器,包括麦克风放大器和耳机驱动器,其听数字转换器能够进行线性PCM、A律PCM、μ律PCM及CVSD(连续可变斜率增量调制)之间的相互转换。

3.1.2 嵌入式微控制器内核

  嵌入式微处理器由32位RISC架构的ARM7TMDI中内处理单元、专用的模块交互总线(Inter-Module Bus)和其它一些功能块组成。 3.1.2.1 ARM7TDMI处理器 ARM7TDMI是一款性能优异的嵌入式CPU,具有极快的运算速度和很低功耗,利用其内部的Thumb指令压解器可支持16位指令,并支持扩展调试、快速乘法等功能,它通过模块交互总线其它功能块交换数据。

3.1.2.2 外设控制器

外设控制器是MT1020A中内部总线与外部总线进行通信的主要通道,它支持动态总线宽度,并能产生访问外设所需要的控制信号。

3.1.2.3 串行I/O 串行I/O用来连接各种串行接口器件,例如与串行EEPROM、串行时钟等器件接口。

3.1.2.4 中断控制器 ARM7TDMI处理器接受两种中断请求:普通中断请求和快速中断请求。根据用户所需要的优先级,所有中断都可设置成两种类型中的一种。中断控制器能处理八个外部中断和两个内部中断。外部中断可被编程设置成电平触发或沿触发。为减少中断响应的延迟时间,对每种类型的中断,中断控制器能进行硬件优先级判断,从而加快对中断的实时响应。

3.1.2.5 定时器/计数器 MT1020A提供两个双独立32位定时器/计数器,它们与系统时钟同步,可以在程序中轮询,也可设置成溢出中断,并能自动重装。

3.1.2.6 DMA控制器 在该控制器中有两个DMA引擎,它们可以配置成一对,从而支持ARM7TDMI中任意位置两个内存块的DMA传输。当然,它们也可独立使用。

3.1.2.7 通用异步收发器 通用异步收发器接口形式为RS-232,支持硬件握手和XON/XOFF软件协议,收发通道上各有一个缓冲器,可以在程序中轮询,也可使用中断形式。器件内部的波特率发生器用来产生需要的数据速率。

3.1.2.8 系统存储器 系统存储器挂在UIM总线上。MT1020有20KB的内部静态RAM,用于程序变量的存储。用户需要外挂一个外部ROM/FLASH来存储蓝牙链路控制和管理协议代码。在MT1020的下一个版本中,将提供片上ROM,并具备存储用户代码的能力,从而简化用户设计,降低功耗。

3.2 PH2041蓝牙无线收发器功能

  PH2401单片无线收发器用砷化镓工艺制造,具有高集成度、超低功耗、体积小等优点,专门优化用于2.4GHz无线个人系统,完全兼容蓝牙规范“Bluetoooth V1.0”。它工作于2.4GHz的ISM频段,以每秒1600次的速度在79个频道(2.402GHz-2.408GHz)上快速跳频,最大位传输速率可达1Mbit/s。 PH2401采用调制指数为0.3的高斯频移键控制(GFSK)调制方式,信道带宽为1MHz,频偏在140kHz-175kHz之间,满足蓝牙2级和3级操作, 送功率可在-10dBm-+2dBm之间编程设定,发射范围为10-100m。接收器由RF-IF下变频器、自动增益控制(AGC)、滤波器、双通道模/数转换器及调制器组成。 基带控制器通过串行总线与PH2401接口。通过对其内部寄存器的读写实现跳频、调谐等其它控制。

4 蓝牙无绳电话 由MT1020和PH2401构成的蓝牙模块提供高至HCI的功能,因此可以很方便地利用它构成蓝牙系统。我们采用该芯片组设计了蓝牙无绳电话。 根据蓝牙规范对无绳电话的协议要求,无绳电话实现协议栈如图3所示。 通过服务发现协议(SDP),子机寻找通信范围内所有蓝牙设计信息和服务类型,从而与无绳电话主机建立连接。语音呼 叫的控制信令则在二元电话控制协议(TCS Binary)中定义。逻辑链路控制应用协议(L2CAP)向上层提供面向连接和无连接的逻辑链路。传输上层协议数据。语音流不经过逻辑链路控制应用协议(L2CAP),直接与基带控制器连接,使用连续可变斜率增量调制(CVSD)技术,以获得高质量传输的音频编码。 蓝牙无绳电话子机的基本电话框图如图4所示。 MCU不仅完成对键盘、显示器的控制,而且实现TCS Binary、DSP和L2CAP协议,受话送话器直接与MT1020基带控制器连接,系统简洁、可靠,具有很好的性能价格比。