BLE通信の送信ができ、受信もできる
送信はできるようになった
PCが受信側となって実行できるようにするには?
PC側の受信プログラム
前々回のUUIDで調べた(read)にはValueにすでに値が入っていたので、
notifyにあたるキャラクタリスティックを読み込んでみたところ成功しました
import asyncio
import uuid
from bleak import BleakScanner
from bleak import BleakClient
from bleak import BleakError
device_name = "FIVE_STACK"
#[Characteristic] 6e400003-b5a3-f393-e0a9-e50e24dcca9e (Handle: 20):
# (notify), Value: None
read_UUID = uuid.UUID("6e400003-b5a3-f393-e0a9-e50e24dcca9e")
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))
async def connect_read():
global ADDRESS
async with BleakClient(ADDRESS,use_cached=False) as client:
def callback(sender, data):
print(f"Received: {data}")
data_str = data.decode()
print("decode ->"+data_str)
print("..receive message")
while True:
await client.start_notify(read_UUID, callback)
if __name__ == "__main__":
asyncio.run(ble_scan())
asyncio.run(connect_read())
notifyはコールバック関数で~とリファレンスサイトにあったので、受信時にコールバック関数へ飛ばしました
UIFLOWのBlockly
前回のものに、BLE writeブロックを追加、1秒おきにカウントアップしていく
実行結果
1秒ごとに表示される
受信データをそのまま表示させるとbytearray(b'')
が返ってくる
受信データをデコードすることで文字列になった
次はPCのプログラムをデスクトップアプリケーション化してみようと思います