BlueZ / Pybluez - 蓝牙LE扫描,同时连接到外围设备

时间:2015-04-03 18:30:12

标签: python bluetooth-lowenergy bluez

简短的问题:是否有可能在定期连接到某些设备并且读取特征a)时扫描LE设备[一般是协议是否允许]和b)使用BlueZ堆栈?

很长的问题:我正在编写一个Python脚本来扫描广告某个UUID的LE设备。如果找到一个,我们应该连接,读取特定的特征值(调用此ValueA),然后断开连接。我们的想法是保持ValueA存在的实时列表。我希望能够生成一个启动LE扫描的线程,并将广告事件收集到一个线程安全的容器中。发现新设备时,应触发处理程序以读取ValueA

我使用PyBluez和BluePy(连接外围设备)的努力失败了。当我使用终端命令(sudo hcitool lescan --duplicatessudo gatttool -I后跟连接和读取命令)时,如果我在开始扫描后尝试连接(扫描中止),则这些命令会失败

我很困惑,因为我注意到如果我在开始LE扫描之前通过gatttool连接到设备,我可以启动扫描并继续阅读ValueA而不会影响扫描,但反之亦然。

任何见解或良好的BlueZ编程文档将不胜感激。在Ubuntu 14.10 Macbook Pro上使用BlueZ 4.1

1 个答案:

答案 0 :(得分:3)

我最近没有检查过,但我不认为PyBluez可以做BLE。

在扫描时尝试连接的问题是某些硬件发生的已知问题。这是某些硬件特有的问题。基本上你需要停止扫描,建立你的L2CAP / GATT连接,然后重新开始扫描......或购买一个没有问题的不同的加密狗。

我在Python中用BLE完成的所有工作都是模仿Python中hcitoolgatttool的作用。这很不幸,但是还没有BLE(我知道的)那个BLE。这是一个可以帮助您入门的代码段:Finding Bluetooth low energy with python

或者,您可以使用它提供的DBUS界面与Bluez进行交互。不过,我被告知您无法与不属于蓝牙配置文件的属性进行互动。 (因此,您可以与使用心率配置文件的BLE设备进行交互,但不能从加速度计读取值)

编辑:似乎 现在是GATT的一个库:https://pypi.python.org/pypi/gattlib