NIC版のWT32-ETH01のWOL装置のスケッチを作成した。

Webページをシェア

イーサーネット版のWT32-ETH01を使ったWOL装置のスケッチを作成した。WIFIとの相違点のみ記載する。基本的にはWIFI時のインストールが完了していることが前提だ。ボードマネージャーだけど、WT32-ETH01は専用に設定があるので、それを選択する。

NIC用のWT32-ETH01を設定する。

NIC用のWT32-ETH01を設定する。

選択して使える状態になった場合は下記の画面が出る。

WT32-ETH01の設定が完了したところ

WT32-ETH01の設定が完了したところ

NIC版のWOLのスケッチは初期設定を下記のサイトから参照して、WT32-EHT01に合わせた。

ATS.ESP32/libraries/WiFi/examples/ETH_LAN8720_internal_clock/ETH_LAN8720_internal_clock.ino at master · IvanPLoza/ATS.ESP32 · GitHub

これをベースに利用しているポートを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端子が悪さしていることが分かった。

自動ダウンロード機能は、NICに影響されることがあるので、EN端子を切れるようする必要がある。

自動ダウンロード機能は、NICに影響されることがあるので、EN端子を切れるようする必要がある。

ブレットボードにシャンパーピンを追加して、自動シャットダウンに行くEN端子の信号をカットすることにした。

自動ダウンロード機能がEN端子に悪さをするのでジャンパーピンを追加

自動ダウンロード機能がEN端子に悪さをするのでジャンパーピンを追加

これで、NIC版のWOL装置が動くようになった。結局こっちは動くか確認する程度だったので、スリープなどの機能は入れていない。

NIC版のWake On LANが起動したところ。

NIC版のWake On LANが起動したところ。

(Visited 1 times, 1 visits today)

hati

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

おすすめ

コメントを残す

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

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