LoginSignup
7
10

More than 5 years have passed since last update.

Raspberry Pi 3 B+に シャットダウンスイッチを付ける

Posted at

シャットダウンスイッチをつけた理由

カムプログラムロボットに組み込んだRaspberry Piでプログラムするとき、ChromeBookのLinuxターミナルや、VNCクライアントで接続して作業するので、作業終了後は shutdownコマンドやGUIのShutdownボタンで、OSをシャットダウンして Raspberry Piを終了させます。
でも、ChromeBookを終了した後に、Raspberry Piのシャットダウンを忘れていた事に気づくことが度々あり、その都度 ChromeBookを起動させるのが面倒でした。

↓こんなの作っています。
P_20190313_024111_vHDR_Auto - Edited (1).jpg
Qiita: Raspberry Pi 3 Mobel B+とカムプログラムロボットでロボット作成

あと、(どのくら先になるか分かりませんが)自立起動させた場合、シャットダウンボタンがあったほうが都合がいいかなと思い、シャットダウンボタンを追加してみました。

シャットダウンボタンの設置イメージ

ブレッドボード上に設置したタクトスイッチの端子を、GPIO.7(BCM 4)と、GND に接続します。
P_20190414_101104_vHDR_Auto - Edited.jpg

OS環境

Raspberry Piの OSはRaspbian 9.8になります。

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description:    Raspbian GNU/Linux 9.8 (stretch)
Release:        9.8
Codename:       stretch

OSの各パッケージはまめに apt-get update しているので最新だと思います。

シャットダウンプログラム

プログラムは piユーザのホームディレクトリに binディレクトを作成してそこに保存することにしました。

pi@raspberrypi:~ $ mkdir bin/
pi@raspberrypi:~ $ vi ./bin/shutdown_button.py

プログラムはpythonで記述し、python2,python3の両方で動作することを確認済みです。
プログラムは、このページを参考にシャットダウンボタンを作成しました。
クラゲのIoT: RaspberryPiにshutdownボタンを付けよう

shutdown_button.py
#!/usr/bin/python

import time
import RPi.GPIO as GPIO
import os

GPIO.setmode(GPIO.BCM)

GPIO.setup(4,GPIO.IN, pull_up_down=GPIO.PUD_UP)

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

        while True:
            sw_status = GPIO.input(4)

            if sw_status == 0:
                sw_counter = sw_counter + 1
                if sw_counter >= 200:
                    os.system("sudo shutdown -h now")
                    break
            else:
                break

            time.sleep(0.01)

except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

2秒以上、押し続けた場合、shutdown コマンドを実行するようにしています。

OS起動時に自動実行するようにする

動作確認後、etcの下にあるrc.local ファイルを編集して、起動時にプログラムを実行するようにしています。

pi@raspberrypi:~ $ sudo vi /etc/rc.local 

exit 0 の前の1行が追加したコードになります。

/etc/rc.local
/home/pi/bin/shutdown_button.py
exit 0

追加後、Rsapberry Piを再起動すると設定が反映されます。
再起動後、タクトスイッチを長押してシャットダウンが実行されることを確認します。

最後に

シャットダウンスイッチを作っていて、Raspberry Piのハードウェアとソフトウェアの両方を比較的簡単に連動させながら扱えるの魅力を再実感しました。
コンピュータのプログラムを学ぶときに、手で触れられる部分とプログラムを連動させられると実感として判りやすいので、大切ですね。

願わくは、20年度からの小学校でのプログラム教育義務化にもこの感覚は反映させてほしいです。小学校の子がいる、おっさんプログラマからのお願いです。

でも、できる環境があるのと、それを教えることができる環境があるかは、別物ですよね。。。。、難しいです。

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10