蓝牙控制器(bluetoothctl)无法显示蓝牙低功耗(BLE)设备。

4
我想把我的蓝牙低功耗运动手表(Suunto Ambit 3)与我的Raspberry PI 3 B V1.2配对。 我正在使用的是RaspianOS Version 10 buster,内核版本为5.4.79-v7+。 该操作系统包含bluez堆栈版本5.50,已通过apt-get从预定义软件包安装。
通常情况下,使用Android和IOS智能手机进行ble配对。在进行配对过程中,手表会提供一个暗码,需要由智能手机输入。 在Android下使用nRFConnect应用程序可以成功配对。 当我在树莓派上运行hcitool并且手表处于配对模式时,它会出现。
但是,当我尝试使用scan on命令运行sudo bluetoothctl时,我的设备没有出现,并且也无法使用正确的MAC地址进行配对。 其他设备仍然会出现在bluetoothctl中。 我还查看了https://github.com/raspberrypi/linux/issues/3689,但这似乎只与较新的树莓派模型有关。

你有任何想法是什么阻碍了我的设备在蓝牙扫描模式下被发现,或者我可以用启用了PIN码的方式配对我的设备吗?


这听起来像是bluetoothctl或Suunto手表的错误。当您无法通过bluetoothctl找到设备时,您能同时使用nRF Connect看到它吗?换句话说,您是否完全确定手表没有停止广播或没有自动连接到其他设备?我之所以问,是因为如果这两件事中的一件发生了,那么预计手表将不再通过bluetoothctl可见。 - Youssif Saeed
这可能是一个不太可能的尝试,但你也可以尝试重置btmgmt,就像这个答案中所示:https://dev59.com/-bvoa4cB1Zd3GeqP2FvS#62242352。也许这样做会在某种程度上使事情正常化。 - Youssif Saeed
1
值得注意的是,如果您执行 blutoothctl devices 命令时发现手表已经在列表中作为现有设备存在,那么往往会在扫描过程中被过滤掉。建议使用 sudo service bluetooth restart 命令重置 bluetoothd。为了获得更多的调试可见性,请使用 journalctl -f -u bluetoothsudo btmon 命令。 - ukBaz
嗨,谢谢回复。 - TheBlackRiderGBird
谢谢回复。 我进行了进一步的调查: 看起来我的手表确实发送了一个非连接广告帧。 可能是有意为之,以防其他应用程序连接到该手表。 我对帧格式不是很熟悉, 但是 hcidump --raw 给了我 04 3E 21 02 01 00 00 C0 81 ... 我尝试使用 nRF 连接和 bluetoothctl 模拟相同的情况,结果也是一样的。因此,如果可连接性被禁用,则无法找到。 可能我需要比 bluetoothctl 更深入地访问它。 您知道是否有一些工具/库可以做到这一点吗? - TheBlackRiderGBird
1个回答

14

我自己找到了解决方案。

bluetoothctl中执行以下命令序列:

menu scan
transport le
back
scan on

最终使bluetoothctl找到我的手表。连接命令现在也可以正常工作。


2
按照您的步骤操作后,我收到了“无法启动发现:org.bluez.Error.InProgress”错误提示。 - Adrian Lopez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接