LoginSignup
13
7

More than 3 years have passed since last update.

MATLABとmicro:bitをBLEで繋げて遊ぶ

Last updated at Posted at 2020-08-22

はじめに

MATLAB及びSimulinkのとってもいいところとして、arduinoやRaspberry Piと言ったハードウェアとの連携が挙げられます。私はこの機能好きすぎて、qiitaに下記記事を書いたりtwitterに動画投稿したりしています。

arduino(及びraspi) MATLAB連携とSimulink連携の微妙な違い

こうなると、もっと色々なハードウェアと連携したくなってくるのが人のサガです。
そんな時にチェックするといいのが、MATLABのアドオン置き場であるFile Exchangeのハードウェアサポートパッケージのページです。
2020年8月現在、約250ものハードウェア連携用アドオンが掲載されており、正直ここを見ているだけでヨダレが出てきます。ぐへへ。

image.png
新しい観点でのハードウェア沼に嵌りそうな気配が…(笑)

ある日、上記のページを閲覧しているとそこにはなんとmicro:bitの名前が!
https://jp.mathworks.com/matlabcentral/fileexchange/60273-simulink-coder-support-package-for-bbc-micro-bit-board
image.png

私micro:bit とっても好きなんですよね~。何がいいって、導入障壁がarduinoよりもさらに低い点が。電子工作趣味の布教には大変頼もしい存在です。

そんなmicro:bitがMATLABと連携できるなんて夢のよう…そう思っていたのも束の間。

image.png

そんな・・・ あんまりだよ!こんなのってないよ・・・絶対おかしいよ!*

※MATLAB Coder, Simulink Coder:これらのお値段は車が買えるぐらいとなっております。

そんな感じでMathworksさんにがっかりさせられた私ですが、ある日思いもしないところから朗報が入りました。

MATLABからtoioを動かしてみた

なんと、MATLABとBLEの連携はすごく簡単というじゃないですか(2019b以降)。ならば、ハードウェアサポートがなくてもとりあえずMATLABでmicro:bitを動かすことは出来るってことね。流石MATLAB、大好き!抱いて!
(とは言いつつも、やっぱりCoder類抜きでの連携は強く要望します。キリッ)

前置きが長くなりましたが、BLEを使ってMATLABとmicro:bitをサクっと連携させていきます。出来上がりとしては下記のような感じになります。

下記、①micro:bit側の準備 ②MATLABでのコーディング の順に説明を行います。①はMATLAB固有の設定が必要ということではないので、既にmicro:bitのBLEを使っている、という方であれば①は飛ばして頂いてOKです。

①micro:bit側の準備

これに関しては、ここで詳しく書くよりも外部の秀逸な記事がいっぱいあるのでそちらを参照頂ければと思います。

BLEの有効化およびセンサ類の有効化は下記記事のステップ1~ステップ3までを参照。
ステップ2を実施し忘れたり、ステップ3を実施し忘れたりしがちなので注意。
https://qiita.com/yokmama/items/5522fabfb5b9623278e2

BLEの有効化について、もっと順を追って知りたい!という方は下記記事を参照。
https://sanuki-tech.net/micro-bit/bluetooth/temperature/

ちなみに私はmicro:bitのファームが古くてエディタとの連携が出来なくなっていたので、下記記事を参考にファーム更新を行いました。

ファームの更新
https://sanuki-tech.net/micro-bit/appendix/update-firmware/

また私がmicro:bitに書き込んでいるプログラムは下記になります。
BLE接続されると、笑顔マークがチェックマークに切り替わるようにしています。
image.png

②MATLABでのコーディング

忙しい人向け

micro:bitに文字を表示するだけでよければMATLABのコードは下記です、超簡単。
BBC micro:bit [tuvuv]の部分は、人によって設定が異なる場合がありますのでを参考に各自修正下さい。

% BLE接続
b = ble("BBC micro:bit [tuvuv]"); 

% micro:bitに所定の文字を流すためのUUIDを設定
ledTextCharacteristic =  characteristic(b,"E95DD91D-251D-470A-A062-FA1922DFA9A8", "E95D93EE-251D-470A-A062-FA1922DFA9A8");

% 文字を流す
write(ledTextCharacteristic,"MATLAB");

上記コードの実行結果が先に紹介した動画となります。

段取りを知りたい人向け

導入にて紹介済みの記事 MATLABからtoioを動かしてみた を参考に、まずはMATLABがmicro:bitを認識してるかを下記コマンドでチェックしてみます。


blelist

image.png

いますね。
MATLABのBLE接続関数は、NameとAdressのどちらでも引数として使えます。今回はNameを使って行きましょう。
ble:Bluetooth Low Energy 周辺デバイスに接続


b = ble("BBC micro:bit [tuvuv]");

micro:bitに書いてあるプログラムが期待通り動いている事、およびMATLABとの連携が出来たことをこれで確認できます。

下記コマンドを打つことで、接続したmicro:bitで有効となっている機能を確認できます。micro:bitで利用できる機能としては、LEDに文字を表示したり、温度を測定したり、加速度を計測したりできます。


b.Characteristics

image.png

…ごめん、どれが文字表示とか温度測定なんですっけ?(怒)

こうなると逐一調べるしかありません。私は下記ページを参照に調べました。
https://lancaster-university.github.io/microbit-docs/resources/bluetooth/bluetooth_profile.html

サービス名 ServiceUUID CharacteristicUUID Attributes
Microbit Event E95D93AF-251D-470A-A062-FA1922DFA9A8 E95D9775-251D-470A-A062-FA1922DFA9A8 1×2  string
Client Event E95D93AF-251D-470A-A062-FA1922DFA9A8 E95D5404-251D-470A-A062-FA1922DFA9A8 1×2 string
Client Requirements E95D93AF-251D-470A-A062-FA1922DFA9A8 E95D23C4-251D-470A-A062-FA1922DFA9A8 "Write"
MicroBit Requirements E95D93AF-251D-470A-A062-FA1922DFA9A8 E95DB84C-251D-470A-A062-FA1922DFA9A8 1×2 string
Accelerometer Data E95D0753-251D-470A-A062-FA1922DFA9A8 E95DCA4B-251D-470A-A062-FA1922DFA9A8 1×2 string
Accelerometer Period E95D0753-251D-470A-A062-FA1922DFA9A8 E95DFB24-251D-470A-A062-FA1922DFA9A8 1×2 string
LED Matrix State E95DD91D-251D-470A-A062-FA1922DFA9A8 E95D7B77-251D-470A-A062-FA1922DFA9A8 1×2 string
LED Text E95DD91D-251D-470A-A062-FA1922DFA9A8 E95D93EE-251D-470A-A062-FA1922DFA9A8 "Write"
Scrolling Delay E95DD91D-251D-470A-A062-FA1922DFA9A8 E95D0D2D-251D-470A-A062-FA1922DFA9A8 1×2 string
Temperature E95D6100-251D-470A-A062-FA1922DFA9A8 E95D9250-251D-470A-A062-FA1922DFA9A8 1×2 string
Temperature Period E95D6100-251D-470A-A062-FA1922DFA9A8 E95D1B25-251D-470A-A062-FA1922DFA9A8 1×2 string
Button A State E95D9882-251D-470A-A062-FA1922DFA9A8 E95DDA90-251D-470A-A062-FA1922DFA9A8 1×2 string
Button B State E95D9882-251D-470A-A062-FA1922DFA9A8 E95DDA91-251D-470A-A062-FA1922DFA9A8 1×2 string

すぐに遊べそうなのはLED Text Accelerometer Data Temperature あたりでしょうか。ちなみにAccelerometer Period Temperature Periodとかは更新周期の設定確認用っぽいです。

上記UUIDリストを参考に、温度・加速度・文字流しをやってみます。
データの読み書きは下記ページを参考にしました。
https://jp.mathworks.com/matlabcentral/answers/481785-matlab-bluetooth-ble


tempCharacteristic = characteristic(b,"E95D6100-251D-470A-A062-FA1922DFA9A8","E95D9250-251D-470A-A062-FA1922DFA9A8");
accelCharacteristic = characteristic(b,"E95D0753-251D-470A-A062-FA1922DFA9A8", "E95DCA4B-251D-470A-A062-FA1922DFA9A8");
ledTextCharacteristic =  characteristic(b,"E95DD91D-251D-470A-A062-FA1922DFA9A8", "E95D93EE-251D-470A-A062-FA1922DFA9A8");

Temp = read(tempCharacteristic);
Accel = uint16( read(accelCharacteristic) );
write(ledTextCharacteristic,"MATLAB");

文字流しの結果は流石に省略します。
温度は下記結果となりました、だいたいあってそうです。
(ちなみに室温:27℃。マイコンで計測すると高めに出るのはあるあるかと…)
image.png

加速度はバイナリで帰ってきます。
image.png

数値変換を下記参考に実施する必要がありますが、これについては別途。
【BLE初心者必見】obniz BLEでmicro:bitの加速度センサーとボタンの状態を取得する方法

まとめ

micro:bitはもちろんのこと、最近ではM5StackやObnizといったBLEを標準装備したマイコンが数多く見られます。そんなマイコンとMATLABを簡単に繋げられることは夢が広がりますね!どんどん連携して、どんどんMATLAB芸を世に出して行きましょう。

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7