#はじめに
toioのフリー走行モードで遊んでいたのだけども、速度を変えてみると想像以上にしっかり微調整できた。BLEで繋げばtoioを操作できるとのことだったので、制御ガチ勢ご愛用のMATLABで動かしてみた。
#この記事のターゲット
- MATLABからBLEを使ってみたい人
- toioをMATLABで動かしたい人
#つかったもの
- MATLAB R2019b(R2019b以降からble関数がつかえるっぽい)
- toio cube v02.0003
- BLEが使える環境のPC(僕はMacbook Air 2018をつかった)
一番驚いたのが、MATLABに何か別途Toolboxを入れなくてもBLEにつなげるところ。やるなぁ〜
#MATLABとtoioをつなげる
まずは、つなげる先のtoioを見つけてみる。
blelist %BLEデバイス探す
多分こんなリストが出てくる。toio Core Cubeって書いてあるところのAddressをメモする。
また、複数のtoio Core Cubeがでてきたら、(自分がおそらくもっているであろう)RSSIがゼロに近いtoioのAddressをメモする。
(もくもく会などではご注意を。。。)
次にtoioとつなげてみよう。toioとMATLABをつなげる際にはble関数を用いる。
たったワンコマンドでつなげるのはホントすごい。
% 引数にメモしたアドレスを入れる。
b = ble("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
ここからtoioに対して様々な操作を行うことができる。これから行う作業の前に
toioの技術仕様を読んでみよう。
https://toio.github.io/toio-spec/docs/ble_communication_overview
"キューブの機能を利用"にあるService UUIDをメモする。
そのあと、自分がやりたい操作をCharacteristicsから選んで様々な操作をしていくが、ここではモータを動かしてみる。リンク先のページにあるCharacteristic UUIDをメモする。
それぞれのUUIDを、bleで出力したオブジェクトのbからcharacteristicメソッドを呼び出す。引数には先程のSerice UUIDとCharacteristic UUIDを順に指定する。
c = b.characteristic(...
"10B20100-5B3B-4571-9508-CF3EFCD7BBAE",...
"10B20102-5B3B-4571-9508-CF3EFCD7BBAE");
このあとにオブジェクトのcからwriteメソッドを呼び出せば、モータに対して様々な操作を行える。writeメソッドに与える情報はデータ位置の0から順に書いた設定パラメータと
プロパティである。詳細は下記ページを参照すること。
https://toio.github.io/toio-spec/docs/ble_motor
例として、toio cubeがクルクル回りだすコマンドの例を示す。
今回は操作を一方的に指定したかったため、'withoutresponce'を追加した。
% 例: 出力0x64で回転する
c.write([1,1,1,100,2,2,100],'withoutresponse');
操作が終わったら、clear関数で作ったオブジェクトを削除する。
これで toioとの通信も自動的に解除される。
clear
#MATLABへtoioの情報をおくる
情報の読み取りも基本的にはwriteとやることは同じ。
何も考えずに、ble関数でオブジェクトを作っておく。
blelist
% 引数にメモしたアドレスを入れる。
b = ble("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX");
そして、Service UUIDとCharacteristic UUIDを設定する。
今回はお試しでモーションセンサを使ってみる。
c = b.characteristic(...
"10B20100-5B3B-4571-9508-CF3EFCD7BBAE",...
"10B20106-5B3B-4571-9508-CF3EFCD7BBAE");
その後、セミコロンなしで何も考えずにreadを呼び出す。
すると現在のtoioの姿勢などに関する情報が出力される。
c.read()
出力結果は以下サイトに示されたデータ位置に該当する情報となる。
(toioのバージョンが古いと3つしか値が出てこないかも。)
https://toio.github.io/toio-spec/docs/ble_sensor
#おわりに
- MATLABからtoioをBLEを介して操作した。
- toioの情報をMATLABへ送信した。