Raspberry Pi Zero Wでは,学習リモコンと温度計測,FAXサーバーなんかが動いている。
時々なぜなのか不明なのだが,無線LANで接続しているNetworkにつながらなくなることがある。
こうなってしまうとリモートでのメンテナンスも行えないので,しょうがなくUSBケーブルを引っこ抜いて電源をOFFして,またUSBケーブルを入れて電源ONする。ファイルシステムを壊しそうで,ちょっと問題ではある。
そこで少し安全になるように,RPZ-IR-Sensorについているスイッチを使って,シャットダウンとリブートが出来るようにしてみた。
もしかしたら,Watchdogを使ったほうがいいかもしれない。
RPZ-IR-Sensorには赤と黒の2個のスイッチが実装されているので,赤のスイッチを使ってシャットダウンやリブートが出来るようにしてみた。
赤のスイッチを3秒ぐらい押しっぱなしにするとシャットダウンして,1回押すとリブートするようにしてみた。
/usr/local/bin/switch.pyファイルを作成した。
- ! - | ! |
|
実行パーミッションをつけておく。
# chmod 755 /user/local/bin/switch.py
自動起動するように,/etc/rc.localに以下を追加した。
# start reboot/shutdown sw /usr/local/bin/switch.py
これで思っていたように機能している。
残念ながらシャットダウン後にスイッチを押してブートさせることは出来ない。この場合はUSBケーブルを引っこ抜いて再度入れるようにしないとダメ。
でもシャットダウンはしているのでファイルシステムを壊すと言う危険は減っている。
上記の方法ではなくスイッチでシャットダウンさせるだけの機能であれば,Device Treeのdtoverlayの利用だけで実現出来る。
この場合,/boot/config.txtファイルに以下を追加する。
# add shutdown dtoverlay=gpio-shutdown,gpio_pin=5,debounce=3000 dtoverlay=gpio-poweroff,gpiopin=22,active_low=0
これで,赤スイッチを3秒間押し続けると,シャットダウンし青LEDが点灯するようになる。
GPIOコネクタの3pinにスイッチを接続できれば,Raspbianのdtoverlayではブートも可能になる。しかし,この機能はGPIOコネクタの3pinにしか対応していない。
12/04/2012以降のbootcode.binに実装されていて,Raspbianがhalt状態になるとGPUがスリープ状態になるが,GPIOコネクタの3pinでスリープ解除できる。
今回はRaspberry Pi Zero WとRPZ-IR-Sensorとの接続にI2Cを使っているので,これはどうしようもないが,もしスイッチをGPIOコネクタの3pinに接続できる状況であれば,/boot/config.txtファイルに以下を追加すれば実現できる。
# add shutdown and powerup SW dtoverlay=gpio-shutdown,gpio_pin=3,debounce=3000 dtoverlay=gpio-poweroff,gpiopin=22,active_low=0
スイッチを3秒間押し続けるとシャットダウンし青LEDが点灯する。その後,スイッチを押すとブートする。
新しくコメントをつける