現在もガッツリ電子工作系に打ち込む時間が無いので、今回はベーシックな小ネタということで。
秋月電子で売ってる「無接点プッシュスイッチ(コード付)」を使う。
"機械的接点がない光学式の無接点プッシュスイッチです。デジタル出力型ICセンサ内蔵でドライブ回路に直結可能。" という説明の通り、ICが載ってるので出てる線はVCC、GND、OUTの3本です。
添付されていた参考資料によると、スイッチを押すとOUTがGNDに落ちるようになっていたので配線は以下。
これに加えてLEDを1個追加したので、図には入れてませんが、GPIO 17(pin11)から1kΩの抵抗を介してLED、GND(pin6)というのを入れています。
プログラム(Python with RPi.GPIO)はこんな感じで。
1 2 3 4 5 6 7 8 9 10 11 | import RPi.GPIO as GPIO GPIO.setmode(GPIO.BCM) GPIO.setup( 4 ,GPIO.IN) GPIO.setup( 17 ,GPIO.OUT) while True : if (GPIO. input ( 4 )): GPIO.output( 17 ,GPIO.LOW) else : GPIO.output( 17 ,GPIO.HIGH) |
もし、ボタンを押したらコマンドを叩く様にしたい場合は、
1 2 3 4 5 6 7 8 9 10 | import RPi.GPIO as GPIO import subprocess GPIO.setmode(GPIO.BCM) GPIO.setup( 4 ,GPIO.IN) GPIO.setup( 17 ,GPIO.OUT) while True : if ( not GPIO. input ( 4 )): subprocess.call( "shutdown -h now" , shell = True ) |
#このままだとボタンを押していると連続して叩いてしまうので、一回だけ実行するようにする必要ありです。
追記:pushCheck = Falseとか定義して、以下みたいな感じにすればOK
1 2 3 4 5 6 7 8 | while True : if ( not GPIO. input ( 4 ) and not pushCheck): pushCheck = True print "Push!" GPIO.output( 17 ,GPIO.HIGH) if (GPIO. input ( 4 ) and pushCheck): pushCheck = False GPIO.output( 17 ,GPIO.LOW) |
話は変わりますが、12/1に割と大きなネタがあるので、時期が近づいたら改めて告知します。