RaspberryPi pico wでmicro-ROSを動かす(Bluetooth編 その1)

前回までのあらすじ

micro-ROSの通信部をシリアル→Wi-Fiに変更し、エージェントとの通信を試みた。
いろいろと手を尽くしたが、残念ながらエージェントとの通信は成功しなかった。
Wondows11 + WSL + Dockerのネットワーク環境は魔境のようだった。

今回のテーマ

Wi-Fiでの接続はあきらめ、もう一つの無線通信手段である、Bluetooth(Serialプロファイル)にて接続を試みる。
エージェントはシリアルでの動作となる。

ソフト変更

以下のサイトを参考にカスタム仕様へ変更していく

platformio.iniの変更

board_microros_transportオプションをカスタムに指定する

board_microros_transport = custom

このオプションの指定で、いずれかの定義が1となる

  • MICRO_ROS_TRANSPORT_ARDUINO_SERIAL

  • MICRO_ROS_TRANSPORT_ARDUINO_WIFI

  • MICRO_ROS_TRANSPORT_ARDUINO_CUSTOM

  • MICRO_ROS_TRANSPORT_ARDUINO_WIFI_NINA

カスタム通信モジュールの実装

Bluetoothシリアルでの通信モジュールは提供されていないので、
シリアル通信モジュールを参考に実装する。

open/close/write/readの4種の関数および初期化時に呼ぶ関数の本体を用意する

Bluetoothシリアルでの通信モジュールは提供されていないので、
シリアル通信モジュールを参考に実装する。

標準のシリアル通信モジュール
ヘッダをinclude、ソースをsrcフォルダにそれぞれコピーした

micro_ros_transport.hの変更

シリアル版と区別するため、関数名をset_microros_bt_serial_transportsにした。(ここは任意)

micro_ros_transport.cppの変更

BluetoothシリアルもインターフェイルはUARTと同じなので、変更の必要はなかった。

main.cppの変更

変更点は以下の通り

  • Bluetoothシリアルを使用するためのヘッダファイルSerialBT.hをインクルードする

  • Bluetoothシリアル初期化処理SerialBT.begin()をコールする

  • set_microros_wifi_transports()→set_microros_bt_serial_transportsに変更する

コード(抜粋)

Bluetoothシリアルを使用するためのヘッダファイルをインクルード

#if (MICRO_ROS_TRANSPORT_ARDUINO_CUSTOM==1)
#include <SerialBT.h>
#endif

setup()関数内でコールされているセットアップ関数をBluetoothシリアルのものに切り替える。
なお、コンパイルオプションMICRO_ROS_TRANSPORT_ARDUINO_CUSTOMで切り替えられるようにしている

#if (MICRO_ROS_TRANSPORT_ARDUINO_SERIAL==1)
  set_microros_serial_transports(Serial); 
#elif (MICRO_ROS_TRANSPORT_ARDUINO_WIFI==1)
  set_microros_wifi_transports(ssid, psk, agent_ip, agent_port);
#elif (MICRO_ROS_TRANSPORT_ARDUINO_CUSTOM==1)
  SerialBT.begin(115200);             // BlueTooth-Serial用
  set_microros_bt_serial_transports(SerialBT);
#endif

Bluetoothライブラリの追加

上記サイトにBluetoothスタックを有効にするオプションの説明がある

platformio.iniに以下のビルドフラグを追加する

build_flags = -DPIO_FRAMEWORK_ARDUINO_ENABLE_BLUETOOTH

ビルドする

ビルド成功!!

この記事が気に入ったらサポートをしてみませんか?