1
0

More than 1 year has passed since last update.

M5stack Core2でBluetooth接続 PCのpythonプログラム2(PCから送信)

Last updated at Posted at 2022-05-31

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

以下を実装

  • テキスト受信
  • テキストをラベル表示
  • Aボタンを押すとラベルリセット
    image.png

実行結果

テキストリセットのAボタンも機能しました
次は、M5StackCore2からの送信データをPCで受け取るを目標にします
image.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0