WIFI版のWake On LANのESP32のスケッチを作成した。

Webページをシェア

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 を入れる。

Arduino IDEは、最初は英語なので、言語を日本語にしたり、外部ラブラリーを設定する必要がある。

Arduino IDEは、最初は英語なので、言語を日本語にしたり、外部ラブラリーを設定する必要がある。

左のペインの2番目のボードマネジャーを選んで、ESP32と検索すると、2つ出るのでESP32と出ているものを選択する。これで、Arduino IDEでESP32が使えるようになる。

Arduino IDEは標準では、ESP32をサポートしていないので、ライブラリーから、ESP32を選択する。

Arduino IDEは標準では、ESP32をサポートしていないので、ライブラリーから、ESP32を選択する。

ツールの中に”他のボードとポートを選択する”というメニューを選択して、前のデバイスドライバーの登録で探したCOMポートの番号とボードの選択を実施する。WIFI版は、ESP32 Dev Moduleでよい。

ESP32のCOMポートとボードの種類を設定する

ESP32のCOMポートとボードの種類を設定する

今回は、Wale On LANのライブラリーを利用することで簡単に作ることができるので、左のペインの3番目を選択して、ボードマネージャーを選択して、Wake on lanと検索して、インストールする。このインストールの延長で2つ追加するかでるので、全部入れてしまう。

Magic Packetを出すWake On LANライブラリーが用意されている

Magic Packetを出すWake On LANライブラリーが用意されている

これで、大体の設定は完了した。ESP32のUSBを接続してツールを選択すると、HWの緒言が出てくれる。

ボードの詳細設定を実施する。

ボードの詳細設定を実施する。

シリアルモニターを起動して、メッセージが取れるか見てみるとよい。右側にあるボーレートは重要で、その値を初期設定に入れる必要がある。

シリアルモニターを起動して、ESP32からメッセージを出してデバックできる。

シリアルモニターを起動して、ESP32からメッセージを出してデバックできる。

下記の今回のWOLのスケッチだけど、WIFIのアクセスポイントに入るSSIDとPASSWORDとWOLに起こすPCのMACアドレスは、それぞれの環境に合わせて設定し直すこと。MACアドレスは起こしたいPCにコマンドプロントを起動してipconfig /allで確認できる。

MACアドレスの取得法

MACアドレスの取得法

今回の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のメッセージがでる。

WIFI版のWOLが起動したところ。

WIFI版のWOLが起動したところ。

ものすごく簡単にWOLができるのが良くわかるでしょう。実際にノートPCを起こすにもBIOSの設定とOSの設定が必要になるけど、これは後で。

(Visited 1 times, 1 visits today)

hati

このページを運営しているHATIです。ERAターボやデトミニ、艦これが大好きです。日々の生活で気が付いたことをつづっていこうと思います。

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください