概要
Google Sheets(スプレッドシート),Google Apps Script(GAS),ESP32を使って外出先から自宅PCを遠隔起動(Wake On LAN,Wake On Wan)する仕組みを作ってみました。
ルータのポートを開放する必要なく,セキュアにPCの電源を入れるための方法を紹介します。
はじめに
まず,リモートでPCを起動するには「Wake On LAN(WOL)」という技術が必要です。これは,同じLAN内にあるPCを起動する技術ですが,外出先からではネットワークの問題もあり,そのままでは利用できません。
そこで,省電力デバイスである「ESP32」を自宅に設置し,HTTP通信を利用してPCを起動することを考えました。これなら低コストかつセキュアにリモート起動が可能になると判断し,この方法を試すことにしました。
具体的には,スプレッドシートでPCのステータスを管理し,GASの実行可能APIを使用します。ESP32は定期的にこのAPIにアクセスし,PCがオフの状態でシートのステータスが変わった場合にWake On LANパケットを送信してPCを起動する仕組みです。
ここでは,同じLAN内にあるPCを起動するまでの要点をまとめて紹介しています。詳しい内容やこの方法に至った経緯,感想などは,以下のブログで紹介しています。
ESP32について
ESP32は,Wi-FiやBluetooth通信が可能なマイコンです。
他のユーザーもESP32を使ってWake On LANを実装している例が多くまずはこれを試してみました。
秋月電子通商で「ESP32-DevKitC-32E ESP32-WROOM-32E開発ボード 4MB」を購入しました。
実行環境と設定
PCにWake On LANパケットを送信するために,PCの設定を変更します。
PCの設定
実行環境
- OS:Windows 11/10
- 接続:有線LAN(イーサネット)に接続している必要がある
必要な設定
- IPアドレスの固定
- ネットワークアダプタの設定
- BIOS/ UEFI の設定
- シャットダウン/ ハイブリットシャットダウン
- マジックパケットでの起動を有効にする
必要な情報
- 物理アドレス(MACアドレス)
参考
Arduino IDE の設定
Arduino IDEを使ってプログラムを書き込みます。
この時のArduino IDEのバージョンは2.3.2でした。
ESP32を使えるようにするには
「追加のボードマネージャのURL」と「EPS32プラットフォーム」のインストールが必要になります。
-
追加のボードマネージャのURL
ファイルから「基本設定」を開きます。
安定版リリースリンク:
https://espressif.github.io/arduino-esp32/package_esp32_index.json
のURLを「追加のボードマネージャのURL:」にペーストしOKをクリック
-
EPS32プラットフォーム
ボードマネージャから「ESP32」と入力して検索し,esp32 by Espressifをインストール
esp32 by Espressif
(バージョン 3.0.4)
▼ 公式ドキュメント
接続には,USB 2.0 A-Micro Bケーブルを使用します。
USBケーブルには充電専用と通信用の2種類があるので,通信用ケーブルを使用してください。
初めてESP32を接続した場合,ドライバがインストールされていない可能性があります。
デバイスマネージャ
以下のリンクから,ドライバをダウンロードしてインストールします。
Silicon Labs CP210x USB to UART Bridge Driver
Windows OSであれば「CP210x Universal Windows Driver」をダウンロード。
設定が完了すると,「Silicon Labs CP210x USB to UART Bridge(COM5)」が表示されます。
ボードとポートの選択
Arduino IDE に戻り,上部のツールメニューを開きます。
ボード > esp32 > ESP32 Dev Module を選択します。
次に再びツールメニューを開き,ポート > COM5(PCによって異なる)を選択します。
PC起動テスト
Wake on LAN テストプログラムを作成
インストールするライブラリ:
WakeOnLan by a7md0
(バージョン 1.1.7)
以下のコードを新規スケッチに貼り付けます。
#include <WiFi.h>
#include <WiFiUdp.h>
#include <WakeOnLan.h>
// Wi-Fi設定
WiFiUDP UDP;
WakeOnLan WOL(UDP);
const char* ssid = "SSID"; // ここにWi-FiのSSIDを入力
const char* password = "PASSWORD"; // ここにWi-Fiのパスワードを入力
// MACアドレス設定
const char* pcMacAddress = "AA:BB:CC:DD:EE:FF"; // ここに自宅PCのMACアドレスを入力
void setup() {
Serial.begin(115200);
// Wi-Fiに接続
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("WiFiに接続中...");
}
Serial.println("WiFiに接続完了");
Serial.println(WiFi.localIP());
// マジックパケット送信
WOL.sendMagicPacket(pcMacAddress); // MACアドレスを使用してマジックパケットを送信
Serial.println("Wake on LANパケット送信");
}
void loop() {
// 何も実行しません
}
プログラムの設定
上記のプログラムを使用する前に
WifiのSSIDとPASSWORD,PCの物理アドレス(MACアドレス)を書き換える
テストプログラム書き込み・実行
準備ができたら,書き込みボタンをクリック。
書き込みが完了すると,プログラムが自動的に実行されます。
PCがすでに起動している場合は,電源はついたままなので,プログラムが実行されても何も起こりません。PCを一度シャットダウンしてから,Wake On LANを試します。
ESP32につないだUSBケーブルをUSB-ACアダプタにつなげてコンセントに差し込みました。
コンセントに差さすとPCの電源が起動します。これでESP32からPCを起動することができました。ここまでがESP32を使ってPCを起動するWake On LANを実際に試してみた結果です。
まとめ
とにかく,ここまで準備が整ったのですが,GASのプログラム作成とAPIの構築,そのAPIを叩くESP32用のプログラムを書き込む作業がまだ残っています。もし興味がある方が多いようなら,続きを書こうと思っています。
▼ 続き