RaspberryPiは電源スイッチがなく、モニタなど繋げずヘッドレスサーバーとして使っている時は、ターミナル経由で
sudo shutdown -h now
を送って、ソフトウェア的にシャットダウンしないといけません。
開発時はこれで問題ないとして、店頭などで活用する時は、さすがに現場でコマンドを叩いて終了なんてありえないし、電源引っこ抜いて終了もよろしくない。
そこで、安全に電源を落とすためのスイッチを自作してみます。
購入したもの
シンプルデザインのステンレス製スイッチ(モーメンタリ)を選んでみました。
ちなみに、スイッチには「モーメンタリ」と「オルタネイト」があって、100均で売っているような電池式フロアライト(押したらあかりが点灯し、もう一度押したら消灯)のようなものは、「オルタネイト」です。
詳しい違いはこちらをご覧ください。
ハードウェアを実装する
スイッチを半田付けする
まずはスイッチの両端にハンダします。使ったケーブルは塩化ビニール線のこちら
ハンダした部分を収縮チューブで保護しておきます。
RaspberryPiのGPIO端子に接続
絵的にちょっと複雑になってしまってますが、左から3番目の「SCL」と書いているGPIO 3と空いている「GND」端子に接続してください。
店頭で活用することを想定していたので、GPIO端子の抜けを防止するために、ブレークアウトモジュールを設置しました。
ソフトウェアを設定する
RaspberryPi 4BはGPIO3に対応したシャットダウン機能をつけることができます。
sudo vi /boot/config.txt
config.txtファイルに
dtoverlay=gpio-shutdown,gpio_pin=3,debounce=2000
この一行を加えるだけです。
終了後も、またボタンを押すことで、起動も可能です。
誤動作を避けるために「debounce=2000」にして2秒ほど長押しでシャットダウンするようにしています。
稼働のデモ
これだけで安全にシャットダウンできるようになりました。
また、GPIO3端子は、シャットダウンだけでなく、起動ボタンにもなります。
同じくボタンをおすだけで起動します。
これならばRaspberryPi本体から離れた場所に電源ボタンをおいて、楽に電源のオンオフができるようになります。