木曜日、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.py3月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