bluetoothctl 不显示蓝牙低功耗 (BLE) 设备

Posted

技术标签:

【中文标题】bluetoothctl 不显示蓝牙低功耗 (BLE) 设备【英文标题】:bluetoothctl does not show bluetooth low energy (BLE) device 【发布时间】:2021-04-09 12:07:05 【问题描述】:

我想将我的蓝牙低功耗运动手表 (Suunto Ambit 3) 与我的 Raspberry PI 3 B V1.2 配对 我正在使用带有内核版本 5.4.79-v7+ 的 RaspianOS 版本 10 buster 此操作系统包含 5.50 版中的 bluez 堆栈,该堆栈是通过 apt-get 从预定义的软件包安装的。

ble配对通常是通过androidios下的智能手机完成的。在进行配对过程时,手表会提供一个密码,必须由智能手机输入。 使用 android 下的 nRFConnect 应用程序,配对工作正常。 当我在树莓上运行 hcitool 并且手表处于配对模式时,它会出现。

sudo hcitool -i hci0 lescan

但是当我尝试使用scan on 运行sudo bluetoothctl 命令时,我的设备没有出现,并且与正确的mac 地址配对也不起作用。 其他设备仍然出现在 bluetoothctl 我还查看了https://github.com/raspberrypi/linux/issues/3689,但这似乎只与较新的树莓派模型有关。

知道是什么阻碍了我的设备在 bluetoothctl 扫描模式下被找到,或者我可以做些什么来配对我的设备并启用 pin 码?

【问题讨论】:

这听起来像是 bluetoothctl 或 Suunto watch 的错误。当你通过bluetoothctl找不到设备时,你能同时使用nRF Connect看到它吗?换句话说,您是否完全确定手表没有停止广告或没有自动连接到其他东西。我之所以问,是因为如果发生了这两件事中的一件,那么预计手表将不再通过 bluetoothctl 可见。 这是一个长镜头,但您也可以尝试重置 btmgmt,如以下答案所示:- ***.com/questions/62147384/…。也许这会以某种方式让事情发挥作用。 还值得检查的是,如果您执行blutoothctl devices,手表不在列表中,因为如果现有设备已经被发现,它们通常会在扫描过程中被过滤掉。 sudo service bluetooth restart 通常是重置bluetoothd 的好主意。要获得更多的调试可见性,请使用 journalctl -f -u bluetoothsudo btmon 您好,感谢您的回复。 您好,感谢您的回复。我做了一些进一步的调查:看起来我的手表确实发送了一个未连接的广告帧。可能是为了防止其他应用程序连接到该手表我对帧格式不是很熟悉,但hcidump --raw 给了我04 3E 21 02 01 00 00 C0 81 ... 我尝试使用 nRF 连接进行相同的模拟,而 bluetoothctl 的行为相同。因此,如果禁用可连接,则找不到。可能我必须访问它比 bluetoothctl 更深的级别。你知道是否有一些工具/库吗? 【参考方案1】:

我自己找到了解决办法。

bluetoothctl 内部调用以下序列

menu scan
transport le
back
scan on

终于让 bluetoothctl 能够找到我的手表。 然后连接命令也可以工作了。

【讨论】:

以上是关于bluetoothctl 不显示蓝牙低功耗 (BLE) 设备的主要内容,如果未能解决你的问题,请参考以下文章

低功耗蓝牙监听多个特征通知

iOS 蓝牙设置(我的设备)下是不是仍不显示低功耗蓝牙设备?

一分钟读懂低功耗蓝牙(BLE)广播数据包

Android 4.4:低功耗蓝牙;无需扫描 BLE 设备即可连接

Android 蓝牙低功耗配对

Swiftui - 蓝牙低功耗状态始终未知