Pages

2014年9月29日月曜日

[Rapsberry Pi]pythonで電源OFFボタンの作成[Rapsbian]

物理スイッチで電源をOFFに出来るようにしてみました。触っただけでシャットダウンしてしまうと何かと問題だったりするので、5秒という時間を設けました。

使ったスイッチは故障した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
 
参考にさせて頂いた皆様、本当にありがとうございます。 

0 件のコメント: