WIFI版のWake On LANのESP32のスケッチを作成した。
WOLのスケッチを作るうえで、下記のサイトを参考にさせてもらったけど、コンパイルでエラーも出るし、シリアルコンソールにメッセージも出なかったので使えなかったので考え方をもらった。
ESP32でPC起動リモコンをつくってみた(Wake on LAN) | バスにっき (takabus.com)
まず、ESP32のコンパイルをするための環境を準備する。Software | Arduinoに行って最新のArduino IDEをダウンロードしてインストールする。設定は詳細設定を選んで、言語設定を日本語にするよいかと。あと、Arduino IDEはESP32をサポートしていないので、追加のボードマネージャーのURL: https://dl.espressif.com/dl/package_esp32_index.json を入れる。
左のペインの2番目のボードマネジャーを選んで、ESP32と検索すると、2つ出るのでESP32と出ているものを選択する。これで、Arduino IDEでESP32が使えるようになる。
ツールの中に”他のボードとポートを選択する”というメニューを選択して、前のデバイスドライバーの登録で探したCOMポートの番号とボードの選択を実施する。WIFI版は、ESP32 Dev Moduleでよい。
今回は、Wale On LANのライブラリーを利用することで簡単に作ることができるので、左のペインの3番目を選択して、ボードマネージャーを選択して、Wake on lanと検索して、インストールする。このインストールの延長で2つ追加するかでるので、全部入れてしまう。
これで、大体の設定は完了した。ESP32のUSBを接続してツールを選択すると、HWの緒言が出てくれる。
シリアルモニターを起動して、メッセージが取れるか見てみるとよい。右側にあるボーレートは重要で、その値を初期設定に入れる必要がある。
下記の今回のWOLのスケッチだけど、WIFIのアクセスポイントに入るSSIDとPASSWORDとWOLに起こすPCのMACアドレスは、それぞれの環境に合わせて設定し直すこと。MACアドレスは起こしたいPCにコマンドプロントを起動してipconfig /allで確認できる。
今回のWOLを実施するためのスケッチ。これをコンパイルしてEPS32に書き込めば実行できる。
#include <WiFi.h>
#include <WiFiUdp.h>
#include <WakeOnLan.h>
// GPIO4にスイッチを接続
#define BTNPIN 4
// 必要な変数を用意
WiFiUDP UDP;
WakeOnLan WOL(UDP);
// Wifiのアクセスポイントに合わせて、SSIDとPASSWORDを設定すること
const char *ssid = "SSID";
const char *password = "PASSWORD";
// マジックパッケージ送信 2台のマシンに対して、ここは起こしたいPCのMACアドレスを修正のこと
void wakeMyPC() {
const char *MACAddress = "XX:XX:XX:XX:XX:XX";
WOL.sendMagicPacket(MACAddress);
delay(200);
MACAddress = "YY:YY:YY:YY:YY:YY";
WOL.sendMagicPacket(MACAddress);
delay(200);
}
// チャタリングフリー・スリーブ復帰
unsigned long lastTimeSW1 = 0;
bool sw1 = false;
void IRAM_ATTR handleSW1() {
unsigned long now = millis();
if ((now - lastTimeSW1) > 100 ) sw1 = !sw1;
lastTimeSW1 = now;
}
void setup() {
// コンソールスピード設定 (シリアルモニターの画面に合わせる)
Serial.begin(115200);
// ピンモード初期化
pinMode(BTNPIN, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(BTNPIN), handleSW1, FALLING);
esp_sleep_enable_ext0_wakeup((gpio_num_t)BTNPIN, LOW);
// Wi-Fiに接続
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.println(WiFi.localIP());
}
void loop() {
if (sw1) {
// マジックパケットを送信する
Serial.println("電源ON");
wakeMyPC();
delay(1000);
}
//スリープ節電
esp_deep_sleep_start();
}
うまく行くと、シリアルモニターにWIFIがつながった情報と、ボタンを押したときに電源ONのメッセージがでる。
ものすごく簡単にWOLができるのが良くわかるでしょう。実際にノートPCを起こすにもBIOSの設定とOSの設定が必要になるけど、これは後で。
最近のコメント