使ったスイッチは故障したdellのoptiplex780の電源部分を分解して用意しました。
参考にしたサイトは下記のとおりです。
raspberry-gpio-python
[コラム] 第8回『ボタン長押しでシャットダウンする電源ボタンを作ろう』
Raspberry Pi にシャットダウンボタンをつける
分かりやすい解説のおかげで、何とかシャットダウンするようになりました。
しかしpythonでのボタン入出力の待ち受けの正しいやり方が分かりませんでしたのでご了承下さい。
今回はtype B+を使って作業をします。
初めにRaspberry PiのGPIO21とGNDの間にスイッチを接続します。
そしてshutdown.pyなどとして下記の通りスクリプトを作成。
#!/usr/bin/python import RPi.GPIO as GPIO import time import os GPIO.setmode(GPIO.BCM) IO_NO = 21 push_time = 3 GPIO.setup(IO_NO, GPIO.IN, pull_up_down=GPIO.PUD_UP) count = 0 try: while (count < 5): if (GPIO.input(IO_NO) == GPIO.LOW): count = count + 1 else: count = 0 time.sleep(1) except KeyboardInterrupt: GPIO.cleanup() GPIO.cleanup() print("shutdown....") os.system("/sbin/shutdown -h now")
これをデーモンとして実行するようにするようです。
もっと調べたらちゃんとしたものを作成している方がいらっしゃいました。。。
Raspberry Piにshutdownスイッチ追加
上記をpyを/usr/local/sbin/shutdown-btn.pyとして保存。そして/etc/init.d/以下のskeltonをコピーして下記を作成しました(リンク先そのままですが)。
#! /bin/sh
### BEGIN INIT INFO # Provides: shutdown-button # Required-Start: # Required-Stop: # Default-Start: 1 2 3 4 5 6 # Default-Stop: 0 # Short-Description: Shutdown Button # Description: wait Shutdown Button ### END INIT INFO # /etc/init.d/shutdown-button PIDFILE=/var/run/shutdown-btn.pid case "$1" in start) if [ -f $PIDFILE ]; then echo $PIDFILE exists. exit 1 fi start-stop-daemon -S -x /usr/local/sbin/shutdown-btn.py -b -m -p $PIDFILE ;; stop) if [ ! -f $PIDFILE ]; then echo $PIDFILE not found. exit 1 fi start-stop-daemon -K -p $PIDFILE rm $PIDFILE ;; *) echo "Usage: /etc/init.d/shutdown-button {start|stop}" exit 1 ;; esac exit 0
$ sudo chmod +x /etc/init.d/shutdown-button
で実行権限を確認して…、起動と同時にデーモンとして実行する前に一旦か動かしてみます。
$ sudo /etc/init.d/shutdown-button start
エラーが表示されないので起動したようです。試しにボタンを長押してシャットダウンされることを確認しました。
最後に起動と同時に動くように設定して終了です。
$ sudo update-rc.d shutdown-button defaults
参考にさせて頂いた皆様、本当にありがとうございます。