相当昔にBluetoothの解説書を読んだ記憶があるのですが、「読んだ」という記憶だけであって、何を覚えておりませぬ。ましてや規格書など読む元気もありません。今回インストールした、ESP32のATコマンドセットの最新版は、
Bluetooth Low Energy (BLE)
をサポートしています。UARTやWiFiのようにお手軽につながる訳はないのですが、とりあえず「物理的に通信している」ことくらいは確かめておきたい。
※「IoT何をいまさら」投稿順Indexはこちら
まあ、後で(と言って何時かは分かりませぬが)BLEをちゃんと勉強することにして、
ESP32 AT Instruction Set and Examples
の通りにやれば、動作確認できるでしょ、Examplesなんだし、という安直な考えでExamplesを見てみました。一番簡単なBLEのExampleは、
iBeaconのアドバタイズを、WeChatの機能で見つける
というものでした。iBeaconはアップル?くらいな知識。WeChatは名は聞いていても使っておりません。なにか、WeChatの代わりに「アドバタイズ」というものを受け止めてくれるBLEの通信相手が欲しい、ということで、Playストアをあさってインストールしたのは、以下のアプリであります。
LightBlue
拳骨マークのアイコンが力強いです。これは、BLEの通信の解析などに使えるソフトだそうで、今回みたいなケースでは利用可能だと思います。これをスマホに入れて、ESP32側で「アドバタイズ」するのを待ち受けようという段取りです。ESP32にATコマンドを打ち込みます。
Example通りに操作します。まず、「サーバー」モードにせよとあります。
AT+BLEINIT=2
2がサーバモードの指示ですね。次がアドバタイズする「内容」なのですが、結構いろいろあるパラメータをぐちゃっとつなげて16進にして渡さないとならないので、サンプルそのまま
コピペ
で入力。そして最後に
AT+BLEADVSTART
スマホのスクリーンショットを掲げておきますが、繋がりました。あっけない、と言えば、あっけない。もっとトラブルかと思っておりましたが、
接続を確認するだけ
なら道は近かったのでした。しかし、実用的なアプリとするためには、プロファイルやらなんやら、いろいろ勉強せねばならないことが山積み。読むものが沢山ありすぎて何時になるやら。先にWiFiでアプリを作ろうと軟弱に考えているので、相当先。
しかし、Device Addressのところ塗りつぶしてありますが、本当にこれESP32のデバイスのアドレスなの?
そんなことも確かめない内に実行していました。ATコマンド側の仮想端末を見れば、接続しているスマホのアドレスが見えている。まあ、大丈夫そうだが、念のため、
AT+BLEADDR?
でESP32側のアドレスを表示し、スマホの画面のアドレスと一致確認。スマホ側でディスコネクトすれば、AT側にDISCONNETがでる。ま、繋がってますね。
一応、よくやる周辺のBTデバイスをスキャンというやつをやりたかったので、サーバモードから、クライアントモードに変えたかったのですが、先ほどのAT+BLEINITコマンドにクライアントの1を代入してもエラーになります。
切れてRESETボタンを押して再起動
してしまったのですが、よく読めばデータシートにちゃんと書いてありました。引用しておきます。
After being initialized, the BLE role cannot be changed directly. If the user wants to change the BLE role, AT+RST or AT+BLEINIT=0 needs to be called first.
なんのことはない、未初期化状態を示す 0 を一度代入してから、1を代入すればよかったのでした。RESET後の状態を見ると 0 になっています。
まあ、RESETボタンを押してもそうなるのですが、ソフトウエアで制御するためにはちゃんとデータシート通りにやらないとできない。
塗りつぶしばかりですが、実際はそこにスキャンした相手の情報が見えております。