2025年8月12日火曜日

Bluetooth接続を介してLチカをしてみる

 

ESP32ではBluetooth ClassicとBLEの両方が使えますが、Raspberry Pi Pico WはBLEのみ対応しています。Bluetooth Classicは音楽再生や連続データ転送向け、BLEは省電力でセンサ制御などに適しています。BLEは理論上多数の機器と接続可能ですが、実際の接続数はデバイスや実装により異なります。今回はPico WのBLE機能を使って、スマホなどからLEDの点灯・消灯を制御します。Pico WのBLEは実験的な機能ですが、簡単な通信制御には十分使えます。ESP32ほど多機能ではありませんが、Pico Wでも手軽にBLE通信を試すことができます。

BLEのサンプルコードは、micropython/micropython リポジトリの examples/bluetoothディレクトリに用意されています。

今回はそれらをライブラリのように扱い、Thonny上に取り込んで活用していきます。




◆Bluetooth接続を介してLチカのコード

import machine
import bluetooth
from ble_simple_peripheral import BLESimplePeripheral
import time

# GPIO16番ピンをLED出力用に設定
led = machine.Pin(16, machine.Pin.OUT)
led.off()  # 起動時はLEDを消灯

# Bluetoothオブジェクトを生成し、ペリフェラルとして初期化
ble = bluetooth.BLE()
p = BLESimplePeripheral(ble)

# BLE経由でデータを受信したときのコールバック関数
def on_rx(v):
    print("received:", v)
    v = v.strip()  # 改行コード(\r\n など)を削除
    if v == b'1':
        led.on()         # LED点灯
        p.send("ON\n")   # 応答メッセージを送信
    elif v == b'0':
        led.off()        # LED消灯
        p.send("OFF\n")  # 応答メッセージを送信
    else:
        p.send("do nothing\n")  # 無効なコマンドに対する応答

# 受信時のコールバック関数を登録(何度も設定しない)
p.on_write(on_rx)

# メインループ
while True:
    try:
        if not p.is_connected():
            # 接続待機中は少し待つ
            time.sleep(0.1)
        # 接続中は on_rx がイベントで呼ばれる
    except OSError as e:
        # BLEエラー発生時の処理
        print("BLE error:", e)
        try:
            # BLEを再初期化して復旧を試みる
            ble.active(False)
            time.sleep(1)
            ble.active(True)
            p = BLESimplePeripheral(ble)
            p.on_write(on_rx)
            print("BLE reinitialized")
        except Exception as e:
            # 再初期化に失敗した場合は少し待って再試行
            print("Reinit failed:", e)
            time.sleep(5)



実行するとコンソールに



のように出力されます。

Raspberry Pi Pico Wをペリフェラル機器として設定し、接続準備を進めます。

Androidスマートフォンやタブレットから、


Google Playから「Serial Bluetooth Terminal」アプリをインストールしてください。


インストール後、スマホやタブレットなどのセントラルデバイスでBluetoothをオンにし、Serial Bluetooth Terminalを起動します。


画面左上の≡のアイコンをタップし、Devicesをタップします。



Bluetooth LEの方を開き、表示されているペリフェラル機器を選択します。



接続すると「Connecting to -unnamed-... Connected」と表示されます。
1と送信するとON「GPIO16番に接続された LED が点灯します」
0と送信するとOFF「GPIO16番に接続された LED が消灯します」



0 件のコメント:

コメントを投稿

Google Spread Sheetの利用

  以前に ESP32 で作っていたものを、Raspberry Pi Pico W + MicroPythonで再現してみました。 1.Googleスプレッドシートの設定 1.Google Drive → 右クリック → Google スプレッドシート 2.作成して共有をクリック