Deprecated: Array and string offset access syntax with curly braces is deprecated in /home/ratoc/www/test.ratocsystems.com/products/triple_r/blog/fp-includes/core/core.config.php on line 4

Warning: session_name(): Cannot change session name when headers already sent in /home/ratoc/www/test.ratocsystems.com/products/triple_r/blog/fp-includes/core/core.session.php on line 9

Warning: session_start(): Cannot start session when headers already sent in /home/ratoc/www/test.ratocsystems.com/products/triple_r/blog/fp-includes/core/core.session.php on line 11
物理ボタンで電源のON/OFFを制御する « ラズパイブログ

木曜日、5月 21、2020

物理ボタンで電源のON/OFFを制御する

上記で、システムシャットダウン時のLED制御を設定しましたが、今度は本体にある電源ボタンを使った制御を設定します。
この設定をおこなうと、電源ボタンを長押しすることでシャットダウンを検知し、本体の電源をOFFさせることが可能になります。

シャットダウン用プログラムの作成
システムシャットダウンのプログラムはPythonのプログラムで作成します。以下のソースコードをつかって、ファイルを作成してください。
ここでは、ファイル名を "shutd_btn.py" とし、ファイルを/ratoc 以下に保存します。
ディレクトリはあらかじめ作成しておきます。

$ mkdir ratoc
$ cd ratoc
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#   RPi-CM3MB2/MB3 Shutdown Button handler
#   "shutd_btn.py"
#   2018/03/13 R1.0 
#   RATOC Systems, Inc. Osaka, Japan
#
import RPi.GPIO as GPIO
import os, time
shutd_ctl = 6     #GPIO 06 for Shutdown Control
GPIO.setmode(GPIO.BCM)  # Use Broadcom pin numbering
GPIO.setup(shutd_ctl, GPIO.IN, pull_up_down=GPIO.PUD_UP)
print( "RPi-CM3MBx Shutdown Button handler" )
def isr_shutdown(self):
    print( "Shutdown Button is activated !!" )
    os.system( "sudo shutdown -h now" )
GPIO.add_event_detect(shutd_ctl, GPIO.FALLING, callback=isr_shutdown, bouncetime=2000)
while(True):
    time.sleep(1)
GPIO.cleanup()

スクリプトファイルの作成がおわれば、ファイルの属性を変更します。

~/ratoc/ $ sudo chmod 755 ./shutd_btn.py

次に、先ほど作ったファイルをサービス登録るためにサービスファイルを作成します。
以下のコードを使ってサービスファイルを作成してください。
ここでは、ファイル名を "shutd_btn.service" とします。

[Unit]
Description=RPi-CM3MB2/MB3 Shutdown button service
Wants=network.target
[Service]
ExecStart=/home/pi/ratoc/shutd_btn.py
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target

ファイルの作成が終われば、サービスファイルを システムにコピーします。

~/ratoc/ $ sudo cp shutd_btn.service /etc/systemd/system/shutd_btn.service

サービスの開始
先ほどコピーしたサービスを開始させます。

~/ratoc/ $ cd
$ sudo systemctl start shutd_btn.service

サービスの自動実行化
次に、サービスを自動実行するための設定をおこないます。

$ sudo systemctl enable shutd_btn.service

自動実行を有効にしたのち、サービスが正しく動作しているかをかくにんします。

$ sudo systemctl status shutd_btn.service

shutd_btn.service - RPi-CM3MB2/MB3 Shutdown button service
Loaded: loaded (/etc/systemd/system/shutd_btn.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2018-03-15 11:57:55 JST; 5min ago
Main PID: 349 (python3)
CGroup: /system.slice/shutd_btn.service
mq349 python3 /home/pi/ratoc/shutd_btn.py

3月XX XX:XX:XX raspberrypi systemd[1]: Started RPi-CM3MB2/MB3 Shutdown button service.

上記のように●が緑になっていれば、正常に動作しています。

動作確認後、電源ボタンを3秒間長押しして、連動してシャットダウンが実行されることを確認します。
電源ボタンを押して起動後に、再度以下のコマンドを入力してください。

$ sudo systemctl status shutd_btn.service

コマンド入力後、サービスが正しく動作しているかを確認してください。
※●が緑になっていればOKです。


おまけ:システム起動時のサービス自動実行を無効化したいとき
自動実行を無効化する際は、以下のコマンドを入力してください。

sudo systemctl disable shutd_btn.service