IoT何をいまさら(21) ESP32、BLEとりあえずテスト

相当昔にBluetoothの解説書を読んだ記憶があるのですが、「読んだ」という記憶だけであって、何を覚えておりませぬ。ましてや規格書など読む元気もありません。今回インストールした、ESP32のATコマンドセットの最新版は、

Bluetooth Low Energy (BLE)

をサポートしています。UARTやWiFiのようにお手軽につながる訳はないのですが、とりあえず「物理的に通信している」ことくらいは確かめておきたい。

まあ、後で(と言って何時かは分かりませぬが)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ボタンを押してもそうなるのですが、ソフトウエアで制御するためにはちゃんとデータシート通りにやらないとできない。

一応、スキャンを掛けたところの画面で本日はお開き。

 

塗りつぶしばかりですが、実際はそこにスキャンした相手の情報が見えております。

IoT何をいまさら(20) ESP32 WiFi通信のテスト へ戻る

IoT何をいまさら(22) Raspberry Pi 再稼働 へ進む