低功耗蓝牙连接仅持续 10 秒

Posted

技术标签:

【中文标题】低功耗蓝牙连接仅持续 10 秒【英文标题】:Bluetooth LE connection only lasts 10 seconds 【发布时间】:2014-09-10 18:06:38 【问题描述】:

我想知道是否有其他人遇到过仅持续 10 秒的 ble 连接问题。我正在尝试将 Mac(运行 ubuntu)连接为中心,并将 iPhone 应用程序作为外围设备运行。我已验证该应用程序可与 lightblue 连接。我正在使用 hcitool lescan 获取 MAC 地址,然后使用 gatttool-b -I -t random 这给了我 [ ][MAC ADDRESS]> 提示符,然后我键入 connect ,这给了我 [CON][MAC ADDRESS ]> 整整 10 秒,然后恢复为 [ ][MAC 地址]>。我确实运行了 hcidump,这是输出:

HCI 嗅探器 - 蓝牙数据包分析器 2.2 版 设备:hci0 snap_len:1028 过滤器:0xffffffffffffffff

HCI 命令:LE 设置扫描参数 (0x08|0x000b) plen 7 类型 0x01(活动) 间隔 10.000ms 窗口 10.000ms 自有地址:0x00(公共)策略:全部

HCI 事件:命令完成 (0x0e) plen 4 LE 设置扫描参数 (0x08|0x000b) ncmd 1 状态 0x00

HCI 命令:LE 设置扫描启用 (0x08|0x000c) plen 2 值 0x01(启用扫描) 过滤重复项 0x01(启用)

HCI 事件:命令完成 (0x0e) plen 4 LE 设置扫描启用 (0x08|0x000c) ncmd 1 状态 0x00

HCI 事件:LE 元事件 (0x3e) plen 33 LE 广告报告 ADV_IND - 可连接的无向广告 (0) bdaddr 78:96:3C:DB:D9:9D(随机) 标志:0x1a 具有 16 字节数据的未知类型 0x07 RSSI:-37

HCI 事件:LE 元事件 (0x3e) plen 12 LE 广告报告 SCAN_RSP - 扫描响应 (4) bdaddr 78:96:3C:DB:D9:9D(随机) RSSI:-37

HCI 命令:LE 设置扫描启用 (0x08|0x000c) plen 2 值 0x00(禁用扫描) 过滤重复项 0x01(启用)

HCI 事件:命令完成 (0x0e) plen 4 LE 设置扫描启用 (0x08|0x000c) ncmd 1 状态 0x00

HCI 命令:LE 创建连接 (0x08|0x000d) plen 25 bdaddr 78:96:3C:DB:D9:9D 类型 1

HCI 事件:命令状态 (0x0f) plen 4 LE 创建连接 (0x08|0x000d) 状态 0x00 ncmd 1

HCI 事件:LE 元事件 (0x3e) plen 19 LE 连接完成 状态 0x00 句柄 64,角色主机 bdaddr 78:96:3C:DB:D9:9D(随机)

ACL 数据:处理 64 个标志 0x02 dlen 11 ATT:按组读取请求 (0x10) 开始 0x0001,结束 0xffff 类型-uuid 0x2800

HCI 命令:读取远程版本信息 (0x01|0x001d) plen 2 处理 64

HCI 事件:读取远程版本信息完成 (0x0c) plen 8 状态 0x00 句柄 64 LMP 版本:4.0 (0x6) LMP 颠覆:0x2203 制造商:博通公司 (15)

HCI 事件:命令状态 (0x0f) plen 4 读取远程版本信息 (0x01|0x001d) 状态 0x00 ncmd 1

HCI 事件:Disconn Complete (0x05) plen 4 状态 0x00 句柄 64 原因 0x13 原因:远程用户终止连接

有什么建议可以帮助我打破这种常规吗?

提前致谢。

【问题讨论】:

【参考方案1】:

我体验过(在 android 上)Estimote BLE 信标会在 10 秒后恰好中断连接。如何将 iPhone 变成外围设备?您使用 Estimte 应用程序吗?也许他们实现应用程序的方式与实现信标的方式相同。

如果您使用 Estiomte 应用程序,您可以尝试使用其他应用程序将您的 iPhone 变成外围设备并检查它是否显示相同的行为。

【讨论】:

不,我正在用 Objective-c 编写自己的应用程序。 当我尝试连接到他们的任何伪服务时,它对 lightblue 做同样的事情。【参考方案2】:

这只是我的客人: 我认为这是 ios 保存事物的一部分。如果您手动连接并且在 10 秒内不执行任何操作,它将简单地断开连接。大多数程序不会在 10 秒内空闲(不做任何事情)。您为什么不订阅通知/识别字符或进行绑定配对,我再次猜测这应该可以防止 iOS 断开连接。使用 10 秒的 gatttool 可能会很棘手,但如果您使用浅蓝色,应该会很容易。

【讨论】:

谢谢。我已经想到了这一点,因此我尝试在十秒之后不断检查特征并获取值等。它仍然断开连接。我可以尝试编写一个连接和订阅服务的程序,看看它是否保持连接。【参考方案3】:

我相信这也可能是由于 bluez 版本。您当时使用的是什么版本的 bluez?您可能还会从 hcidump 中看到以下内容:

原因:远程用户终止连接 (0x13)

【讨论】:

以上是关于低功耗蓝牙连接仅持续 10 秒的主要内容,如果未能解决你的问题,请参考以下文章

低功耗蓝牙芯片为何如此省电?

Android 低功耗Ble 蓝牙4.0多连接 开源框架

iOS 上的蓝牙与低功耗蓝牙

BLE低功耗蓝牙的广播内容

Android 低功耗蓝牙开发(扫描连接)

Android 低功耗蓝牙开发(扫描连接)