【番外編】猫に調べさせるまでもなかった!Raspberry PiのGPIO

0
805

以前の記事「【番外編】Scratch 2の猫に、Raspberry PiのGPIOを調べさせよう!」で、Raspberry Piの各GPIOが既定でプルアップ/プルダウンのどちらに設定されているか調べましたが、その後、最近のRaspbianには”WiringPi“が既にプリインストールされていて、LXTerminalで各GPIOの設定一覧表が出力できることが分かりました。

今回使った部品

  • Raspberry Pi 3 Model B × 1

今回は、WiringPiのコマンドでGPIOの設定を確認するだけなので、必要なのはRaspberry Piだけです。

WiringPiのコマンドでGPIOの設定を出力する

LXTerminalを起動し下のコマンドを実行します。

gpio readall

出力の”BCM”列がGPIO番号を示し、”Mode”が入出力設定、”V”がコマンド実行時の状態(High/Low)を表しています。

Raspberry Piの起動後にScratch等でGPIOの設定を変更する前なら、右の通りになっているはずです。

この出力は、「【番外編】Scratch 2の猫に、Raspberry PiのGPIOを調べさせよう!」での調査結果 ↑ や右のSoCのデータシートと一致しています。

Scratch 1.4の操作による出力結果の遷移

【第5回】のときと同じように「Scratch 1.4」を起動してGPIOサーバーを開始しておきます。

カテゴリー「制御」のブロック「▼を送る」を右クリックして「新規/編集…」を左クリックします。

出てきた「メッセージの名前:」画面の入力欄に”config17out”と入力して「OK」ボタンをクリックします。

できたブロック「config170ut▼を送る」をパレットに置いたままクリックすることで、命令が実行されます。ブロックの縁が白く光るようにしっかりクリックしないと実行されません。

LXTerminalでもう一度、下のコマンドを実行します。

gpio readall

ブロック「config17out▼を送る」の実行で、BCM列”17(GPIO17)”番の設定が”IN(入力)”から”OUT(出力)”に変わりました。

もう一度、カテゴリー「制御」のブロック「▼を送る」を右クリックして「新規/編集…」を左クリックします。

出てきた「メッセージの名前:」画面の入力欄に”gpio17on”と入力して「OK」ボタンをクリックします。

できたブロック「gpio17on▼を送る」をパレットに置いたままクリックすることで、命令が実行されます。ブロックの縁が白く光るようにしっかりクリックしないと実行されません。

LXTerminalでもう一度、下のコマンドを実行します。

gpio readall

ブロック「gpio17on▼を送る」の実行で、GPIO17のV列が”0(Low)”から”1(High)”に変わりました。

もう一度、カテゴリー「制御」のブロック「▼を送る」を右クリックして「新規/編集…」を左クリックします。

出てきた「メッセージの名前:」画面の入力欄に、今度は”config4inputpulldown”と入力して「OK」ボタンをクリックします。

できたブロック「config4inputpulldown▼を送る」をパレットに置いたままクリックすることで、命令が実行されます。ブロックの縁が白く光るようにしっかりクリックしないと実行されません。

カテゴリー「調べる」のブロック「 ( スライダー▼ ) センサーの値」の”▼”をクリックして出るメニューに”gpio4″ができているのでクリックします。

できたブロック「 ( gpio4▼ ) センサーの値」のチェックボックスにチェックを入れます。

画面右上のステージに変数モニター「 gpio4センサーの値 (0) 」が表示されます。

このときのgpio4センサーの値 “0”は、GPIO4の設定が既定では”pullup(1)”だったものが、Scratch 1.4のブロック「config4inputpulldown▼を送る」を実行したことで”pulldown(0)”に変わったことを表しています。

LXTerminalでもう一度、下のコマンドを実行します。

gpio readall

こちらもブロック「config4inputpulldown▼を送る」の実行で、GPIO4のV列が”1(pullup)”から”0(pulldown)”に変わっています。

再起動後の設定を確認する

Scratch 1.4でブロックを実行したことが、Raspbianの再起動でリセットされるか確認する為、タスクバーのメニューアイコンから「Shutdown」をクリックします。

ここでは、「【STEP-21】Raspbianのデスクトップにショートカット追加」で作成したショートカットは使いません。

出てきた「Shutdo…options」画面の「Reboot」ボタンをクリックして再起動します。

LXTerminalでもう一度、下のコマンドを実行します。

gpio readall

GPIO4の設定が既定では”pullup”なのに、V列が”0(pulldown)”のままで設定がリセットされていませんでした。

もう一度、タスクバーのメニューアイコンから「Shutdown」をクリックします。

出てきた「Shutdo…options」画面で今度は「Shutdown」ボタンをクリックして、Raspberry Piの電源を一旦、完全に遮断し、2~3秒たってから再び電源を投入してRaspbianを起動します。

LXTerminalで下のコマンドを実行します。

gpio readall

今度は、GPIO4のV列が既定通りの”1(pullup)”に戻りました。

スクリプト停止時の設定リセットのすすめ

Scratch 1.4のプロジェクト実行後に別のプロジェクトを実行した場合、前の設定が残ったままでは意図しない挙動を示すことが有り得るので、プロジェクト停止時には設定をリセットするスクリプトを組み込んでおくことをおすすめします。

今回の事例で再起動後にも設定が残ってしまったブロック「config4inputpulldown▼を送る」の設定をリセットします。

カテゴリー「制御」のブロック「▼を送る」を右クリックして「新規/編集…」を左クリックします。

設定を既定に戻す為、出てきた「メッセージの名前:」画面の入力欄に”config4inputpullup”と入力して「OK」ボタンをクリックします。

できたブロック「config4inputpullup▼を送る」をパレットに置いたままクリックすることで、命令が実行されます。

念の為、LXTerminalで下のコマンドを実行します。

gpio readall

GPIO4のV列が既定の”1(pullup)”に戻っていることを確認しておきます。

WiringPiのバージョンを表示する

WiringPi“には、バージョン表示させるコマンドもあるので、LXTerminalで実行してみます。

gpio -v

WiringPi“のバージョンは”2.44″で、最後には「このRaspberry PiはユーザーレベルでのGPIOへのアクセスがサポートされています」と表示されていました。

今回、”WiringPi“のコマンド”gpio readall”でGPIOの状態を確認できることが分かったので、スクリプト実行時にこちらの意図しない挙動を示した場合などに、このコマンドを活用してみようと思います。