再起動スイッチ(a接点)をGPIO3とGNDに接続します。 Raspberry Piをシャットダウンし、電源が入っている状態で再起動スイッチを押すと、 Raspberry Piが再起動します。
シャットダウンスイッチ(a接点)をGPIO14とGNDに接続します。
最近のOSではraspi-configを用いて、「9 Advanced Options」から入り、「AB GPIO Server」を選択すれば、pigpioが利用できます。
有効にできない場合は、下記コマンドでインストールしてください。
sudo apt-get update
sudo apt-get install pigpio
pigpioをサービスで動かしておくと便利です。
sudo nano /lib/systemd/system/pigpiod.service
sudo systemctl enable pigpiod
sudo systemctl start pigpiod
sudo systemctl status pigpiod
shutdown.pyをRaspberry Piのフォルダにコピーします。/home/pi直下で良いと思います。
#!/usr/bin/python
# coding:utf-8
"""
Raspberry Pi Shutdown script.
=============================
"""
import os
rp_mode = False
try:
import pigpio
rp_mode = True
except ModuleNotFoundError:
rp_mode = False
import sys
import time
def main():
if rp_mode == False:
return
gpionumber = 14
shutdown_time = 3
wait_time = 0.5
args = sys.argv
if len(args) > 1:
shutdown_time = float(args[1])
pi = pigpio.pi()
pi.set_mode(gpionumber, pigpio.INPUT)
while True:
counter = 0
while True:
if pi.read(gpionumber) == 0:
counter = counter + 1
if counter >= (shutdown_time / wait_time):
os.system('sudo shutdown -h now')
#print('sudo shutdown -h now')
break
time.sleep(wait_time)
if __name__ == '__main__':
main()
shutdownbuttond.serviceファイルを作成します。
sudo nano /usr/lib/systemd/system/shutdownbuttond.service
shutdownbuttond.serviceファイルの内容は下記です。python3、shutdown.pyの場所は適宜変更してください。
[Unit]
Description=Shutdown Daemon
[Service]
ExecStart=/usr/bin/python3 /home/pi/pyhome/shutdownd.py
Restart=always
Type=simple
[Install]
WantedBy=multi-user.target
サービスに登録します。
sudo systemctl enable shutdownbuttond.service
sudo systemctl daemon-reload
サービスが登録されているか確認します。
sudo systemctl status shutdownbuttond.service
Activeと言う文字があれば、正常に起動しています。
* shutdownbuttond.service - Shutdown Daemon
Loaded: loaded (/usr/lib/systemd/system/shutdownbuttond.service; enabled; ven
Active: active (running) since Sun 2020-11-01 13:45:21 JST; 2h 10min ago
Main PID: 354 (python3)
Tasks: 2 (limit: 4915)
CGroup: /system.slice/shutdownbuttond.service
-- 354 /usr/bin/python3 /home/pi/shutdown.py
**月 ** 13:45:21 user systemd[1]: Started Shutdown Daemon.
再起動して、シャットダウンできるか確認します。