编程语言
首页 > 编程语言> > python – BlueZ / Pybluez – 蓝牙LE扫描,同时连接到外围设备

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

作者:互联网

简短问题:是否可以扫描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

标签:python,bluetooth-lowenergy,bluez
来源: https://codeday.me/bug/20190628/1317863.html