Python(Bluetooth通信02-Bleak_データ送受信)

■Write, Read, Notifyまで。
前回に続きBluetooth Low Energyの試し。今回はPC-スマホ間でのデータ送受信まで。PCで、Python(Bleakライブラリ)を使用して、スマホではBluetoothの既存アプリ(GATTサーバーとして使用)を使用している。

Write (PC→スマホ)、Read(スマホ→PC)、Notify(スマホで設定値を変更してPCへ通知)を実施。

  • Writeの結果。
    コード内に記載した文字列がスマホに送信されている。データを受信したスマホのキャプチャが次。

  • Readの結果。
    スマホのアプリで設定した値(ここでは"11あかさ")がPCのコンソールに表示されることを確認した。PCのコンソールのキャプチャが次。バイナリデータで受信して、UTF-8で解読。

  • Notifyの結果。
    Pythonでコードを実行すると、start_notifyでリスニング状態になる。その間にスマホで値を変更する。Python側ではその操作時間を確保するため、60秒待機させている。
    値を変更した直後に、PCのコンソールに結果が表示される。

コードは下。Write, Read, Notifyをまとめているけど、実行時には適宜コメントアウトとかしている。それぞれAIで生成。

# スマホのBLEアドレス
ADDRESS = "XX:XX:XX:XX:XX:XX"

# Characteristic UUID(スマホのアプリで任意に設定)
CHAR_UUID = "12345678-1234-5678-1234-56789abcdef0"

def callback(sender, data):

    print("--------------------")
    print("Notify受信")
    print("UUID :", sender)
    print("Raw  :", data)

    try:
        print("Text :", data.decode("utf-8"))
    except UnicodeDecodeError:
        print("UTF-8ではありません")


async def main():

    print("接続中...")

    async with BleakClient(ADDRESS) as client:

        print("接続成功")
        print("Connected :", client.is_connected)

        text = "Hello BLE!hhhhhhhggggggggggg"

        await client.write_gatt_char(
            CHAR_UUID,
            text.encode("utf-8")
        )

        print("送信した文字列 :", text)

#===================================================================
        data = await client.read_gatt_char(CHAR_UUID)

        print("受信データ :", data)
        print("文字列 :", data.decode("utf-8"))

#===================================================================
        print("接続成功")
        await client.start_notify(
            CHAR_UUID,
            callback
        )

        print("60秒待機中")

        await asyncio.sleep(60)

        await client.stop_notify(CHAR_UUID)

        print("終了")


if __name__ == "__main__":
    asyncio.run(main())

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です