bluez的扫描率取决于哪些因素,如何提高?

问题描述 投票:0回答:1

我想写一个脚本,只要蓝牙低能耗设备达到一定的RSSI阈值,就可以打开与它的连接。首先我用bluepy用Python写了一个脚本,但是反应速度让我很失望。于是我想可能是库的问题,于是我用NodeJS重新写了一个脚本,但结果还是一样。于是我又深入研究了一下...

这个脚本在我的Macbook Pro和Raspberry Pi 4上进行了测试。在Macbook上,设备的速度比Raspi上的略快,但不是很多。

我发现,在Linux上,所有的蓝牙通信都是通过bluez进行的,这可以通过hcitool和bluetoothctl来控制。所以我用它们来看看RSSI的更新速度。而那里的响应速度已经不够快了。所以,似乎是Linux没有足够快地处理来自设备的广告包。

设备的广告每100毫秒就有一次(也试过50毫秒,没有区别),但我只看到每大约1秒就有一次RSSI更新。而且。感觉广告包是一波一波的来的 因此,像一对夫妇在4秒内,然后一秒钟什么都没有,然后另一个爆裂4秒。

所以我的问题是: 数据传输速度取决于哪些因素,数据传输速度有多快?以及如何提高数据率?

是否有更好的芯片,我可以使用,或任何设置,我可以玩的周围?

对了 为了确保不会出现数据包丢失的问题 ble设备总是离MacbookRaspi很近。

下面是一个使用bluetoothctl的例子。

# sudo bluetoothctl
# agent on
# scan on
linux bluetooth bluetooth-lowenergy bluez
1个回答
2
投票

BlueZ命令行工具并不是为了给你提供扫描数据包的实时输出而设计的。 你最好使用BlueZ C APIs。 这里是我用C语言写的一个简单的命令行程序,它可以给你BlueZ检测到的每个BLE广告包的原始输出。 对于以10赫兹速度运行的广告商,我通常会看到每秒8-9个数据包(你永远不会收到100%的数据包)。

https:/gist.github.comdavidgyoung0127ad914ea1b6b0f21a53ac3bb97ad3。

我在文件的顶部放了编译C代码的说明。 一旦你这样做,你就可以像这样使用它。

$ ./scanner

B8:27:EB:1F:93:4D -68 02 01 06 11 06 82 75 25 D9 37 9D D7 8F 5F 4A F4 20 00 00 75 30
71:5C:23:9D:BC:7F -68 02 01 1A 02 0A 0C 0B FF 4C 00 10 06 03 1A 3B D4 B2 EB
B8:27:EB:1F:93:4D -68 02 01 06 11 06 82 75 25 D9 37 9D D7 8F 5F 4A F4 20 00 00 75 30

输出从MAC开始, 然后是RSSI, 然后是广告的十六进制字节.

© www.soinside.com 2019 - 2024. All rights reserved.