Arduino互換のESP32を使ってラジコンを作るハンズオンに行ってきました。
ジョイスティックの入力を受け取るESP32と、ラジコンを動かすESP32のふたつのマイコンを使ってラジコンカーを制御します。
途中、BLEの通信が上手くいかなかったときのデバッグ方法が分からなかったので調べてみました。
コードはそれぞれのマイコンに分かれているので、どちらのコードに問題があるのか切り分ける必要があります。
それぞれ単体できちんと動作できているのか、動作確認のために LightBlue というアプリを使ってみました。
LightBlue (iOS/Android/Other)
https://itunes.apple.com/jp/app/lightblue-explorer/id557428110?mt=8
https://play.google.com/store/apps/details?id=com.punchthrough.lightblueexplorer&hl=ja
構成
- ラジコンカー → ペリフェラル(アドバタイズする方、サーバ側)
- ジョイスティック → セントラル(アドバタイズされているUUIDを見て接続する方、クライアント側)
デバッグのためのLightBlue設定
ペリフェラル/サーバ側(ラジコンカー)の動作確認
サーバ側の動作確認のため、クライアント側の動作をアプリで擬似的に行う。
- 近くのペリフェラルを検索(アプリを立ち上げると最初の画面の「Peripherals Nearby」にリストで表示される)
- リストに表示されている中から、サーバ側のコードに書かれているデバイス名をタップ(
LEDevice::init("XXX");
のXXX
の部分がデバイス名) - キャラクタリスティックをタップ(以下のようにUUIDとプロパティが表示されている部分)
0x12345678-9ABC-DEFG...
Properties: Write Read
- 右上の「Hex」をタップ、「String」に変更(もしくはその他の送受信しているデータ型に合わせる)
- 「Write new value」をタップし、新しい値を入れる
- サーバ側で
getValue()
している値をシリアルモニタに出力、値が変わっていることを確認
セントラル/クライアント側(ジョイスティック)の動作確認
クライアント側の動作確認のため、サーバ側の動作をアプリで擬似的に行う。
- アプリの最初の画面の下の方にある「Virtual Peripherals -> Create Virtual Peripheral」をタップ
- 「Blank」をタップし「Save」
- 作成した「Blank」をタップ
- 「General -> Name」に任意のデバイス名を入力
- 「UUID: 1111」となっている右横の「i」をタップ、サービスUUIDを入力(サービスUUIDはコード上に書かれているもの)
- キャラクタリスティックをタップ(以下のようにUUIDとプロパティが表示されている部分)
0x12345678-9ABC-DEFG...
Properties: Write Read
- デフォルトで「2222」となっているキャラクタリスティックUUIDを、コード上に書かれているUUIDに変更
- 「Characteristic User Description」に任意の説明を入力
- 右上の「Hex」をタップ、「String」に変更(もしくはその他の送受信しているデータ型に合わせる)
- 「PROPERTY -> READ」をタップし、必要なプロパティを選択 ※送受信で同じプロパティを選択しないとデータのやり取りができないので注意
- ジョイスティックを実際に動かし、LightBlueアプリ画面(キャラクタリスティックをタップした後の画面)にある「Characteristic User Description」の下にある値の表示が変化することを確認