Raspbian 資料一覧
2016/11/23更新
対応バージョン: Raspbian Jessie Lite - September 2016
Raspberry Pi 3には電源ボタンがないのでシャットダウンするにはOS上でシャットダウン用のコマンドを入力するか電源ケーブルを抜くしか方法がない。コマンドを入力するのは面倒だが、かといってOS稼動中にいきなり電源ケーブルを抜くのもファイルシステム損傷などの恐れがあるのでタクトスイッチを長押しすることでシャットダウンするようなスクリプトを書いてみる。
ここでは5秒長押しするとhaltコマンドを実行してシャットダウンする仕様とし、サービスとして常時稼動しておくようにする。
結線とプログラム
まず結線は以下の通りで、タクトスイッチとGNDの間に10kΩのプルダウン抵抗を挟む。タクトスイッチのON/OFFはGPIOポート18ピン(GPIO 24)を使って取得し、スイッチが5秒連続で押されたらhaltコマンドを発行するようなシェルスクリプトを組む。
takthalt.sh
#!/bin/sh wait_max=5 # wait sec PIN=24 HIGH=1 LOW=0 gpio -g mode ${PIN} in while [ 1 ] do sts=`gpio -g read ${PIN}` if [ ${sts} -eq ${HIGH} ]; then cnt=`expr ${cnt} + 1` else cnt=0 fi if [ ${cnt} -ge ${wait_max} ]; then logger "shutdown by takt switch" sudo halt exit fi sleep 1 done
※gpioコマンドはWiringPiライブラリに含まれるので必要があればインストールしておく。
関連資料・記事
サービス化
作成したスクリプトを以下の手順でサービス化して常時稼動させておく。スクリプトは「/usr/local/bin/takthalt.sh」に配置するものとし、サービス名は「takthalt」とする。
サービス定義
% sudo vi /etc/systemd/system/takthalt.service [Unit] Description=Halt by Takt Switch(long press) [Service] ExecStart=/usr/local/bin/takthalt.sh [Install] WantedBy=multi-user.target
サービス有効化 & 起動
% sudo systemctl enable takthalt % sudo systemctl start takthalt % sudo systemctl status takthalt ● takthalt.service - Halt by Takt Switch(long press) Loaded: loaded (/etc/systemd/system/takthalt.service; enabled) Active: active (running) since 水 2016-11-23 17:06:50 JST; 4s ago Main PID: 1399 (takthalt.sh) CGroup: /system.slice/takthalt.service ├─1399 /bin/sh /usr/local/bin/takthalt.sh └─1415 sleep 1 11月 23 17:06:50 p1 systemd[1]: Started Halt by Takt Switch(long press).
ここまで設定できたら作業完了である。
タクトスイッチを長押しすればsyslogに「shutdown by takt switch」というメッセージを出力してシャットダウンする。
関連資料・記事
[Raspbian] Raspberry Pi 3の初期セットアップ(Raspbian Jessie Lite)
[Raspbian] Raspberry Pi 3でタクトスイッチを使ったLED制御(Fritzingのインストール手順付き)
参考サイト
Raspberry Pi (Wikipedia)
RaspberryPi技術情報 (Qiita)
Raspbian技術情報 (Qiita)
IT女子のラズベリーパイ入門奮闘記 (Device Plus)
RaspberryPi電子工作入門 (ツール・ラボ)