Simulink OnlineでTalkBack Readを使ってラズパイにコマンドを送る
前回はSimulink OnlineのTalkBack Writeブロックを使い、ラズパイからTalkBackでコマンドを受け取ってみた。今回は、逆にTalkBackからラズパイにコマンドを送って、ラズパイをブラウザから操作するようなシステムを作ってみる。
具体的には、TalkBackからラズパイに「led」「buz」というコマンドを送り、ラズパイがledというコマンドを受けたら基板上のLEDを光らせて、buzというコマンドを受けたら、ラズパイに接続したブザーを鳴らすというシステムをつくってみる。
TalkBack Readの使い方は、MathWorksの以下のページを参考にした。
https://jp.mathworks.com/help/supportpkg/raspberrypi/ref/talkbackread.html
また、ブザーについてはこれまでと同じく今回は以下のキットのものを使っている。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Buster)
MATLAB online (MATLAB R2022a)
Simulink online
ラズベリーパイに接続する回路
ブザーを鳴らすためにブレッドボードに回路を組んでラズパイのGPIOに接続するが、回路と接続は以下の記事のものと全く同じなのでこちらを参照。
MATLAB/SimulinkでRasberry Pi制御その3:Simulink OnlineからラズパイのGPIOにWriteして動かす(&ブザーを鳴らしてみる)
TalkBackのAPI
次に、ThingSpeak上でTalkBackを作成する。ここは前回と同じくThingSpeakのページを開き、Appsのタブから「TalkBack」を選択してTalkBackを作成する。今回はReadTestという名前でTalkBackを作成した。Simulink上でTalk Back Readブロックを使う時は、TalkBackIDとAPI Keyを設定して通信を行う。この画面の下の「Add a new command」でラズパイに送るコマンドを追加することができる。
これでTalkBackの準備は完了。
Simulink Onlineから動かす
いつものごとくMATLAB Onlineを開いて
open_system('raspberrypi_gettingstarted')
を実行して、raspberrypi_gettingstartedを開いて改造していく。
今回は以下のようにモデルをつくった。TalkBack Readブロックの設定は以下の通り。さきほどのTalkBack IDとAPI Keyを設定し、Command typeは文字列なのでString、Command length(コマンドの文字数)は3文字とした。Sample timeは2秒に設定して、2秒ごとにコマンドの確認を行うようにしている。
あとはSimulinkのモデルを実行した状態で、ブラウザのTalkBack上の「Add a new command」からコマンドを登録すれば、ラズパイをブラウザ経由で操作することができる。
以下が実行してみた様子。TalkBack上から「buz」というコマンドを登録するとラズパイのブザーがなり、「led」というコマンドを登録すると(ちょっとわかりにくいが)ラズパイ上のLEDが点灯する。
実行中も画像も載せておく。以下のように、コマンドが来たらString Compareで文字列を比較し、コマンドがledかbuzかを判断している。なお、TalkBack Readのstatusからはcommand実行時の状況に合わせた値が出てくるが、正常実行された場合は1が出力される。
これでTalkBack Readの使い方もわかった。TalkBackのWrite/Readを組み合わせれば色々なことができそう。
ところで、これまでは全てSimulinkで用意されたブロックを使ってシステムを作ってきた。ただ、今回のコマンドにより動作を変える処理などは、ブロックを組み合わせるよりMATLAB Functionを使った方がすっきりとシステムをつくることができる。
ということで、次回はMATLAB Functionを使って、今回のシステムをよりシンプルにモデルを作ってみたいと思う。
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。