LEGO Marioをセンサとして利用したい(1)
この記事のはBLE予備知識ゼロ、もちろんLEGO Wireless Protocolの知識もゼロ、電子工作は趣味レベルの自分が、レゴマリオでセンサの値を読み取るまでの現在進行系のログです。
先日、子供を乗せて自転車でNintendo TOKYOに行ったらレゴマリオを息子が欲しい欲しいと言うので「パパのものだからね!使うときはパパに貸してと言って終わったらちゃんと片付けるんだよ」と念を押して購入。
さっそく子供と開封して使ってみたら、どうもBluetooth Low Energyで通信するカラーセンサー、ジャイロセンサー等として使えそうだなーと感じ、以前、ESP-WROOM-02とTCS34725を使って作ったHueの色変える玩具をLEGO Marioで再現したいなぁと思いはじめました。(写真はその玩具の残骸。当初は空のペットボトルに基盤をねじ込みセンサ部に紙コップをかぶせていた)
恥ずかしながら、BLEに関する予備知識は0の状態から、なんとか値を読めないかと調べていったら、@oobaさんが色々とまとめてくださっており、BLEのお作法に加え、レゴマリオがLEGO Wireless Protocolなるものでお話しているところまで理解しました。
ということで、BLE予備知識ゼロ、もちろんLEGO Wireless Protocolの知識もゼロ、電子工作は趣味レベルの自分が、レゴマリオでセンサの値を読み取るまでの記録を残していきたいと思います。
BLE(Bluetooth Low Energy)とは何か
BLEとは低電力で動くBluetooth……というだけでなく、クラシックなBluetoothと通信方法が大きく違っていて、結構カッチリと仕様が決められているそうです。
BLEについて参考にさせていただいたのは『開発視点の超簡単BLE入門』というページです。こちらのJellyWareさんは、ブラウザ上で超簡単にBLEを動かせるライブラリを公開されていたり、めちゃくちゃ有用有益な情報をまとめられていたりと、神様のようなクラゲ様でございます。
BLEについて理解が必要な部分は大きく以下の2点かと思います。
- BLEのデバイスがどのように接続されるかのフロー
- 接続後どのようにデータをやり取りするかの方法と種類
まずは接続までのフローをまとめます…。とその前に、まずは次の用語だけ覚えます。説明は正しい保証はありません。ざっくり自分の中でのイメージです。
Central[セントラル]: BLEデバイスと接続して通信する親。今回はPC。
Peripheral[ペリフェラル]: BLEデバイス、センサー側(子)。今回はマリオ。
BLEでの接続手順
さて、フローの話に入ります。BLEの接続までの流れは非常にシンプルです。予備知識がないので、広告って何だよって思っていたのは内緒です。
1) ペリフェラルは常にAdvertisingメッセージを発している = Advertise
2) セントラルがAdvertiseしてるデバイスを取得する = Scan
3) セントラルが任意のペリフェラルと接続 = Connect
4) 諸々終わったらペリフェラルと接続解除 = Disconnect
以上が、BLE でのセントラル(PC)とペリフェラル(レゴマリオ)の接続手順になります。予備知識がゼロのため、あまり頭には入ってきません。そこで、とりあえずこの手順を自分のものにするべく、実際に手を動かしました。
XcodeのAdditional Tool(Additional Tools for Xcode)にはBluetooth ExplorerというBluetoothのデバッグツールがあるため、そこで上記手順を確認します。
ツールを起動するとメニューのDevicesの中に、Low Energy Devicesという項目があるので、そこでBLE用のツールを起動します。では、手順をリアルに追っていきましょう。
まずはAdvertiseです。レゴマリオの場合、背面のBluetoothマークのボタンを押すことで小気味よい音楽と共にAdvertiseがはじまります。(1)
続いて、先程開いたLow Energy Devicesを開き、Start Scanningボタンを押下します。すると、デバイスのリストの中にLEGO Marioの文字が!(2)
ここで、LEGO Marioを選択肢、Connectボタンを押すと接続完了となります。(3)
同じ場所のDisconnectを押すと接続は解除されます。(4)
以上で、BLEの接続(と接続解除)の手順の理解、および、デバッグツールを使った手順の追体験は完了です。基本的にあらゆるBLEデバイスはこの手順で接続が行われるそうです。一部例外として、Advertisingメッセージ自体に少量のデータを乗っけることができるため、接続せずにセントラルにデータを渡すビーコンという使い方もあるそう。これは将に、コロナ陽性者接触確認アプリで使われている技術になります。
(その2 - BLEのデータ通信とHello, LEGO Wireless Protocol - へ続く)