NIC版のWT32-ETH01のWOL装置のスケッチを作成した。
イーサーネット版のWT32-ETH01を使ったWOL装置のスケッチを作成した。WIFIとの相違点のみ記載する。基本的にはWIFI時のインストールが完了していることが前提だ。ボードマネージャーだけど、WT32-ETH01は専用に設定があるので、それを選択する。
選択して使える状態になった場合は下記の画面が出る。
NIC版のWOLのスケッチは初期設定を下記のサイトから参照して、WT32-EHT01に合わせた。
これをベースに利用しているポートをWT32-ETH01に合わせた。
#include <ETH.h> #include <WiFi.h> #include <WifiUdp.h> #include <WakeOnLan.h> /* * ETH_CLOCK_GPIO0_IN - default: external clock from crystal oscillator * ETH_CLOCK_GPIO0_OUT - 50MHz clock from internal APLL output on GPIO0 - possibly an inverter is needed for LAN8720 * ETH_CLOCK_GPIO16_OUT - 50MHz clock from internal APLL output on GPIO16 - possibly an inverter is needed for LAN8720 * ETH_CLOCK_GPIO17_OUT - 50MHz clock from internal APLL inverted output on GPIO17 - tested with LAN8720 */ /* This sketch shows the Ethernet event usage */ // Important to be defined BEFORE including ETH.h for ETH.begin() to work. #define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN // Pin# of the enable signal for the external crystal oscillator (-1 to disable for internal APLL source) #define ETH_POWER_PIN 16 // Type of the Ethernet PHY (LAN8720 or TLK110) #define ETH_TYPE ETH_PHY_LAN8720 // I²C-address of Ethernet PHY (0 or 1 for LAN8720, 31 for TLK110) #define ETH_ADDR PHY1 // Pin# of the I²C clock signal for the Ethernet PHY #define ETH_MDC_PIN 23 // Pin# of the I²C IO signal for the Ethernet PHY #define ETH_MDIO_PIN 18 // GPIO4にスイッチを接続 #define BTNPIN 4 // 必要な変数を用意 WiFiUDP UDP; WakeOnLan WOL(UDP); // Wifi //const char *ssid = "SSID"; //const char *password = "PASSWOLRD"; // NIC static bool eth_connected = false; // WARNING: onEvent is called from a separate FreeRTOS task (thread)! void onEvent(arduino_event_id_t event) { switch (event) { case ARDUINO_EVENT_ETH_START: Serial.println("ETH Started"); // The hostname must be set after the interface is started, but needs // to be set before DHCP, so set it from the event handler thread. ETH.setHostname("esp32-ethernet"); break; case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break; case ARDUINO_EVENT_ETH_GOT_IP: Serial.println("ETH Got IP"); Serial.println(ETH); eth_connected = true; break; case ARDUINO_EVENT_ETH_LOST_IP: Serial.println("ETH Lost IP"); eth_connected = false; break; case ARDUINO_EVENT_ETH_DISCONNECTED: Serial.println("ETH Disconnected"); eth_connected = false; break; case ARDUINO_EVENT_ETH_STOP: Serial.println("ETH Stopped"); eth_connected = false; break; default: break; } } // マジックパッケージ送信 void wakeMyPC() { const char *MACAddress = "XX:XX:XX:XX:XX:XX"; WOL.sendMagicPacket(MACAddress); } // チャタリングフリー・スリーブ復帰 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); // Etherに接続 Network.onEvent(onEvent); ETH.begin(); // 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()); // eth_connected=true } void loop() { if (eth_connected) { if (sw1) { // マジックパケットを送信する Serial.println("電源ON"); wakeMyPC(); delay(1000); } } }
しかし。動かしてみたら、NICの初期化に失敗してしまった。自動ダウンロード機能のEN端子が悪さしていることが分かった。
ブレットボードにシャンパーピンを追加して、自動シャットダウンに行くEN端子の信号をカットすることにした。
これで、NIC版のWOL装置が動くようになった。結局こっちは動くか確認する程度だったので、スリープなどの機能は入れていない。
(Visited 1 times, 1 visits today)
最近のコメント