Homebridge入門: (4) 自作PCの電源スイッチをONにする

前回は、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も起動するようになりました。