先日自宅のデスクトップPCを無線化した話を書きましたが、ここで「PCの電源ボタンだけは本体に押しに行かなきゃいけない」ことを課題としてあげたところ、複数のかたから「Wake on LANを使え」というツッコミをいただきました。まったくもって「それもそうだな」と感じましたのでWake on LANを使った物理遠隔PC電源ボタンをつくってみることにしました。
こんなかんじ(動作の様子)
完全に単機能な無線電源ボタンです。ボタンを押してから自宅内WiFiアクセスポイントに接続→Wake on LANパケットを投げる、という動作をするので押してから起動まで2~3秒ほどかかりますが、実に快適。(※電池消費量が増えますが、アクセスポイントにつなぎっぱなしにしておきボタンを押した瞬間に起動するようにすることもできます)
材料
今回使った材料がこちら。今回すてきなボタン(電源ボタン)を見つけてしまった(@千石電商)のでケース加工もしてまとめましたが、むき出しでよければ半田付け無しで無線電源ボタンを作れる構成にしてみました。材料は一カ所で集める場合は千石電商の秋葉原店店頭で入手できます。
無線電源ボタンをつくるのに必要な材料 | ||
マイコン基板 | Wio Node | Amazon |
バッテリー | LiPoバッテリー (小さいもの。今回は40mAhを使用) | Amazon |
ケーブル | Grove 4ピン変換 オスジャンパケーブル | Amazon |
書き込み | FTDI USBシリアル変換アダプター(5V/3.3V切り替え機能付き) | Amazon |
ケースに収めるために追加する材料 | ||
ケース | タカチ TWケース 50mm×15mm×50mm TW5-2-5 | 千石 |
スイッチ | 千石店頭で見つけた照光式オルタネイト プッシュスイッチ (※またはケースに収まりそうなLEDと押しボタン) | |
抵抗 | 200Ωくらい |
構成
Wio Nodeという基板を使います。もともとこの製品は「ケーブルでセンサを繋いで、スマートフォンで設定するだけでかんたんにIoTデバイスが作れるすてきキット」なのですが…これ、ESP-WROOM-02というマイコン内蔵無線LANモジュールが載っているので「スマートフォンで(略)なIoTデバイス」というのはまるっと忘れて、ファームウェアを書き換えてしまい「リチウムイオンポリマー電池もつかえる便利ESP-WROOM-02基板」として使います。なかなかひどい。
なので、基本構成は
・Wio Nodeをジャンパケーブル+USBシリアル変換アダプターでPCにつないで
・ファームウェアを丸ごと書き換え
・LiPoバッテリーをつないでそのまま無線電源ボタンとしてつかう!ハッピー!
というだけです。
これをさらに
・ボタンとLEDを基板の外につける
・それをケースに収める
ことでケース入りの無線電源ボタンが完成。ね、簡単でしょ?
0. 遠隔起動したいPCのWake on LAN設定をしておく
PCのWake on LAN(パケットによる電源ON)を設定しておきます。
・マザーボードの設定(Wake on LAN有効設定)
が必要です。あらかじめ設定しておき、スマートフォンのWake on LANアプリなどで動作を確認しておきます。
1. PCの環境をととのえる
ESP-WROOM-02というマイコン内蔵無線モジュールにプログラムを書き込むので、その環境をととのえます。今回ESP-WROOM-02をArduino化して使いましたので、環境はArduinoをつかいます。
を参考にして、Arduino IDEとESP-WROOM-02用の環境をインストールします。
また、FTDI USBシリアル変換アダプター用のドライバを
のようにインストールします。
2. PCとWio Nodeを接続する
まずUSBシリアル変換器の電圧設定ジャンパピンを3.3Vにします
Wio Nodeの「UART/I2C0/D0」と書かれた側のコネクタにジャンパケーブルを挿し、つぎのようにUSBシリアル変換器と結線します
Wio Node(電源供給用)と、USBシリアル変換器(データ通信用)それぞれにmicroUSBケーブルを接続するとそれぞれ(Wio Node、USBシリアル変換器)LEDが光り動き始めます。
3. Wio Nodeをファームウェア書き込みモードにする
※注意!ここから先のステップに進むと、Wio Nodeのファームウェアを完全に上書きするので、もともとのWio Nodeの機能は使えなくなります。
Wio NodeのFuncボタンを押しながらRSTボタンを押し、先にRSTボタンを離してからFuncボタンを離してください。
これでWio Nodeがファームウェア書き込みモードになります。
4. Wio Nodeに無線電源ボタンのファームウェアを書き込む
今回作ったソフトウェアがこちら。
ダウンロード・展開し、さきほどインストール・設定したArduino IDEから「ファイル」→開く→WakeOnLan_Button.inoを開きます
このボタンを押すとファームウェアが書き込まれ、Wio Nodeが無線電源ボタンに書き換わります。
5. 無線電源ボタンの初期設定をする
・Wio NodeのRSTボタンを押すと、無線電源ボタンの初期設定モードに入ります。
・「WoL_Button」という名前のWiFiアクセスポイントが見えるようになっているので、スマートフォンなどでこのアクセスポイントに接続してください。
・ブラウザで「192.168.1.1」を開くと、WoL Remote Button Settingsというページが表示されます。
・[WiFi AP]に、接続するアクセスポイントのSSIDとパスワード、
・[WoL Target]にWake on LANパケットを送るマシンのMacアドレスを設定し、「Set」ボタンを押します。(通常はここまででokです)
・Network Broadcastにチェックが入っていると、無線電源ボタンが接続されたネットワークのブロードキャストアドレスに対してWoLパケットを送信します。別のIP/ブロードキャストアドレスに送りたい場合は、Network Broadcastのチェックを外し、Target IPを設定します
・パケットが届きにくい場合はSend packet count(パケット送信回数)を増やすとよいかもしれません
・通常(Deep Sleep mode)は、電池の使用を抑えるためボタンを押したらWiFiネットワークに接続し、接続が終わったらパケットを送出します。それではどうしても時間がかかってしまうような場合は、Deep Sleep modeのチェックを外すとWiFiネットワークにつなぎっぱなしになり、すぐにパケットを送出するようになります(電池の使用量がかなり増えます)。なお、この場合は、パケット送信に使うボタンは「RST」ではなく「Func」ボタンを使ってください。
[Set]ボタンを押すと設定が完了です。
6. 実際につかってみる
Wio Nodeの書き込み用のケーブル(USBシリアル変換器)とWio Node本体のmicroUSB(電源)を取り外し、Wio Nodeに何も繋がっていない状態にしてからリチウムイオンポリマー電池を接続します。
Wio Node本体のmicroUSB端子に電源をつなぎ、リチウムイオンポリマー電池を充電します(充電が終わったらmicroUSB端子を取り外します)。
Wio Nodeの「RST」ボタンを押すと、設定されたとおりにパケットを送信するはずです。以後、対象PCの電源を入れたい場合は「RST」ボタンを押すだけです。
再度初期設定をしたい場合は
・RSTボタンを押して、離す
・RSTボタンを離した直後にFuncボタンを押す
ことで初期設定モードに入ります。(RSTボタンとFuncボタンを同時に押すとファームウェア書き込みモードになってしまうので注意)
このまま使う場合は、冒頭の
LED_PINを15に書き換える(そして再度ファームウェアの書き込みを行う)とWio Node本体のLEDがぴかぴか状況に応じて光るようになります。
7. ケースに入れて使う
ケースに入れる場合は、ボタンとLEDを外に配線します。
ボタンはRSTとGNDの間で押されたら導通するように配線してください。RSTは端子に出ていませんが、
ここに出ていますので、ここにボタンからのケーブルを半田づけします。
LEDは、IO5から電流制限抵抗を介してGNDに接続します。
それぞれこの端子に出ていますので、ファームウェア書き込みにも使ったジャンパケーブルを使って配線してやります。
あとはうまいことケースに収めてしまえば完了!
というわけで
さらに無線化デスクトップ環境が快適になりました。今回つくった「単機能WiFi Wake on LANパケット送信機」ってなかなかモノとしてはニッチで良いと思うんですが、製品として出すにはWake on LAN自体がもう流行らないのかもしれません。そういう意味では、すげー簡単にこういうデバイスを(しかも安く)作れるようになったESP8266 (ESP-WROOM-02)はほんとうに素敵だなあとあらためて実感するのでありました。
いちおう動いてないときはDeep Sleepモードに入っているので超ちっちゃいLiPoバッテリーでもかなり長いこと電池がもつはずですが、実際どれくらいもつかは今後実際に使いながら検証してくことになるかなーとおもいます(いや、まあ、ほんとうは消費電流実測すればいいんですけどね!)