PointCloud

ものづくりに関すること。3Dプリンター、レーザーカッター、3Dスキャナー、3DCAD、RaspberryPi、Arudionoとか。

ノートPCを自作する(11)シャットダウンボタン

ノートPC自作プロジェクト シャットダウンボタン編


RaspberryPiを使っていると、電源落とす時に「sudo shutdown -h now」などとコマンドを打ち込まないといけないけど、これが手間なので、ボタン一つでシャットダウンしてくれるようにする。



これは先人が何人もいて、情報を公開してくれているのでそれを参考にする。

http://d.hatena.ne.jp/penkoba/touch/20130925/1380129824

先人たちの取り組みを見ていると、シェルスクリプトpythonのどちらかで実現している。
どちらでもよかったけど説明がわかりやすかったシェルスクリプト方式を採用。


shutdown-daemon.shなるファイル名でスクリプトを書く。
書いたらファイルを/home/pi に置く。

スクリプトは、原文をまるまるコピペ(先人に感謝)。
#!/bin/sh
GPIO=22     #使用するGPIOポート
PUSHTIME=5  #押す秒数

#初期設定
echo "$GPIO" > /sys/class/gpio/export
echo "in" > /sys/class/gpio/gpio$GPIO/direction
echo "low" > /sys/class/gpio/gpio$GPIO/direction

#5秒間押されるまで待つ
cnt=0
while [ $cnt -lt $PUSHTIME ] ; do
  data=`cat /sys/class/gpio/gpio$GPIO/value`
  if [ "$data" -eq "1" ] ; then
    cnt=`expr $cnt + 1`
  else
    cnt=0
  fi
  sleep 1
done

#シャットダウンの実行
shutdown -h now



2 起動時に自動的にスクリプトが実行されるようにする

/etc/rc.localに一文を追加する。

su -c /home/pi/shutdown-daemon.sh


この一文を追加するだけで起動時にshutdown-daemon.shが管理者権限で実行されるらしい。

どうってことないステップだけど、今回の唯一ハマりポイント。
最初、この一文を追加して再起動させるもまったくシャットダウンボタンが機能せず。
なぜ?と思って調べていたらどうも起動時にrc.localがうまく読み込まれていないらしい。
よく見ると起動時の画面にエラー表示が出ていた。
startpar: service(s) returned failure: rc.local ... failed!

原因は、今回の追記ではなくて過去に追記した一文が悪さをしていてエラーが起きていた。
なのでそちらをコメントアウトして解決。



3 RaspberryPiのGPIO端子に電源スイッチを取り付ける

15ピンと17ピンにスイッチを接続。
特に難しいことはない。




これで完成。
スイッチを5秒間長押しするとシャットダウンされるようになりました。

次はいよいよケース作りへ。