shutdownボタン

Raspberry Pi で利用できるGPIOピンを利用して、shutdownボタンをつけます。
元ネタはこちらの記事です。作者様に感謝!

今回はGPIO21ピンを使用します。
タクトスイッチなどをGPIO21ピンとGNDに接続するだけです。


shutdown 起動スクリプト

ボタンが押下された時にシャットダウンを行うためのスクリプトです。
shutdonwボタンサービスとしてデーモン化して起動するので、バックグラウンドでボタン押下を監視します。 /usr/local/sbin/shutdown-daemon2.sh として作成します。

/usr/local/sbin/shutdown-daemon2.sh
#!/bin/sh
GPIO=21     # GPIO Port
PUSHTIME=5  # wait sec

## initialize
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "high" > /sys/class/gpio/gpio$GPIO/direction

## LED control
set_led_mode () {
  echo $1 > /sys/class/leds/led0/trigger
}
set_led_value () {
  echo $1 > /sys/class/leds/led0/brightness
}

## wait loop
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
  if [ `cat /sys/class/gpio/gpio$GPIO/value` -eq "0" ] ; then
    cnt=`expr $cnt + 1`
    [ $cnt -eq 1 ] && set_led_mode heartbeat
  else
    [ $cnt -gt 0 ] && set_led_mode mmc0
    cnt=0
  fi
  sleep 1
done

## shutdown LED
set_led_mode none
set_led_value 1
sleep 2
set_led_value 0
set_led_mode mmc0

## do shutdown
shutdown -h now

元ネタサイトではGPIOをActive high として書いていますが、使用するピンの配置の関係上、Active low の方が都合がいいので変更しています。GNDに落ちたらボタン押下として認識します。

実行権限付加しておきます。

$ sudo chmod 755 /usr/local/sbin/shutdown-daemon2.sh

shutdownボタンサービス

起動時にバックグラウンドサービスとして起動するためのスクリプトです。

/etc/init.d/shutdown-button
#! /bin/sh
### BEGIN INIT INFO
# Provides: shutdown-button
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Shutdown Button
# Description: wait Shutdown Button
### END INIT INFO
# /etc/init.d/shutdown-buttonPIDFILE=/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-daemon2.sh -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 755 /etc/init.d/shutdown-button
$ sudo insserv shutdown-button

以上。

ボタンを押すとLEDがチカチカっと点滅を繰り返します。そのまま5秒押し続けると shutdown プロセスが走り出します。
shutdown するだけで電源は切れません。動作の停止を確認しで電源を抜いてください。

GPIO -> ST-4 convert 基板にはGPIO21ピンのパターンがあるので配線さえすればボタンの取り付けが可能です。

オリジナル 基板頒布

オープンソースの架台制御ソフト、OnStepのハードウェア実装基板などの話題です。


頒布状況 2022/12/1
○ OnStep基板 Rev2.1
○ OnStep基板 Rev3.0
○ GBC-SHC 基板 Rev1.0
頒布ご希望の方はこちら、基板頒布のお知らせ をご覧ください。

このブログを検索

Blog Archive

QooQ