modalsoul’s blog

これは“失敗”と呼べるかもしれないが、ぼくは“学習体験”と呼びたい

Raspberry Pi Zero WHにブート/シャットダウンの物理ボタンを付けた

Raspberry Pi Zeroをポチったので、ちょっとずついじってみる

OSはRaspbian stretch lite www.raspberrypi.org

初期設定諸々はここでは割愛


物理スイッチを取り付ける

シャットダウンするためにsshするのはダルいので、安全に起動・停止できる物理ボタンを付けます

AINEX ATX用電源スイッチキット PA-062A

AINEX ATX用電源スイッチキット PA-062A

こちらを参考にさせてもらいました

Raspberry Pi 3 にシャットダウン/リブート/再開ボタンを追加する - はむ!の空想具現化したいブログ

クラゲのIoTテクノロジー

配線

スイッチとGPIO18とGPIO3、GNDを接続

シャットダウンスクリプト

/home/pi/service/shutdownd.py

#!/usr/bin/python
# coding:utf-8
import time
import RPi.GPIO as GPIO
import os

GPIO.setmode(GPIO.BCM)
GPIO.setup(18,GPIO.IN,pull_up_down=GPIO.PUD_UP)

while True:
    GPIO.wait_for_edge(18, GPIO.FALLING)
    sw_counter = 0

    while True:
        sw_status = GPIO.input(18)
        if sw_status == 0:
            sw_counter = sw_counter + 1
            if sw_counter >= 50:
        os.system("sudo shutdown -h now")
                break
        else:
            break

        time.sleep(0.01)

systemd設定

サービスファイル

/usr/lib/systemd/system/shutdownbuttond.service

[Unit]
Description=Shutdown Daemon

[Service]
ExecStart =/home/pi/service/shutdownd.py
Restart=always
Type=simple

[Install]
WantedBy=multi-user.target

サービス有効化

pi@raspberrypi:~ $ systemctl enable shutdownbuttond.service

デーモン再起動

pi@raspberrypi:~ $ sudo systemctl daemon-reload

これで起動時にスイッチ長押しでシャットダウン、停止時にスイッチで起動できるようになった