BLE通信を成功させたい
長引いているBLE通信、UIFLOWのBlocklyでは情報が少なすぎてうまくいかないものです…
前回は、PCとM5StackCore2間のBLE通信が出来ることが確認できました
任意の文字列をPCとM5StackCore2の間で通信することを目標にしました
PC側の送信プログラム完成
任意の文字列を送信する方法がわからず困っていましたが、UUIDライブラリでCore2と同じUUIDを設定(生成)したことで解決しました
UUIDは前回のServiceで抽出された上記項目から抜き出しました
UUIDを変数にただの文字列として代入して通信していた時は、Access Deniedが出たりしてPC側でUUIDが設定できていなかったのか・・?
import asyncio
import uuid
from bleak import BleakScanner
from bleak import BleakClient
from bleak import BleakError
device_name = "FIVE_STACK"
write_UUID = uuid.UUID("6e400002-b5a3-f393-e0a9-e50e24dcca9e")
# M5StackCore2のUUIDを設定する
#[Characteristic] 6e400002-b5a3-f393-e0a9-e50e24dcca9e (Handle: 23): (write), Value: None
write_UUID = uuid.UUID("6e400002-b5a3-f393-e0a9-e50e24dcca9e")
通信先の検索を行い、通信チェック、通信先のMACアドレスを抽出
async def ble_scan():
devices = await BleakScanner.discover()
idx = list(filter(lambda x: x.name == device_name, devices))
# 検出デバイスの表示
#for d in devices:
# print(d)
global ADDRESS
ADDRESS = idx[0].address
print("find device " + str(idx[0].name))
MACアドレスを使ってBLE通信を開始、入力テキストを出力する
async def connect_write():
global ADDRESS
async with BleakClient(ADDRESS,use_cached=False) as client:
print("Send message..")
val = input("input >>")
write_value = bytearray(val.encode('utf-8'))
await client.write_gatt_char(write_UUID, write_value)
print("end")
if __name__ == "__main__":
asyncio.run(ble_scan())
asyncio.run(connect_write())
UIFLOWのBlockly
以下を実装