首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

BLE和EasyBle的使用(1)

BLE和EasyBle的使用(1)

BLE

简介:(Bluetooth low energy)蓝牙低功耗是蓝牙4.0新增的子规范,其具有低能耗、低成本、低延迟、传输距离长等特点,自安卓4.3(api level 18)起,安卓开始支持BLE。

BLE和传统蓝牙的对比:


BLE设备之间的交互方式

交互方式有两种,分别是:

完全基于广播:

       设备间不用连接而只需外设广播数据即可。这种方式主要是让外设把自己的信息发送给多个中心设备。使用这种方式的应用叫作Beacon。该方式下有Broadcaster(广播者)和Observer(Scanner扫描者)两种角色。使用该方式最典型的应用就是苹果的 iBeacon,可实现广告推送和室内定位。

基于GATT连接:

        设备连接后通过GATT(通用配置文件,下文有详细介绍)来进行通信。

    GATT 连接是独占的。即一个 外设同时只能被一个中心设备连接。一旦外设被连接,它就会马上停止广播,这样它就对其他设备不可见了。当连接断开,它又开始广播

BLE中角色与职责

Central vs. Peripheral:中心设备-外围设备,中心设备和外围设备的概念针对的是BLE连接本身,中心设备负责扫描广播,而外围设备负责发出广播。

    注意:
    1.只有一方支持Central另一方支持Peripheral才能通信
    2.Android 4.3开始支持BLE,但只支持作为中心设备(Central)模式,
    Android 5.0开始两种模式都支持

GATT server vs. GATT client:这两种角色取决于BLE连接成功后,两个设备间通信的方式。若A需从B请求数据,则A是client,B是server;反之A是server,B是client
关于BLE广播

广播间隔(Advertising interval)

         外围设备会设定一个特定的广播间隔Advertising interval来发送广播数据,每当经过广播间隔时,外设将重新发送广播数据包。广播间隔越长越省电,但也不太容易扫描到。

广播数据

       外围设备向外广播数据包:Advertising Data Payload(广播数据) + Scan Response Data Payload(扫描回复),广播数据和扫描回复的数据长度分别可达 31 byte。Advertising Data Payload是强制性的,因为外围设备必需不停向外广播而让其他中心设备感知其存在,而Scan Response Data Payload(扫描回复)是可选的,中心设备可向外围设备请求扫描回复(设备设计者可将更多设备信息如设备名字符串等放置于此)。因此,在含扫描回复的情况下,广播数据包最大可为62byte。自Android 5.0起,系统提供了ScanRecord类来帮助解析设备接收到的BLE广播数据包,可直接通过该类获取有意义的数据如设备连接属性(标识设备支持 的 BLE 模式)、设备名、设备包含的关键 GATT service或 Service data、厂商自定义 数据等。
BLE的链接参数

Conection Events(连接事件)
蓝牙设备建立连接后,所有信息的交换都是通过Connetion Events进行的,主设备在Connection Events开始起发送数据包,从属设备在Connection Events期间回复。Connection Events是周期性出现的且时间间隔很短,在一个Connection Events中,器件最大电流为十几mA,平均电流1uA,这便是BLE功耗较低的原因。

链接参数

       在两个蓝牙设备建立连接进入连接状态前,蓝牙设备需要设置一系列的链接参数,链接参数是在中心设备向外围设备发起连接请求时传递的:

Connection Interval

         两次connection event的时间间隔称Conection Interval,Connection Inetrval为1.25ms的倍数,数值位于6(7.5ms)至3200(4.0s)之间。较长的Connection Interval更节省功耗,但数据相对无法做到及时传输,而较短的Connection Interval 可让数据传输更及时,但由于设备频繁连接,设备功耗较大。由于蓝牙采用了快跳频技术,设备每隔一段时间后都会在一个新频道上进行数据传输,每次数据传输都称为 一次connection event,即使无数据传输,设备也会connection event上交换LL层数据以保持两设备的连接状态

Slave Latency

Slave Latency代表外围设备最多可以忽略的connection events数目,数值可以位于0~499之间,但最大值必须保证 effective connectioninterval不得大于16.0s,为外围设备设置该参数可使外围设备在无数据传输时灵活地跳过connection events保持睡眠状态以节省更多的功耗。有效连接间隔计算公式如下:


    Effective Connectioninterval = ConnectionInterval * ( 1 + SlaveLatency)


Supervision Timeout
        

        Supervision Timeout表示两次成功完成connection events的最大时间间隔。若时间超过Supervision Timeout时两设备仍无成功完成的connection event,设备将认为链接丢失并回归未连接状态。Supervision Timeout为10ms的倍数,其值在10(100ms)至3200(32.0s);Supervision Timeout 必须大于effective connectioninterval



         当外围设备认为中心设备请求的链接参数不合适时,外围设备可在连接期间发送一个Connetion Parameter UpdateRequest 请求中心设备更改链接参数。当中心设备收到请求时可接受或拒绝外围设备的链接参数更新请求

    在Android中未提供修改链接参数具体值的api,只提供了一个修改连接优先级的方法BluetoothGatt#requestConnectionPriority(int connectionPriority),该方法参数为以下三者之一CONNECTION_PRIORITY_BALANCED (默认值)、CONNECTION_PRIORITY_HIGH、CONNECTION_PRIORITY_LOW_POWER,该方法不同的参数对应有不同的链接参数,具体使用参见方法说明
返回列表