micro:bitの各種BLEサービスを試せるAndroidアプリを作ってみた
最近、興味本位でmicro:bitを購入しました。micro:bitは、小さな基板上に温度、加速度、磁力といったセンサを搭載しており、それらセンサ情報をBluetooth Low Energy (BLE)のサービスで他のデバイスに提供することができます。また、UARTサービスを利用すれば、BLE経由でmicro:bitとシリアル通信することができます。今回は、Androidスマートフォンからmicro:bitの各種BLEサービスを試すために作成したアプリを紹介したいと思います。
AndroidアプリのソースはこちらのGithubで公開します。本記事の中でソースの解説はしませんが、ソースにはある程度コメントは入れてあります。また、アプリを作成するにあたって参考にさせていただいたサイトを最後に紹介します。
尚、micro:bitのBLEサービスをただ試すだけなら、Google Playで公開されているnRF Connect等のアプリを使った方が簡単です。今回は、自作アプリでmicro:bitと通信できれば、今後おもしろいものが作れるかもしれないと思い、あえて自作にチャレンジしました。BLEの基本的な仕組みについての良い勉強にもなり、micro:bit以外にも応用ができそうです。
動作環境
Android Studio 3.1.4
実機: S7-SH(Android 11)
micro:bit側のプログラム
micro:bitでBLEを使うためには、まずMake Codeのプロジェクトの設定を変更する必要があります。
こちらのサイトでとてもわかりやすく解説されています。
monomonotech.jp
プログラムはお好みで構いませんが、私は次のように作りました。
”最初だけ”のイベントで、利用したいBLEサービスを立ち上げます。
”Bluetoothデータを受信したとき”のイベントで、受信したデータをそのまま送り返します(エコーバック)。
受信したことがわかるように、LEDにも受信データを表示します。
接続/切断したことがわかるように、接続/切断それぞれのイベントでLEDにアイコンを表示します。
アプリ仕様
参考にさせていただいたサイト
BLEを使ってAndroidとマイクロビットをつなげるまで(1) | ECF Tech
周辺のBLEデバイスをスキャンしてmicro:bitを見つけるところから、センサの値を取得するところまで丁寧に解説されており、とても参考になりました。
04.BLEデバイスから値を読み込む処理を作る
先にご紹介したサイトは、Notificationモード(micro:bitから一定周期でセンサデータを通知するモード)を利用していますが、Androidアプリから要求したとき(ボタンを押したとき)だけmicro:bitからセンサデータが返信されるようにする場合の処理はこちらを参考にしています。
06.BLEデバイスへ値を書き込む処理を作る
micro:bitのUARTサービスに文字列を送信する処理は、こちらを参考にしています。
ハマりかけたこと
初めの頃、デバイススキャンでmicro:bitを発見しサービスを取得したときに、温度計サービスや加速度計サービスが取得できない事象が発生しました(その他のデフォルトで立ち上がるサービス(Generic Access 等)は取得できる)。既成アプリのnRF Connectを使っても同じ事象だったので、私のスマホ固有の事象かもしれないと諦めかけましたが、ダメ元でスマホとmicro:bitのペアリング(A、Bボタンとリセットボタンを同時に押すやつ)を実行してから再トライすると、無事に温度計サービスや加速度計サービスを取得できました。その後は、ペアリングしなくても問題なくサービスを取得できています。ペアリングはその時が初めてではなかったので、本当にそのおかげで解決したのかは不明です・・・