Simulink OnlineからRaspberry PiのGPIO Read/Writeをやってみる
前回はSimulink OnlineでGPIO Writeブロックをつかって、Raspberry PiのGPIOを制御してラズパイに接続したブザーを鳴らしてみた。
今回はもう少し発展させて、GPIO Readブロックをつかってラズパイに接続したタクトスイッチ(ボタン)の入力をReadし、その値を前回のようにGPIO Writeで書いてラズパイに接続したブザーを鳴らしてみる。
前回同様、ブザーは以下のキットのものを使っている。
実行環境
Raspberry Pi 4 Model B
Raspberry Pi OS (Buster)
MATLAB online (MATLAB R2022a)
Simulink online
ラズベリーパイに接続する回路
回路図は前回GPIO19に接続したブザーの回路に加えて、GPIO27にスイッチを接続している。スイッチはプルアップして接続しているので、ボタンを離しているときはGPIO27にHIGHが、ボタンを押しているときはLOWが入力される。
実際に接続したのが以下の写真。ブレッドボードの接続は単純なので(というか図を書くのが面倒なので)割愛する。
Simulink Onlineから動かす
次に、Simulink Onlineでモデルを作っていく。ベースは前回のGPIO Writeのモデルだが、今回はこちらにGPIO Readブロックを追加していく。まず、ライブラリブラウザーから「gpio」で検索するとGPIO Readが出てくるので、前回信号を発生させていたPulse generatorブロックを、GPIO Readブロックに置き換える。また、GPIO Readブロックをダブルクリックして、以下のようにGPIO numberをGPIO27に設定する。
回路図的にはスイッチを押すとGPIOへの入力がLOWになり、離すとHIGHになるため、このままだとスイッチを離している間はずっとブザーが鳴り続けてしまう。
そのため、今回は以下のようにNOTブロックをGPIO Readブロックの後段に入れて、論理を反転させることで、スイッチを押しているときにブザーが鳴るようにした。(特に何も考えずにconvertブロックは残してたけど、そもそもGPIO Readからは1 or 0が出てくるので消去してもOKだと思う)
あとは前回と同様に実行するだけ。今回はConnected IOを使って実行してみる。以下が実際に実行した結果。ボタンを押しているときにブザーが鳴っていることがわかる。
Connected IOでネットを介してラズパイに接続しているため、タイムラグが大きいんじゃないかと思ったが、意外とタイムラグは少なかった。ちなみに、実行中は以下のようにScopeを追加することで、リアルタイムに入出力の変化を見ることもできる。
GPIOブロックはこの辺にして、次回はまた違うブロックをつかってラズベリーパイを動かしてみたい。
参考文献
この本のMATLAB/Simulink 6か月ライセンスを使ってやってます↓
Interface 2022年 9月号
MATLAB/Simulink記事まとめ
MATLABとSimulinkの記事は以下にまとめてます。