简短问题:是否可以扫描LE设备,同时定期连接某些设备并读取特性a)一般情况下[协议是否允许]和b)使用BlueZ叠加么?BlueZ/Pybluez - 连接到外围设备时进行蓝牙LE扫描
很长的问题:我正在编写一个Python脚本来扫描广告某个UUID的LE设备。如果找到一个,我们应该连接,读取一个特定的值(称为ValueA
),然后断开连接。这个想法是保持一个实时列表ValueA
的存在。我希望能够产生一个启动LE扫描的线程,并将广告事件收集到一个线程安全的容器中。当发现新设备时,应该触发一个处理程序来读取ValueA
。
我的努力使用PyBluez和BluePy(连接到外设)失败。当我使用终端命令(sudo hcitool lescan --duplicates
和sudo gatttool -I
其次是连接并读取命令),这些失败,如果我尝试后,我开始扫描连接(扫描中止)
我很困惑,因为我发现,如果我连接到设备通过gatttool
开始LE扫描之前,我可以启动扫描并继续阅读ValueA
而不影响扫描,但反之亦然。
任何见解或良好的BlueZ编程文档,将不胜感激。在Ubuntu 14.10上使用BlueZ 4.1 Macbook Pro
啊,所以蓝牙规范中没有任何东西可以排除这种情况发生。你有没有成功使用特定的加密狗,或者是否有我可以搜索的此功能的名称?你使用的是什么版本的BlueZ,4.x或5.x?另外,对于外设,我已经使用[bluepy](https://github.com/IanHarvey/bluepy)来发现服务和读取特性。 – thegeebe 2015-04-08 18:44:06
好吧,它没有在标准中规定,所以它取决于硬件制造商。 Iogear GBU521能够在连接时继续扫描。我从中国获得的廉价(很可能是假的)CSR没有能力。你基本上只需要测试一下就可以知道。如果您希望自己的代码稳定可靠,则可以在尝试连接时暂时关闭扫描,然后在建立连接后再打开它。 – 2015-04-08 18:50:12
相关提示;我也在使用中国的廉价CSR。谢谢! – thegeebe 2015-04-08 18:57:18