python中的多个BLE连接非常慢黯淡

问题描述

我尝试通过 BLE 将两个 M5StickC 连接到 PC 以上传它们的传感器数据。

我使用 bleak 库编写了一个数据采集 python 脚本。

当我连接 2 个设备时,数据采集速度非常慢。

如何提高我的脚本的数据采集率? 我希望每秒能得到 20 个数据。

import asyncio
from bleak import BleakClient

address1 = "D8:A0:1D:55:EE:8A"
UUID1 = "beb5483e-36e1-4688-b7f5-ea07361b26a8"

address2 = "94:B9:7E:93:21:76"
UUID2 = "beb5483e-36e1-4688-b7f5-ea07361b26a2"

async def main():
    client1 = BleakClient(address1)
    client2 = BleakClient(address2)
    print(client1.address)
    print(client2.address)
    await client1.connect()
#    await client2.connect()
    while(True):                                     # very slow when comment out client2
        print(await client1.read_gatt_char(UUID1))
#        print(await client2.read_gatt_char(UUID2))

if __name__ == "__main__":
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

编辑:

感谢您的评论

我已经按照 ukBaz 的链接更新了我的脚本。 数据上传速度大大提高,但我几乎只能得到单个M5StickC数据,另一个数据可用稀疏......

我会问这个问题来让维护者感到沮丧。

from bleak import BleakClient
import asyncio

address1 = "D8:A0:1D:55:EE:8A"
UUID1 = "beb5483e-36e1-4688-b7f5-ea07361b26a8"

address2 = "94:B9:7E:93:21:76"
UUID2 = "beb5483e-36e1-4688-b7f5-ea07361b26a2"

def callback(sender,data):
    print(sender,data)

def run(addresses,UUIDs):
    loop = asyncio.get_event_loop()
    tasks = asyncio.gather(*(connect_to_device(address,UUID) for address,UUID in zip(addresses,UUIDs)))
    loop.run_until_complete(tasks)

async def connect_to_device(address,UUID):
    print("starting",address,"loop")
    async with BleakClient(address,timeout=5.0) as client:
        print("connect to",address)
        while(True):
            try:
                print(await client.read_gatt_char(UUID))
            except Exception as e:
                print(e)

if __name__ == "__main__":
    run([address1,address2],[UUID1,UUID2])

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)