ラズパイなら簡単にスイッチを付けられ、スイッチに好きな動作を割り当てることができます。今回は、3つの物理スイッチを実装してみます。
スポンサーリンク
スイッチの役目
生活の中にはたくさんのスイッチがあります。電気、水道、ガス、車…
よく使うものには物理的にスイッチがある方が直感的にわかりやすく、使いやすいです。
今回はラズパイのスイッチに以下の役割を持たせます。
- 天気予報の読み上げ
- ニュースの読み上げ
- ラズパイをシャットダウンさせる
それでは、始めましょう!
ラズパイと物理スイッチをどう繋ぐ?
ラズパイには便利なGPIOと呼ばれる汎用的な入出力ピンを備えています。
GPIOを使うと、ラズパイからデジタル信号の入出力が行えます。要するに、他装置と通信が可能になるのです。
このGPIOに物理スイッチを接続することで、スイッチのON/OFFをラズパイで検知できるようになります。ラズパイには、GPIOピンが複数あるため、スイッチを複数接続して、それぞれに違う動きをさせることができます。
スイッチの製作
まずは、物理スイッチを接続しないことには何も始まりません。
今回は以下の材料でお手軽スイッチを製作しました。
- タクトスイッチ
- インジケータ用赤色LED
- ユニバーサル基板
- ジャンパーワイヤー
- カーボン抵抗
- スペーサー
回路はこちらです。回路と言うか、ブレッドボードですが…。
思い付きで作ったものなので適当です(笑)
赤色LEDは、ラズパイが動いてますよ!というのを示すインジケータの役割です。シャットダウンボタンを押すとLEDが消えるようにしています。
ユニバーサル基板を直置きすると、ボタンを押した時に半田が取れそうなので、スペーサーで浮かせています。
ちなみに、ボタンを押しても基板が曲がらないよう、硬いガラエポ基板を使っています。
ジャンパーワイヤの接続
製作したスイッチをラズパイと接続しましょう。
ここで注意点があります!
ショートさせてしまうと、ラズパイが壊れる可能性があるため、きちんと半田付けできているか、接続前にテスターで確認して下さい!
問題がないことを確認してから接続します。
RaspberryPi2の場合、配線は上記回路図の通りです。ラズパイの世代により、GPIOピンアサインが変わるため、注意して下さい!
シェルスクリプトの作成
スイッチが押されたことを検知し、コマンドを実行するシェルスクリプトを用意します。
今回は分かりやすいように、ボタン毎のシェルスクリプトにしています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/bin/bash ################## # Switch weather ################## # Weather Switch GPIO=6 echo "$GPIO" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIO/direction echo "low" > /sys/class/gpio/gpio$GPIO/direction # Watch Loop cnt=0 while : do data=`cat /sys/class/gpio/gpio$GPIO/value` if [ "$data" -eq "1" ] ; then /usr/bin/php /home/pi/weather.php fi sleep 1 done |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/bash ################## # Switch News ################## # News Switch GPIO=19 echo "$GPIO" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIO/direction # Watch Loop cnt=0 while : do data=`cat /sys/class/gpio/gpio$GPIO/value` if [ "$data" -eq "1" ] ; then /usr/bin/php /home/pi/news.php fi sleep 1 done |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/bin/bash ################## # Switch Shutdown ################## # Shutdown Switch GPIO=26 echo "$GPIO" > /sys/class/gpio/export echo "in" > /sys/class/gpio/gpio$GPIO/direction # Watch Loop cnt=0 while : do data=`cat /sys/class/gpio/gpio$GPIO/value` if [ "$data" -eq "1" ] ; then /sbin/shutdown -h now fi sleep 1 done |
それぞれのシェルスクリプトは殆ど同じです。
GPIO変数に使用するGPIOピン番号を指定しています。
whileループは無限ループとなっています。ここでスイッチが押されているか、毎秒チェックを行なっています。
ボタンが押されていることを検知すると、記載しているコマンドを実行しています。実行するコマンドのパスは、実行する環境に合わせて修正して下さい。
また、LEDインジケータを付ける場合は、GPIOピンを出力に設定する必要があります。
1 2 3 4 5 6 7 8 9 10 11 | #!/bin/bash ################ # LED Initial ################ # Indicator LED GPIO=13 echo "$GPIO" > /sys/class/gpio/export echo "out" > /sys/class/gpio/gpio$GPIO/direction echo "1" > /sys/class/gpio/gpio$GPIO/value |
シェルスクリプトを用意したら、それぞれに実行権限を与えて下さい。
動作確認
ラズパイを起動させた後、作成したシェルスクリプトを実行させて下さい。
- led_init.shは1度のみ実行する。
- ボタンを制御するスクリプトはバックグラウンドで実行する。
スクリプトは、起動時に自動実行するようにcronスケジューラで登録しておくと便利です。
スクリプトを実行させたら、ボタンを押して見てください。1秒毎にチェックしているので、少し長めにボタンを押してください。
まとめ
どうでしょうか。動きましたか?
スイッチを増設したり、トグルスイッチに変更することで、様々な動作をさせることができます。アイデア次第で便利なラズパイを作りましょう!
[…] ※2017/05/10追記 ラズパイにスイッチを接続する記事を書きました! […]
[…] ※2017/05/10追記 ラズパイにスイッチを接続する記事を書きました! […]
[…] ※ 2017/05/10追記 ラズパイにスイッチを接続する記事を書きました! これを応用すれば、ラジオを任意のタイミングで再生することができると思います。(追記ここまで) […]