Pythonのbleakライブラリを使って2個のM5StickCをBLE接続してM5StickC内蔵センサの値をPCに取り込もうとしています。
bleakライブラリのtwo devices exampleを使って2個のM5StickCからデータがアップロードできることが確認できたのですが、データが一方のデバイスから主にアップロードされ、もう一つのデバイスからはまばらにしかアップロードされない状況です。
一方のデバイスがデータをアップロードしている間、他のデバイスのアップロードをブロックしているように見えるのですが、均等にアップロードされるようにするには下のスクリプトをどう書き換えればよいでしょうか。
python
1from bleak import BleakClient 2import asyncio 3 4address1 = "D8:A0:1D:55:EE:8A" 5UUID1 = "beb5483e-36e1-4688-b7f5-ea07361b26a8" 6 7address2 = "94:B9:7E:93:21:76" 8UUID2 = "beb5483e-36e1-4688-b7f5-ea07361b26a2" 9 10adresses = [address1, address2] 11UUIDs = [UUID1, UUID2] 12 13def run(addresses, UUIDs): 14 loop = asyncio.get_event_loop() 15 task = asyncio.gather(*(connect_to_device(address, UUID) for address, UUID in zip(addresses, UUIDs))) 16 loop.run_until_complete(task) 17 18async def connect_to_device(address, UUID): 19 print("starting", address, "loop") 20 async with BleakClient(address, timeout=5) as client: 21 print("connected to", address) 22 while(True): 23 tasks = {client.read_gatt_char(UUID)} 24 done, not_done = await asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED) 25 for tasks in done: 26 try: 27 print(await tasks) 28 except Exception as e: 29 print(e) 30 not_done.add(tasks) 31 tasks = not_done 32 33if __name__ == "__main__": 34 run(adresses, UUIDs)
出力:(AとBが各M5StickCのID)
starting D8:A0:1D:55:EE:8A loop
starting 94:B9:7E:93:21:76 loop
connected to 94:B9:7E:93:21:76
connected to D8:A0:1D:55:EE:8A
bytearray(b'A,-0.03,-0.98,10.33,20.79,-7.34,49.20')
bytearray(b'B,-3.55,-4.01,8.56,-55.33,35.50,415.26')
bytearray(b'A,-0.06,-1.00,10.32,21.30,-7.37,50.00')
bytearray(b'A,-0.03,-1.01,10.32,21.74,-7.47,50.74')
bytearray(b'A,-0.09,-1.00,10.31,22.17,-7.52,51.54')
bytearray(b'A,-0.01,-0.96,10.31,22.64,-7.55,52.37')
bytearray(b'A,-0.06,-0.99,10.31,23.39,-7.53,53.97')
bytearray(b'A,-0.03,-1.01,10.27,23.85,-7.60,54.75')
bytearray(b'A,-0.06,-0.96,10.27,24.32,-7.60,55.54')
bytearray(b'B,-3.69,-4.10,8.50,-53.77,33.41,72.30')
bytearray(b'A,-0.03,-1.02,10.27,24.84,-7.68,56.30')
bytearray(b'A,-0.05,-1.01,10.32,25.35,-7.77,57.04')
bytearray(b'A,0.02,-0.99,10.29,25.76,-7.85,57.80')
bytearray(b'A,-0.09,-1.00,10.27,26.28,-7.86,58.53')
bytearray(b'A,-0.04,-0.94,10.27,26.92,-7.92,59.27')
bytearray(b'A,-0.08,-0.95,10.28,27.39,-7.94,60.03')
bytearray(b'A,0.03,-0.96,10.31,28.47,-8.03,61.52')
bytearray(b'A,-0.06,-0.99,10.30,29.09,-8.09,62.23')
bytearray(b'B,-3.55,-4.05,8.46,-51.99,30.52,95.55')
bytearray(b'A,-0.02,-0.96,10.31,29.50,-8.11,63.00')
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/26 11:19
2021/06/26 11:54