问题描述
我尝试通过 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 (将#修改为@)