专栏首页编程思想之路BLE低功耗蓝牙开发相关概念问题记录

BLE低功耗蓝牙开发相关概念问题记录

蓝牙ble的传输速率是指主从机每秒所传输的字节数。既然是传输速率那就涉及到时间和每次所传递包大小的问题。

关于ble通信的demo可以参考蓝牙API介绍及基本功能实现

Ble概念相关

ble对于数据的传输有一个字节上的限制,默认情况下是20个字节,但并不是不可修改的。默认情况下mtu是23个字节(除去3个字节的标志位剩余为20个字节),主机完全可以通过调用BluetoothGatt#requestMtu(int mtu)来修改每个包所传输的字节数。 同样,ble在属于传输时对于每个包之间的时间间隔也有一定的限制,大多数从机的连接时间间隔为7.5ms–4s(以1.25ms为一个单位,也就是6-0x0C80个单位)。对于连接间隔主机同样可以修改:调用BluetoothGatt# requestConnectionPriority(int connectionPriority)方法。其中connectionPriority有三个取值:

  • BluetoothGatt#CONNECTION_PRIORITY_LOW_POWER:低功耗, 对应的连接时间间隔取值范围为:100ms–125ms(80–100个单位)。 对应的从机延时取值为:2.5ms(2个单位) 对应的监控超时取值为:20s(以10ms为一个单位);
  • BluetoothGatt#CONNECTION_PRIORITY_BALANCED:处于中等水平 对应的连接时间间隔取值范围为:30ms–50ms(24–40个单位)。 对应的从机延时取值为:0ms(0个单位) 对应的监控超时取值为:20s();
  • BluetoothGatt#CONNECTION_PRIORITY_HIGH:高功耗 对应的连接时间间隔取值范围为:11.25ms–15ms(9–12个单位)。 对应的从机延时取值为:0ms(0个单位) 对应的监控超时取值为:20s();

接下来看一下各个概念是什么意思??

  • 主机和从机:发起连接的设备是主机,接受连接请求的设备是从机
  • 客户端和服务器:展示“属性”的设备是服务器,与之配对的是客户端。换言之,获取信息的客户端提供信息的是服务器
  • 主机可以是客户端也可以是服务器端,同样从机可以做客户端也可以做服务器端
  • BLE协议和协议栈:协议指的是一种通信标准。比如规定第一个字节代表什么意思第二个字节又代表什么意思。而协议栈是具体的一些实现函数,开发人员调用协议栈函数进行通信(相当于各种API)
  • 连接事件:在两个ble设备的连接中使用调频机制,两个设备使用特定的信道收发数据,过段时间再使用新的信道(链路层处理信道切换),两个设备在信道切换后首发数据称为连接事件。即使没有数据收发两设备仍旧会交换链路层数据来维持连接。在一次连接事件中会不停的切换信道,所发送的数据包不止一个。
  • 连接间隔(Connection Interval):就是两个连接事件之间的间隔。主机开始发送数据到从机至下一次主机开始发送数据到从机之间的时间间隔。主从机之间的每次通信都是一个连接事件(但不同于第一次从机处于广播状态下主机连接从机)。以1.25ms为一个单位,一般取值是7.5ms–4s(6–3200)。
  • 从机延时(Slave latency):允许从机跳过一些连接事件。简单说就是我规定一个时间,在这次连接事件开始后到一定时间内,在这一段时间内从机不响应主机的任何消息。
  • 监控超时(Supervision Timeout):两个成功连接事件间的最大允许间隔。如果超过了这个时间而没有任何连接事件即没有任何数据交换则断开连接。以10ms为一个单位,一般取值范围是100ms–32s(10–3200)。

主机在发起连接之后会获取一个BluetoothGatt对象。

  • 主机主动读数据调用readCharacteristic方法,读之后会触发 onCharacteristicRead方法
  • 主机主动写数据调用writeCharacteristic方法,写之后会触发 onCharacteristicWrite方法(可以进行下一次的写数据)
  • 主机被动获取到数据(从机通过notify方法发送数据),当监听到有数据过来时会触发 onCharacteristicChanged方法(但是要想该方法回调,必须在主机端程序中为要监听的characteristic设置notify: setCharacteristicNotification)
  • 主机修改mtu(一个包的字节)会触发onMtuChanged方法。

主机从机连接通信过程描述:

  • 主机开启蓝牙enable()
  • 主机扫描蓝牙startLeScan()( startLeScan(final UUID[] serviceUuids, final LeScanCallback callback) 可以扫描特定uuid的设备)
  • 主机connect连接蓝牙
  • 主机discoveryServices发现服务( 会回调onServicesDiscovered方法)
  • 进行通信

问题总结

问题一:在扫描蓝牙时如何进行过滤??

这个系统已经提供了接口了:

 @Deprecated
    @RequiresPermission(Manifest.permission.BLUETOOTH_ADMIN)
    public boolean startLeScan(final UUID[] serviceUuids, final LeScanCallback callback) {

把你想要扫描的设备的服务的uuid添加到serviceUuids中进行扫描即可。千万不要以name作为过滤。 如果在扫描到设备之后再通过BluetoothDevice.getUuids()方法进行过滤是不起作用的,看看对方法的定义就知道了:

 /**
     * Returns the supported features (UUIDs) of the remote device.
     *
     * <p>This method does not start a service discovery procedure to retrieve the UUIDs
     * from the remote device. Instead, the local cached copy of the service
     * UUIDs are returned.
     * <p>Use {@link #fetchUuidsWithSdp} if fresh UUIDs are desired.
     * <p>Requires {@link android.Manifest.permission#BLUETOOTH}.
     *
     * @return the supported features (UUIDs) of the remote device,
     *         or null on error
     */
    @RequiresPermission(Manifest.permission.BLUETOOTH)
     public ParcelUuid[] getUuids() {

这里返回的uuid是缓存的uuid。如果你没有缓存的uuid获取到的肯定是null。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Android中初步自定义view

    在研究了几个星期的view之后,打算自定义个view巩固检验一下最近学的知识,view知识相关博文 Android6.0源码分析之View(一) Andr...

    fanfan
  • Android源码开发之添加/删除系统应用

    本文参考老罗的系统源代码情景分析中的1.5章节 http://0xcc0xcd.com/p/books/978-7-121-18108-5/c15.php 想要...

    fanfan
  • Android中View研究自学之路 Android6.0源码分析之View(一)Android6.0源码分析之View(二)

    Android中View研究自学之路 http://blog.csdn.net/zrf1335348191/article/details/54171263 ...

    fanfan
  • [C语言] 数据结构-衡量算法的标准

    常数阶O(1)<对数阶O(log2n)<线性阶O(n),<线性对数阶O(nlog2n)

    陶士涵
  • 在“天眼”看到弑母案嫌疑人之前,我们付出了什么?

    不久前,一则新闻引起巨大震动,三年前弑母案中的嫌疑人吴谢宇在重庆江北机场被抓,有人透露吴谢宇进入机场不到十分钟,警察便找到了他。这场所谓的“完美犯罪”是否完美我...

    FB客服
  • POJ PKU 2446 Chessboard 解题报告

    题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2446

    owent
  • Python、Java、C++一网打尽,这个GitHub项目用多种语言实现经典算法

    不想做低级码农,不想成为前端抠图达人或是后台「增删改查」小王子?那你可能需要好好复习下算法与数据结构。

    五分钟学算法
  • 设计模式-代理模式

    武培轩
  • I2C通讯协议

    1、基本概念 主机 初始化发送,产生时钟信号和终止发送的器件 从机 被主机寻址的器件 发送器 发送数据到总线的器件 接收器 从总线接收数据的器件 多...

    233333
  • palindrome - 132. Palindrome Partitioning II

    Given a string s, partition s such that every substring of the partition is a pa...

    用户5705150

扫码关注云+社区

领取腾讯云代金券