2023年10月22日日曜日

ラズパイPicoWのBluetoothでSPPを使ってみた

 Raspberry Pi Pico Wは元々WiFiとBluetooth対応のワイヤレスモジュールを搭載していたのにもかかわらず最初はWiFiしか使えなかったんだけど、SDKがいつの間にかBluetoothにも対応していたので試してみた。

技適マークも本体に刻印してほしいよなぁ

環境はArduino IDE 2.2.1にEarle F. PhilhowerさんのArduino Core 3.6.0を使用した。こっちのほうがビルドが早いし。

SerialBTライブラリを覗いてみたんだけど、ESP32のBluetoothSerialみたいに接続状態のステータスを確認したりできないっぽい(private関数内にはあるようだけど)
とりあえずESP32でやったみたいにUARTデバイスをBluetooth化するスケッチを作ってみた。
#include <SerialBT.h>

void setup() {
  Serial2.setTX(4);
  Serial2.setRX(5);
  Serial2.begin(115200);//有線デバイスのBaudrateに合わせる

  SerialBT.begin();
  gap_set_local_name("PicoW BT");//Bleutoothデバイス名変更
}

void loop() {
  if (Serial2.available()) {
    SerialBT.write(Serial2.read());
  }
  if (SerialBT.available()) {
    Serial2.write(SerialBT.read());
  }
}

これでGP4(TX)とGP5(RX)に接続したUARTデバイスをBluetooth SPP化できる。いわゆる透過モードってやつ。例によってBluetoothの仮想COMポートに接続するときはBaudrateは何に設定しても問題なく接続できるんだけど、有線デバイス側のBaudrateを変えたいときはスケッチから変更しないといけない。RN42みたいにコンフィグモードとかを実装すればいいんだけれども…

デバイス名変更とかはライブラリの関数では用意されてなかったので直接弄ってるけど、ステータスとかも取得できるかもしれない。
Windowsの仕様でCOMポートは2つ認識されるんだけど"PicoW Serial"ってなってない方は削除してもOK。ちなみに上のスクショはデバイス名を変更する前に取ったスクショなのでデバイス名がデフォルトの長いやつになってる。

今のところはESP32のほうがステータスLED実装できたりするので便利かもしれない。

例によって5V系のマイコンにつなぐときはI2Cとか用のレベルコンバータを使用すると良いと思う。

0 件のコメント:

コメントを投稿