Simulink OnlineからTalkBackを使ってラズパイからコマンド取得
前回はThingSpeakにチャネルをつくって遊んだが、ThingSpeakにはTalkBackというアプリが準備されている。TalkBackを使うと、ラズパイに任意に定義したコマンドを送ったり、逆にラズパイからTalkBackでコマンドを受け取ったりできる。
ということで、今回はまずSimulink OnlineのTalkBack Writeブロックを使い、ラズパイからTalkBackでコマンドを受け取ってみることにする。具体的には、ラズパイに接続した人感センサー(PIR)がHIGHになったときに、ラズパイからTalkBackに「alert」というコマンドを送るシステムをつくる。
TalkBack Writeの使い方は、MathWorksの以下のページを参考にした。
https://jp.mathworks.com/help/supportpkg/raspberrypi/ref/talkbackwrite.html
また、PIRセンサーについては、これまでと同じく今回は以下のキットのものを使っている。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Buster)
MATLAB online (MATLAB R2022a)
Simulink online
ラズベリーパイとブザーを接続
これまでと同様にブレッドボードは使わずに、ラズベリーパイとPIRはジャンパー線で直接接続した。接続は以下の通り。
- PIRのGNDをラズパイの+5V(2pin)に接続
- PIRのOUTをラズパイのGPIO17(11pin)に接続
- PIRのVccをラズパイのGND(9pin)に接続
実際に接続したのが以下の写真。
TalkBackを作成する
次に、ThingSpeak上でTalkBackを作成する。ThingSpeakのChannelを作ったときとどうように、まずはThingSpeakのページを開き、Appsのタブから「TalkBack」を選択する。
「New Talkback」から新しくTalkBackを作成し、以下のようにTalkBackTestを作った。今回は名前をTalkBackTestとした。このページのTalkBack IDと、API KeyをSimulink OnlineのTalkBackのブロックで設定して通信を行う。
これでTalkBackの準備は完了。
Simulink Onlineから動かす
いつものごとくMATLAB Onlineを開いて
open_system('raspberrypi_gettingstarted')
を実行して、raspberrypi_gettingstartedを開いて改造していく。
今回は以下のようにモデルをつくった。PIRセンサーがHIGHになったらEdgeを検出して(最初センサー値をそのままTalkBackに入れるようにしたら大量にコマンドが発行されてしまったので)、LEDを光らせると同時にTalkBack Writeブロックで先ほどつくったTalkBackにalertというコマンドを送っている。
以下が実行してみた様子。PIRに手をかざすとエッジが検出されて、alertというコマンドがTalkBack上に送られていることがわかる。
画像も載せておく。以下のように、alertというコマンドが登録されている。今回はコマンドを記録するだけだが、例えば他のデバイスでTalkBackのalertというコマンドを読んでブザーを鳴らすとか、色々なシステムに応用できそう。
TalkBackも簡単に使えたので、色々と便利そうだな~という印象。今回はTalkBack Writeブロックだけ使ったが、次回はTalkBack Readブロックを使って、ブラウザ上でコマンドを発行し、そのコマンドに応じた動作をラズパイにさせるようなシステムを作ってみたいと思う。
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。