Raspberry Piには、電源を入れるためのボタンもないし、電源を切るためのボタンもありません。
microUSBコネクタを接続すれば電源が入るし、rootで "shutdown -h now" を実行すれば、電源が切れます。
うちの運用では、テーブルタップについているスイッチをONにすると、電源が入るようになっています。
電源を切るには、SSHでログインして "sudo shutdown -h now" するか、Apache+PHPで作成したWebページから電源を切る指示を出すか、というようにしています。
電源を入れる操作についてはそれで良いとして、電源を切る操作については、遠隔地操作であれば特に問題ありません。
問題は、Raspberry Piの目の前にいるとき。
わざわざスマホでWebページにアクセスして電源を切るとか、メインPCからSSHログインしてコマンドを入力するとか、なんだか面倒くさいです。
かといって、microUSBケーブルをブチッと抜くほど残酷なこともできません。
というわけで、シャットダウンするためのボタンを作ることにしました。
せっかくRaspberry Piを使っているというのに、最近は「ただのLinuxサーバ」としての活用しかできていないため、電子工作的な使い方の方も活用しておいた方が良いかな?という思いもありまして。
原理と仕込みについてはこちらのサイトに書いていることを参考に作成しました。
このサイトではシェルスクリプトで実現していましたが、他にPythonで実現する方法があり、そちらは割り込みを使うことができるので、CPUパワーを抑えることができるとか。微々たるものでしょうけどね。
とりあえず、最初に見付けたのも何かの縁ですし、今回はシェルスクリプトで作成することにしました。
さて、問題は物理的な電子工作。
「+3.3V - タクトスイッチ - GPIO22」
という接続をするわけですが、とりあえず、以前に購入したブレッドボードとタクトスイッチとケーブル類を使えば、難なく実現できます。
Raspberry Pi内部のプルダウン抵抗をアテにしているため、工作した回路中に抵抗は設置していません。
そういえば、プルダウン抵抗を有効化するのはスクリプトが実行されるときなので、電源を入れてからプルダウン提供が有効化されるまでの間にボタンを押しっぱなしにしてしまうと、エラいことになるのかもしれないですね。まぁ、そんなことしないですけどね。
もちろん、スイッチなど使わずに、+3.3VとGPIO22を直結したり、それぞれから延ばしたケーブル同士を繋げたりしても良いんでしょうけど、美しくありません。
かといって、上のような、デカいブレッドボードがあったり、
+3.3V - メス−メスケーブル - オス−オスケーブル - ブレッドボード - タクトスイッチ - ブレッドボード - オス−オスケーブル - メス−メスケーブル - GPIO22
という状態のままにするのも、なんだか美しくない。
まぁ、電子工作学習用キットに美しさを求めることが、そもそも間違っているんですけどね。
リンク先の写真にあるような、スマートに突き刺さるタイプのタクトスイッチが手に入れば、なんだか美しくなれるような気がします。秋葉原の電子機器ショップ巡りをすれば手に入りそうですね。千石電商とか秋月電子とかですかね。
ちなみに、タクトスイッチの足に、メスのケーブルを差し込んだ場合、簡単に外れてしまうため実用的ではありません。まっすぐで長い足のタクトスイッチを入手する必要がありそうです。
あるいは半田ごてと東急ハンズで頑張るというのも、良いかも知れません。
実用上は、電子工作学習用キットでも十分ではありますが、いずれは美しいボタンを入手して、スマートに作り替えてみたいですね。