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の設定が必要になるけど、これは後で。









 
																			 
																			 
																			












最近のコメント