ラズパイにボタンを付けてシャットダウンさせる

本日もラズパイネタである。
ちょっと前、ラズパイにSQLiteをインストールした。
 ラズパイにSQLiteをインストール
トランザクションを試してみるかと思い、コードを書き始めたのは良いが、sqlite3コマンドが突然実行できなくなってしまった。

pi@raspberrypi:~ $ sqlite3
Segmentation Fault

コマンドが壊れている?
再インストールしようと思い、apt-get remove sqlite3で削除しようとしたが、これまたエラーとなり、削除できない。
どうも、ファイルシステムが破壊されたようである。
もう。
そういえば、前も壊れたよなぁ。ついついUSBケーブルを抜いちゃうのよね。shutdownしないで
raspbianの再インストール中「これは、なんとかしないといけないか」と思案した。
ということで、SQLiteのトランザクションは後回しにして、急遽シャットダウンボタンを付けることにした。
ボタンをひとつ付けるのに、ブレッドボードは必要ないでしょう。カッコ良く付けられないのは目をつむるとして、なんとかラズパイの筐体にくっつけたい。
と物色すると、PC用のリセットスイッチを発見。
IMG_20180511_141731.jpg
えーと、GPIOの適当なポートとGNDを接続すればOKなはず。抵抗は付けずにラズパイ側の設定でプルアップだかプルダウンにしておけば良いと思われ...
ということで、ケースの穴にケーブルを通して、筐体にテープで止めてみた。
IMG_20180511_142234.jpg
メスのコネクタがふたつくっ付いているやつなので、GNDと隣り合ったGPIO14を使うか。
接写したいが、これが限界。
IMG_20180511_145050.jpg
次に、ボタンが押されたときに、shutdownコマンドが実行されるように、pythonでスクリプトを書く。

#!/usr/bin/env python
import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BCM)
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_UP)
try:
GPIO.wait_for_edge(14, GPIO.FALLING)
print "button press"
except KeyboardInterrupt:
pass
GPIO.cleanup()
os.system("/sbin/shutdown -h now")

これを実行して、試してみる。

pi@raspberrypi:~ $ ./shutdown.py
button press
Connection to 192.168.0.81 closed by remote host.
Connection to 192.168.0.81 closed.

できた。
sshでログインしているので、シャットダウンとともにセッションが切れる。
常駐するように、/etc/rc.localに加える。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
# shutdown button
/usr/local/bin/shutdown.py &
exit 0

SQLiteのトランザクションは明日かな。

[改訂第4版]SQLポケットリファレンス

[改訂第4版]SQLポケットリファレンス

  • 作者: 朝井 淳
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/02/18
  • メディア: 単行本(ソフトカバー)

関連記事
ラズパイにSQLiteをインストール
SQLポケットリファレンスの歴史
SQLポケットリファレンスの歴史その2
SQLポケットリファレンスが第4版になりました
改訂第4版 SQLポケットリファレンス電子版

投稿者プロフィール

asai
asai