BlueZ/Pybluez - 连接到外围设备时进行蓝牙 LE 扫描
BlueZ/Pybluez - Bluetooth LE scan while connected to peripheral
简短的问题:是否可以扫描 LE 设备,同时定期连接到某些设备并读取特征 a) 通常 [协议是否允许] 和 b) 使用 BlueZ 堆栈?
长问题:我正在编写一个 Python 脚本来扫描通告特定 UUID 的 LE 设备。如果找到,我们应该连接,读取特定的特征值(称之为 ValueA
),然后断开连接。这个想法是维护 ValueA
存在的实时列表。我希望能够生成一个线程来启动 LE 扫描并将广告事件收集到一个线程安全的容器中。当发现新设备时,应触发处理程序以读取 ValueA
。
我使用 PyBluez 和 BluePy(连接到外围设备)的努力失败了。当我使用终端命令(sudo hcitool lescan --duplicates
和 sudo gatttool -I
后接连接和读取命令)时,如果我在开始扫描后尝试连接(扫描中止)
我很困惑,因为我注意到如果我在开始 LE 扫描之前通过 gatttool
连接到设备,我可以开始扫描并继续阅读 ValueA
而不会影响扫描,但反之则不行。
任何见解或良好的 BlueZ 编程文档将不胜感激。在 Ubuntu 14.10 Macbook Pro
上使用 BlueZ 4.1
我最近没查过,但我不认为PyBluez可以做BLE。
您在扫描时尝试连接的问题是某些硬件会发生的已知问题。这是特定于某些硬件的问题。本质上,您需要停止扫描,建立 L2CAP/GATT 连接,然后重新开始扫描...或者购买没有该问题的其他加密狗。
我在 Python 中使用 BLE 所做的所有工作都是模仿 hcitool
和 gatttool
在 Python 中所做的。不幸的是,目前还没有(据我所知)支持 BLE 的库。下面是可以帮助您入门的代码片段:Finding Bluetooth low energy with python
或者,您可以使用它提供的 DBUS 接口与 Bluez 交互。不过,有人告诉我您不能与不属于蓝牙配置文件的属性进行交互。 (因此,您可以与使用心率配置文件的 BLE 设备交互,但不能从加速度计读取值)
编辑: 似乎现在是 GATT 的一个库:https://pypi.python.org/pypi/gattlib
简短的问题:是否可以扫描 LE 设备,同时定期连接到某些设备并读取特征 a) 通常 [协议是否允许] 和 b) 使用 BlueZ 堆栈?
长问题:我正在编写一个 Python 脚本来扫描通告特定 UUID 的 LE 设备。如果找到,我们应该连接,读取特定的特征值(称之为 ValueA
),然后断开连接。这个想法是维护 ValueA
存在的实时列表。我希望能够生成一个线程来启动 LE 扫描并将广告事件收集到一个线程安全的容器中。当发现新设备时,应触发处理程序以读取 ValueA
。
我使用 PyBluez 和 BluePy(连接到外围设备)的努力失败了。当我使用终端命令(sudo hcitool lescan --duplicates
和 sudo gatttool -I
后接连接和读取命令)时,如果我在开始扫描后尝试连接(扫描中止)
我很困惑,因为我注意到如果我在开始 LE 扫描之前通过 gatttool
连接到设备,我可以开始扫描并继续阅读 ValueA
而不会影响扫描,但反之则不行。
任何见解或良好的 BlueZ 编程文档将不胜感激。在 Ubuntu 14.10 Macbook Pro
上使用 BlueZ 4.1我最近没查过,但我不认为PyBluez可以做BLE。
您在扫描时尝试连接的问题是某些硬件会发生的已知问题。这是特定于某些硬件的问题。本质上,您需要停止扫描,建立 L2CAP/GATT 连接,然后重新开始扫描...或者购买没有该问题的其他加密狗。
我在 Python 中使用 BLE 所做的所有工作都是模仿 hcitool
和 gatttool
在 Python 中所做的。不幸的是,目前还没有(据我所知)支持 BLE 的库。下面是可以帮助您入门的代码片段:Finding Bluetooth low energy with python
或者,您可以使用它提供的 DBUS 接口与 Bluez 交互。不过,有人告诉我您不能与不属于蓝牙配置文件的属性进行交互。 (因此,您可以与使用心率配置文件的 BLE 设备交互,但不能从加速度计读取值)
编辑: 似乎现在是 GATT 的一个库:https://pypi.python.org/pypi/gattlib