前回は、Raspberry Pi Zero WにHomebridgeをインストールして、LEDを点滅させるHomeKitアクセサリを作りました。Lチカができれば、自作PCの電源を入れるのも簡単です。今回はLチカする代わりに、PCの電源スイッチを入れるように改造します。
Raspberry Piに光リレーを接続する
HomeKitアクセサリとして実装したことにより、iPhoneショートカット方式に比べて、HomePod, macOSから安定して動作するようになりました。前回の記事ではLEDを点滅させただけでした。今回は、自作PCの電源を投入できるようにします。
WOLを使って自作PCの電源を投入することはできました。でもWOLのマジックパケットを送出するのは簡単ですが、これを受けて起動する設定は色々微妙で、ちょっとしたアップデートで動かなくなることもあります。またmacOSとは相性が悪いようで、WOLが動かないNICも多いです。そこで、Raspberry PiのGPIOピンと自作PCの電源ボタンを接続して、電源ボタンを電気的に短絡させる回路を作ることにしました。電源ボタンに流れる電流は微小なので、電流容量は気にしなくてよさそうです。
1番簡単な方法は、GPIOピンをオープンドレインモードに設定して、マザーボード電源ピンの+側に接続することです。追加の部品は不要です。電源ピンの-側がグランドに接続されていることが条件です。多分大丈夫だと思いますが、状況によってはRaspberry Piやマザーボードを壊すことになるかもしれません。この方式を採用するなら、マザーボードの回路を把握して、安全性を確認しておいた方が良いです。
2番目の方法は、フォトカプラを使います。フォトカプラには、下の図のように、LEDと光トランジスタが入っています。GPIOピンを1番、Raspberry Piのグランドを2番、マザーボード電源ピン+を4番、電源ピン-を3番に接続します。フォトカプラの入力側と出力側が電気的に絶縁されているので、電源ピンの-側がグランドに接続されていなくても動きます。ただ、電源ピンの+/-を間違えないように配線する必要があります。逆挿しすると、フォトカプラ出力側の逆方向に電圧がかかってしまい、電流が流れず動きません。
3番目の方法は、フォトリレーを使います。こちらもRaspberry Pi側が1,2番ピンで、マザーボード側が3,4番ピンです。こちらはそれぞれ逆チャンネルのトランジスタが2個付いているので、3,4番側はどちら方向にも電流を流せます。機械的なリレーやスイッチのように働くので、マザーボード電源ピンの+側と-側をどちらに接続しても動きます。
秋葉原では、フォトカプラTLP627が40円、フォトリレーTLP222Aが100円でした。どちらも4ピンDIPパッケージでサイズは同じです。回路が複雑なだけフォトリレーの方が高価格ですが、60円で結線が楽になるならと思いフォトリレーを使う3番目の方式を採用しました。
回路図、ってほど複雑なものではないですが、配線は以下のようです。GPIO21番を470オームの抵抗でフォトリレーに接続します。
簡単な回路なので、抵抗とフォトリレーを空中配線しました。そして、フォトリレーの出力側をPCケースの電源スイッチと並列に半田付けしました。フォトリレーが働けば、ケースの電源スイッチの両端が短絡される仕組みです。
次に、Raspberry Piとケーブル類全体を、PCケースの電源スイッチ付近の内部に収めました。隔壁とネジの支柱の間に、Raspberry Pi Zeroの基板の幅ぴったりの空間がありました。ここに強力両面テープでスペーサを貼り付け、ねじ止めしました。PCケースのこの部分はプラスチック製なので、Wi-FiやBluetooth (今回はBTは使いませんが) の電波の飛びも良好なはずです。Raspberry Pi Zero Wを収めるのに格好の場所と言えます。Raspberry Pi Zero Wは消費電力が0.75Wで、CPUに触れても温かさを感じないくらいですので、閉鎖された場所に組み込んでも問題ないと思います。
さらにRaspberry PiにはUSBケーブルを繋ぎ、ケースの裏側に引き回しました。そして、マザーボードのバックプレートのUSB端子に接続して、そこから電源を得ることにしました。macOSのUSB個数制限で、使用していないUSB端子が余っていたので、そこを使うことにしました。マザーボードのBIOS設定で、電源offの状態でもUSBに電源供給する設定にしてあるので、常時給電されます。これで常時稼働するサーバーとして動かせます。Raspberry Pi Zero Wを取り付けた部分には、マザーボードに接続したUSBポートもあるので、そこから電源供給すれば、配線はもっとスマートになったかもしれません。
WOLによる起動も統合(おまけ)
以前の記事で書いたように、Windowsを動かしているHP EliteDesk 800 G2 DMはWOLで起動可能でした。そこで、これもhttpSwitchの内容に追加しました。常時動かすhttpサーバプログラムが以下です。
var http = require('http'); var gpio = require('rpi-gpio'); var wol = require('wake_on_lan'); const GPIO_PIN = 40; const DELAY = 1000; //delay for on const SERVER_PORT = 8080; const HP_MAC = '12:34:56:78:9A:BC'; //Windows MAC address var server = http.createServer(function(req,res){ res.writeHead(200, {'Content-Type' : 'text/plain'}); var msg; switch (req.url) { case '/Mac_on_off': gpio.write(GPIO_PIN, true); setTimeout(()=>{gpio.write(GPIO_PIN,false);},DELAY); msg = 'Turned on and off.'; break; case '/Windows_WOL': wol.wake(HP_MAC); msg = 'Wake on LAN.'; break; default: msg = 'command not found.'; break; } res.write(msg + '\n'); res.end(); }); gpio.setup(GPIO_PIN, gpio.DIR_OUT, (err)=>{ if(err) throw err; server.listen(SERVER_PORT); });
このサーバーのURL、
http://192.168.xxx.xxx:8080/Windows_WOL
にアクセスするとWOLのマジックパケットを送出します。この手順もHomebridgeのアクセサリとして登録すれば、以下のように、ホーム.appなどに自動的に現れます。
この結果、「Hey Siri, Windowsをつけて」というようなコマンドでHP DeskEliteも起動するようになりました。