Raspberry Pi に停止と起動のボタンを実装しよう

Raspberry Pi に停止と起動のボタンを実装しよう

現在我が家では壁掛けタッチパネル + Raspberry Pi を電子カレンダーとして使用しています。夜間はカレンダーを参照することもないため、寝る前に手動でシャットダウンして朝起床時に起動するようにしているのですが、これが結構面倒です。

Raspberry Pi の GPIO3とGND(40ピンヘッダーの5、6番ピン)の間にボタンを接続すると、Raspberry Pi のシステム構成パラメーターを使ってシャットダウンとパワーアップボタンが実装できます。ボタン一つで Raspberry Pi を起動・停止ができれば手動実施のストレスが緩和されます。スマートコントローラーDIYの一環として、ここではシャットダウンとパワーアップボタンを実装して記事にしたいと思います。

事前確認

シャットダウンとパワーアップボタンは、overlays の gpo-shutdown を使って実装します。/boot/overlays/README に下記の記載があるとおり、GPIO ピンを変更するとシャットダウンを開始し、シャットダウン後は GPIO3 を low にすることで起動します。デフォルト設定では GPIO3 をプルアップで使用しているので、GPIO3 と GND の間にボタンスイッチを接続すれば、シャットダウンとパワーアップのボタンが実装できます。

また、debounce パラメータは、 デバウンス(ボタンスイッチを押したときにhightとlowが繰り返される)の間隔をミリ秒単位(デフォルトは100)で指定することができるため、3秒間ボタンスイッチを押し続けるとRaspberry Pi がシャットダウンするという設定も可能です。

Name:   gpio-shutdown
Info:   Initiates a shutdown when GPIO pin changes. The given GPIO pin
        is configured as an input key that generates KEY_POWER events.

        This event is handled by systemd-logind by initiating a
        shutdown. 

        This overlay only handles shutdown. After shutdown, the system
        can be powered up again by driving GPIO3 low. The default
        configuration uses GPIO3 with a pullup, so if you connect a
        button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
        you get a shutdown and power-up button. Please note that
        Raspberry Pi 1 Model B rev 1 uses GPIO1 instead of GPIO3.
Load:   dtoverlay=gpio-shutdown,<param>=<val>
Params: gpio_pin                GPIO pin to trigger on (default 3)
                                For Raspberry Pi 1 Model B rev 1 set this
                                explicitly to value 1, e.g.:

                                    dtoverlay=gpio-shutdown,gpio_pin=1

        active_low              When this is 1 (active low), a falling
                                edge generates a key down event and a
                                rising edge generates a key up event.
                                When this is 0 (active high), this is
                                reversed. The default is 1 (active low).

        gpio_pull               Desired pull-up/down state (off, down, up)
                                Default is "up".

                                Note that the default pin (GPIO3) has an
                                external pullup. Same applies for GPIO1
                                on Raspberry Pi 1 Model B rev 1.

        debounce                Specify the debounce interval in milliseconds
                                (default 100)

Raspberry Pi 3 Model B+ の GPIO2 と GPIO3 は、回路上でプルアップされていることが回路図から確認できます。

 Raspberry Pi 3 Model B+ の 回路図
Raspberry Pi 3 Model B+ の 回路図

Raspberry Pi OS と ボタンスイッチの配線

ボタンスイッチはAmazonで「ELPA 押しボタンスイッチ φ8mm HK-PSS02H」を購入しました。サイズ的にも程よいプッシュボタンで価格もお手頃です。注文後3日程度で届きました。

Raspberry Pi の GPIO3 と Ground に ボタンスイッチを結線します。

 Raspberry Pi の GPIO3 と Ground に ボタンスイッチを結線
Raspberry Pi の GPIO3 と Ground に ボタンスイッチを結線

アクリル板でスペーサーを作成して壁にボタンスイッチを固定しました。

アクリル板でスペーサーを作成して壁にボタンスイッチを固定
アクリル板でスペーサーを作成して壁にボタンスイッチを固定

Raspberry Pi OS の設定ファイル編集

Raspberry Pi OS の /boot/config.txt を vi で開いて編集します。config.txt の編集には root 権限が必要なので、標準の pi など一般ユーザでログインしている場合は sudo を付けて root 権限で編集します。

pi@raspberrypi01:~ $ sudo vi /boot/config.txt

最終行に以下の設定を追記します。debounce (ボタンスイッチを押したときにhightとlowが繰り返される)はミリ秒単位(デフォルトは100)で指定するシャットダウンが実行時のボタンスイッチを長押しする時間です。今回は3000msec (3秒) で設定してます。

dtoverlay=gpio-shutdown,debounce=3000

設定を反映するために Raspberry Pi OS を再起動します。

pi@raspberrypi01:~ $ sudo shutdown -r now

ボタンスイッチで Raspberry Pi OS の起動と停止を確認

Raspberry Pi OS が起動した状態でボタンスイッチを3秒間長押ししてシャットダウンされることを確認します。ACアダプタが接続された状態でボタンスイッチを押下して Raspberry Pi OS が起動することを確認します。GUI や CLI でシャットダウンを実行しなくてもボタンスイッチで起動・停止できるようになりました。ストレスフリーです。

ボタンスイッチで Raspberry Pi OS を 起動/停止 する
ボタンスイッチで Raspberry Pi OS の起動と停止
ボタンスイッチで Raspberry Pi OS の起動と停止

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です