Modulo gateway ESP32 WT32-ETH01, Ethernet Wi-Fi Bluetooth
zoom_out_map
chevron_left chevron_right

Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.

Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.

Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.

Modulo gateway WT32-ETH01 ESP32, Ethernet 10/100 Mbps, Wi-Fi, Bluetooth, alimentazione 5V o 3.3V

Modulo ESP32 con porta Ethernet RJ45 da 10/100 Mbps, Wi-Fi e Bluetooth, adatto come gateway per automazioni, monitoraggio e progetti IoT. Supporta TCP e UDP in modalità server o client, comandi AT, aggiornamento OTA via rete e crittografia software, con alimentazione a 5 V o 3.3 V.

73,42 RON Tasse incluse

60,68 RON Tasse escluse

Non ci sono ancora recensioni

Spedito entro mercoledì 11 novembre

Acquistando questo prodotto guadagni 3,67 RON in punti fedeltà.

Garanzia: 24 mesi per le persone fisiche
SPEDIZIONE INTERNAZIONALE
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
SPEDIZIONE VELOCE 24 ORE
Spediamo dal nostro magazzino entro 24 ore
PUNTI FEDELTÀ
Ricevi punti a ogni ordine, per un valore del 5%.

Il modulo WT32-ETH01 è una scheda compatta con ESP32 che integra sulla stessa scheda una porta Ethernet RJ45 da 10/100 Mbps, Wi-Fi e Bluetooth. È adatto come gateway tra una rete locale e dispositivi con porta seriale, per automazioni, monitoraggio industriale, pannelli di controllo e progetti IoT che richiedono una connessione stabile via cavo. Il modulo supporta la trasmissione trasparente dei dati tra due delle quattro interfacce disponibili: porta seriale, Wi-Fi, Ethernet e Bluetooth.

Il processore è un ESP32 dual-core Xtensa 32-bit LX6, con memoria flash SPI da 32 Mbit e 520 KB di SRAM. L'interfaccia Ethernet è realizzata con il circuito LAN8720A, mentre le modalità di rete sono TCP server, TCP client, UDP server e UDP client, su IPv4. La velocità della porta seriale può essere impostata tra 80 e 5000000 bps. Il modulo supporta comandi AT, aggiornamento del firmware OTA via Wi-Fi o Ethernet e algoritmi software di crittografia AES, RSA, ECC e SHA.

Tra le caratteristiche principali figurano la porta RJ45 con circuito Ethernet LAN8720A, l'antenna Wi-Fi e Bluetooth integrata sulla scheda, due file di pin da 13 pin con passo 2.54 mm con GPIO, ingressi ADC, UART, i pin EN e LINK, i pin di programmazione TX0, RX0 e IO0, il LED di alimentazione POWER e due LED RXD e TXD per il traffico sulla porta seriale secondaria. L'alimentazione avviene a 5 V tramite il pin 5V oppure a 3.3 V tramite il pin 3V3, usando una sola sorgente.

Essendo una scheda con ESP32, il modulo si programma da Arduino IDE (scheda ESP32 Dev Module), ESP-IDF o PlatformIO, tramite un adattatore USB-TTL con logica a 3.3 V collegato ai pin TX0 e RX0.

 

Specifiche:

Tensione di alimentazione: 5 V (pin 5V) o 3.3 V (pin 3V3), solo una delle due

Corrente: 80 mA in funzionamento medio, alimentatore minimo da 500 mA

Microcontrollore: ESP32 dual-core Xtensa 32-bit LX6, fino a 240 MHz

Memoria Flash: 32 Mbit SPI

SRAM: 520 KB

Ethernet: RJ45 10/100 Mbps, circuito LAN8720A

Wi-Fi: 802.11 b/g/n, 2.4 GHz

Bluetooth: Bluetooth 4.2 (BR/EDR e BLE)

Interfacce dati: Serial, Wi-Fi, Ethernet, Bluetooth

Modalità di rete: TCP server, TCP client, UDP server, UDP client

Protocollo di rete: IPv4, TCP/UDP

Baudrate seriale: 80 - 5000000 bps

Livello logico GPIO: 3.3 V

Crittografia software: AES, RSA, ECC, SHA

Aggiornamento firmware: OTA via Wi-Fi o Ethernet

Temperatura di funzionamento: da -40 °C a +85 °C

Pin: saldati o non saldati, a seconda del lotto, 2 x 13, passo 2.54 mm

Dimensioni: 25 x 63 x 17 mm

 

Layout:

Elemento Funzione
Porta RJ45 Connettore Ethernet 10/100 Mbps per il collegamento a router o switch tramite cavo di rete.
Modulo WT32-S1 con ESP32 Processore principale, con Wi-Fi, Bluetooth e antenna integrata sulla scheda.
Circuito LAN8720A Controller fisico Ethernet, collegato all'ESP32 tramite interfaccia RMII.
Oscillatore Ethernet Fornisce il clock a 50 MHz del circuito LAN8720A ed è avviato dall'ESP32 tramite il pin IO16.
Stabilizzatore di tensione Produce la tensione di 3.3 V della scheda quando il modulo è alimentato tramite il pin 5V.
LED POWER (LED1) Si accende quando l'alimentazione della scheda è normale.
LED RXD (LED3) Si accende quando c'è traffico sulla linea RXD2 (IO5) della porta seriale secondaria.
LED TXD (LED4) Si accende quando c'è traffico sulla linea TXD2 (IO17) della porta seriale secondaria.
Pin LINK Uscita per un indicatore esterno dello stato del collegamento di rete.
Pin EN Abilitazione del modulo con livello high. Portato a GND, resetta il modulo. La scheda non ha pulsante di reset.
Pin IO0 Seleziona la modalità di avvio. Collegato a GND all'avvio, attiva la modalità di programmazione seriale. Lasciato scollegato, avvia il programma dalla memoria flash. La scheda non ha jumper o interruttore, il collegamento si fa con un filo.
Pin TX0 e RX0 Porta seriale principale dell'ESP32 (IO1 e IO3), usata per la programmazione e per il monitor seriale.
File di pin Due file da 13 pin ciascuna con alimentazione, massa, GPIO, ingressi ADC, UART e i pin EN e LINK.

 

Pinout:

I pin sono elencati dal lato della porta RJ45 verso il lato dell'antenna. La fila 1 è quella che contiene i pin LINK, 5V e 3V3, mentre la fila 2 è quella che contiene i pin IO0, RX0 e TX0.

Connettore Pin Funzione
Fila 1 LINK Uscita per l'indicatore dello stato del collegamento di rete
Fila 1 5V Alimentazione 5 V
Fila 1 GND Massa
Fila 1 3V3 Alimentazione 3.3 V
Fila 1 GND Massa
Fila 1 TXD IO17, TXD2, trasmissione seriale secondaria
Fila 1 RXD IO5, RXD2, ricezione seriale secondaria
Fila 1 485_EN IO33, pin di abilitazione per un transceiver RS485
Fila 1 CFG IO32, contrassegnato CFG
Fila 1 EN Abilitazione modulo, livello high. A GND resetta il modulo
Fila 1 3V3 Alimentazione 3.3 V
Fila 1 GND Massa
Fila 1 EN Abilitazione modulo, livello high. A GND resetta il modulo
Fila 2 GND Massa
Fila 2 IO2 GPIO2, pin di avvio. Deve essere lasciato libero o a low in programmazione
Fila 2 IO4 GPIO4, ADC2 CH0
Fila 2 IO35 GPIO35, solo ingresso, ADC1 CH7
Fila 2 IO12 GPIO12, deve essere lasciato libero o a low all'avvio
Fila 2 IO14 GPIO14, ADC2 CH6
Fila 2 IO15 GPIO15, ADC2 CH3
Fila 2 IO36 GPIO36, solo ingresso, ADC1 CH0
Fila 2 IO39 GPIO39, solo ingresso, ADC1 CH3
Fila 2 GND Massa
Fila 2 IO0 Modalità di avvio. A GND all'avvio attiva la programmazione. Usato anche per il clock Ethernet a 50 MHz
Fila 2 RX0 IO3, RXD0, ricezione seriale principale
Fila 2 TX0 IO1, TXD0, trasmissione seriale principale

 

Pin IO0 all'avvio Modalità di avvio ESP32
Non collegato Esecuzione del programma dalla memoria flash (funzionamento normale)
Collegato a GND Bootloader seriale (caricamento del programma tramite TX0 e RX0)

 

Pin ESP32 Usato internamente per
IO16 Avvio dell'oscillatore a 50 MHz del circuito LAN8720A
IO23 MDC, clock di gestione Ethernet
IO18 MDIO, dati di gestione Ethernet
IO0 Ingresso clock di riferimento a 50 MHz (REF_CLK)
IO19, IO21, IO22 TXD0, TX_EN, TXD1 (RMII)
IO25, IO26, IO27 RXD0, RXD1, CRS_DV (RMII)

I pin dell'ultima tabella sono occupati dall'interfaccia Ethernet e non sono portati sulle file di pin.

 

Utilizzo:

Alimentate il modulo o a 5 V tramite il pin 5V, o a 3.3 V tramite il pin 3V3, mai attraverso entrambi i pin contemporaneamente, con massa comune al resto del circuito.

Usate un alimentatore stabile, in grado di fornire almeno 500 mA, e non applicate sul pin 5V una tensione superiore a 5 V. Dopo l'alimentazione, il LED POWER si accende.

Rispettate il livello logico di 3.3 V. Non applicate segnali di 5 V sui pin di segnale e usate un convertitore di livello logico quando comunicate con apparecchiature a 5 V.

Per la programmazione collegate un adattatore USB-TTL con logica a 3.3 V così: TXD dell'adattatore a RX0, RXD dell'adattatore a TX0 e GND a GND. Alimentate il modulo dal pin 5 V dell'adattatore, collegato al pin 5V del modulo.

Non alimentate il modulo dall'uscita a 3.3 V di un piccolo adattatore, perché questa non fornisce la corrente necessaria al funzionamento con Wi-Fi.

Collegate il pin IO0 a un pin GND della fila 2, poi accendete l'alimentazione oppure resettate il modulo portando brevemente il pin EN a GND. Il modulo entra in modalità di programmazione.

In Arduino IDE selezionate la scheda ESP32 Dev Module, impostate la velocità di caricamento a 115200 e caricate il programma.

Dopo il caricamento rimuovete il collegamento tra IO0 e GND, poi spegnete e riaccendete l'alimentazione oppure resettate il modulo tramite EN. Il programma parte dalla memoria flash.

Durante la programmazione e all'avvio lasciate i pin IO2 e IO12 scollegati o a livello low, perché il loro livello all'avvio influenza l'avvio dell'ESP32.

Per la connessione Ethernet collegate un cavo di rete tra la porta RJ45 e un router o switch con DHCP, poi aprite il monitor seriale a 115200 baud e verificate che il modulo ottenga un indirizzo IP.

Per la connessione Wi-Fi impostate il nome e la password della rete tramite comandi AT o tramite il codice dell'applicazione.

Non usate i pin IO2, IO4, IO12, IO14 e IO15 come ingressi analogici mentre il Wi-Fi è attivo, perché appartengono al convertitore ADC2. Per misurazioni analogiche usate IO35, IO36 e IO39, che sono solo ingressi.

Per gli aggiornamenti OTA assicuratevi che il modulo abbia accesso alla rete locale e usate la funzione di aggiornamento integrata nel firmware oppure l'utilità espota.py.

Per un funzionamento stabile usate un alimentatore a avvio rapido e cavi di alimentazione corti, e in ambienti industriali mantenete il modulo nell'intervallo di temperatura da -40 °C a +85 °C, protetto da umidità e vibrazioni.

88265
Tensione di alimentazione
5 V sau 3.3 V
Dimensioni
25 x 63 x 17 mm
Temperatura di esercizio
-40 °C la +85 °C
Numero di pin
2 x 13
Interfaccia
Seriale, Wi-Fi, Ethernet, Bluetooth
Tensione logica
3.3 V
Corrente
80 mA in functionare medie, sursa de minimum 500 mA
Memoria Flash
32 Mbit SPI
Passo pin
2.54 mm
Microcontrollore
ESP32 dual-core Xtensa 32-bit LX6, pana la 240 MHz
WiFi
2.4 GHz, 802.11 b/g/n
Bluetooth
Bluetooth 4.2 (BR/EDR si BLE)
Memoria SRAM
520 KB
Protocollo
IPv4, TCP/UDP

Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.

Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.

Avertismente generale de siguranta:

Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.

Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.

Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.

Nu lasati produsul alimentat nesupravegheat in timpul testelor.

Produsul nu este jucarie si nu este destinat copiilor.

Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.

Identificare produs:

Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.

Producator / Importator / Distribuitor:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Website: www.sigmanortec.ro

Persoana responsabila in UE:

Sigmanortec S.R.L.

Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania

E-mail: [email protected]

Documentatie si siguranta:

Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].

/*
  WT32-ETH01 Ethernet + TCP client test

  Board (Arduino IDE, Tools > Board): ESP32 Dev Module
  Board package (Boards Manager): esp32 by Espressif Systems, versions 2.0.x or 3.x
  Boards Manager URL (File > Preferences):
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  Libraries: none to install. WiFi.h, ETH.h and WiFiClient.h come with the ESP32 package.

  Wiring (CP2102 USB to TTL adapter, 3.3 V logic):
    Adapter +5V -> module 5V pin
    Adapter GND -> module GND pin
    Adapter TXD -> module RX0
    Adapter RXD -> module TX0
    Module IO0  -> GND only while uploading, then remove it and restart the module
    RJ45 port   -> router or switch with DHCP
*/

#include <WiFi.h>
#include <ETH.h>
#include <WiFiClient.h>

// Ethernet PHY (LAN8720A) settings specific to the WT32-ETH01
#define WT_PHY_ADDR  1
#define WT_PHY_POWER 16
#define WT_PHY_MDC   23
#define WT_PHY_MDIO  18

// TCP server to connect to (change to the address of your server)
const char* serverHost = "192.168.1.100";
const uint16_t serverPort = 8080;

static bool ethConnected = false;

// Network event handler
void onEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH started");
      ETH.setHostname("wt32-eth01");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH cable connected");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("IP address: ");
      Serial.println(ETH.localIP());
      ethConnected = true;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH disconnected");
      ethConnected = false;
      break;
    default:
      break;
  }
}

void setup() {
  Serial.begin(115200);
  delay(500);
  WiFi.onEvent(onEvent);

  // The order of the arguments changed in version 3 of the ESP32 package
#if ESP_ARDUINO_VERSION_MAJOR >= 3
  ETH.begin(ETH_PHY_LAN8720, WT_PHY_ADDR, WT_PHY_MDC, WT_PHY_MDIO, WT_PHY_POWER, ETH_CLOCK_GPIO0_IN);
#else
  ETH.begin(WT_PHY_ADDR, WT_PHY_POWER, WT_PHY_MDC, WT_PHY_MDIO, ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_IN);
#endif
}

void loop() {
  if (!ethConnected) {
    delay(500);
    return;
  }

  WiFiClient client;
  if (!client.connect(serverHost, serverPort)) {
    Serial.println("TCP connection failed");
    delay(2000);
    return;
  }

  Serial.println("TCP connected, sending test payload");
  client.println("Hello from WT32-ETH01");

  // Wait up to 3 seconds for an answer
  unsigned long start = millis();
  while (client.available() == 0) {
    if (millis() - start > 3000) {
      Serial.println("Server timeout");
      client.stop();
      return;
    }
    delay(10);
  }

  // Print the answer of the server
  while (client.available()) {
    Serial.write(client.read());
  }
  client.stop();
  delay(5000);
}

WT32-ETH01 è una scheda con ESP32 e porta Ethernet, utilizzata in progetti che necessitano di un collegamento via cavo più stabile del Wi-Fi, ad esempio nodi di automazione, gateway per apparecchiature seriali o pannelli di monitoraggio. In questo tutorial usiamo il modulo da solo, programmato da Arduino IDE con la scheda ESP32 Dev Module, senza alcuna altra scheda di sviluppo.

Il modulo non ha porta USB, quindi lo programmiamo tramite un adattatore USB-TTL CP2102 con logica a 3.3 V. Alla fine avremo un programma che avvia l'Ethernet, mostra l'indirizzo IP ricevuto dal router e verifica periodicamente che la rete risponda.

Modulo Gateway Wireless ESP32 con Ethernet, Wi-Fi e Bluetooth, WT32-ETH01

Come funziona:

L'ESP32 contiene il controller MAC per Ethernet, mentre il circuito LAN8720A presente sulla scheda è la parte fisica (PHY) che comunica con il cavo. I due si collegano tramite l'interfaccia RMII, che richiede un clock di riferimento a 50 MHz. Questo clock arriva da un oscillatore presente sulla scheda, avviato dall'ESP32 tramite il pin IO16, ed entra nell'ESP32 sul pin IO0. Per questo motivo nel programma il pin IO16 è dichiarato come pin di alimentazione del PHY e il clock è impostato su ETH_CLOCK_GPIO0_IN.

I pin IO23 (MDC) e IO18 (MDIO) formano il bus di gestione con cui l'ESP32 configura il LAN8720A, mentre l'indirizzo PHY è 1. I dati veri e propri circolano sui pin RMII IO19, IO21, IO22, IO25, IO26 e IO27, che sono usati internamente e non compaiono sui connettori a barra.

Qualche calcolo utile. La porta seriale a 115200 baud trasmette 10 bit per ogni byte (un bit di start, 8 bit di dati e un bit di stop), quindi circa 115200 / 10 = 11520 byte al secondo. L'Ethernet a 100 Mbps ha una velocità teorica di 100 / 8 = 12.5 MB al secondo, più di 1000 volte superiore. Il consumo medio è di 80 mA, ma l'alimentatore deve poter fornire almeno 500 mA per i picchi di corrente del Wi-Fi e dell'Ethernet. Una porta USB offre 500 mA, quindi è sufficiente.

Collegamento:

Alimentiamo il modulo dal pin +5V dell'adattatore CP2102, che trasferisce direttamente la tensione di 5 V dell'USB. Non usiamo il pin 3V3 dell'adattatore, perché il suo regolatore eroga una corrente bassa, insufficiente per un ESP32 con Wi-Fi. I segnali sono a 3.3 V, quindi non serve un convertitore di livello, ma non applicate mai 5 V sui pin di segnale. La linea seriale va incrociata: TXD dell'adattatore su RX0 e RXD dell'adattatore su TX0. Il pin IO0 va collegato a GND solo durante il caricamento del programma.

Pin del modulo Si collega a Funzione
5V (barretta 1) Pin +5V dell'adattatore CP2102 Alimentazione 5 V dall'USB
GND (barretta 1, accanto al pin 5V) Pin GND dell'adattatore CP2102 Massa comune
RX0 (barretta 2) Pin TXD dell'adattatore CP2102 Ricezione seriale, IO3
TX0 (barretta 2) Pin RXD dell'adattatore CP2102 Trasmissione seriale, IO1
IO0 (barretta 2) Pin GND accanto a IO0, sulle barrette 2 Modalità di programmazione, solo durante il caricamento
Porta RJ45 Router o switch con DHCP, tramite cavo Cat5e Connessione di rete
3V3 Non collegato Non si alimenta da qui quando si usa il pin 5V

Collegamento WT32-ETH01 al convertitore USB-TTL CP2102 per la programmazione, con cavo Ethernet al router

Pulsanti, regolazioni e indicatori:

La scheda non ha pulsanti, potenziometri, jumper o interruttori. L'avvio in modalità di programmazione si fa con un filo tra IO0 e GND, mentre il reset si fa con il pin EN. Lo stato della scheda è indicato da tre LED.

Elemento Cosa fa Come si usa
Collegamento IO0 - GND Sceglie la modalità di avvio dell'ESP32 Collegato all'accensione, l'ESP32 attende il programma via seriale. Rimosso, esegue il programma dalla flash.
Pin EN Attiva o resetta il modulo Toccato brevemente a GND, resetta il modulo. Lasciato libero, il modulo resta acceso.
LED POWER (LED1) Indica l'alimentazione Si accende quando l'alimentazione è corretta. Se resta spento, verificate l'alimentazione e la polarità.
LED RXD (LED3) Indica traffico su RXD2 (IO5) Si accende quando sulla linea RXD2 passano dati. Nel programma del tutorial resta spento, perché quella linea non è usata.
LED TXD (LED4) Indica traffico su TXD2 (IO17) Si accende quando sulla linea TXD2 passano dati. Nel programma del tutorial resta spento.
Pin LINK Uscita per l'indicatore del collegamento di rete Può essere collegato a un LED esterno con resistenza di limitazione, se volete vedere lo stato del collegamento.

Modalità di programmazione. Collegate il filo tra IO0 e GND prima di alimentare la scheda o prima di resettarla. Quando Arduino IDE termina il caricamento, rimuovete il filo e riavviate l'alimentazione. Se il monitor seriale mostra il messaggio waiting for download, il filo è ancora inserito oppure la scheda non è stata riavviata.

Reset. Per riavviare il programma senza togliere l'alimentazione, toccate brevemente il pin EN a GND con un filo. Il programma riparte dall'inizio e rivedrete sul monitor seriale i messaggi di avvio.

LED POWER. Appena collegate l'adattatore alla USB il LED deve accendersi subito. È il primo segno che alimentazione e massa sono corrette.

Scheda e librerie:

In Arduino IDE selezionate da Tools > Board la scheda ESP32 Dev Module, dal pacchetto esp32 di Espressif Systems, installato da Boards Manager. Il pacchetto non è incluso in Arduino IDE, quindi aggiungete prima in File > Preferences, alla voce Additional boards manager URLs, l'indirizzo https://espressif.github.io/arduino-esp32/package_esp32_index.json. Il programma è stato scritto per le versioni 2.0.x e 3.x del pacchetto. Impostate Upload Speed a 115200.

Il programma usa solo le librerie incluse nel pacchetto ESP32 (WiFi.h, ETH.h e WiFiClient.h), quindi non è necessario installare alcuna libreria da Library Manager.

Il codice:

Il programma avvia l'interfaccia Ethernet con i parametri specifici della scheda WT32-ETH01, mostra gli eventi di rete e l'indirizzo IP, e ogni 5 secondi tenta una connessione TCP al gateway della rete, cioè al router, sulla porta 80.

/*
  WT32-ETH01 Ethernet test: prints the IP address and checks the router
  Board (Arduino IDE, Tools > Board): ESP32 Dev Module
  Board package (Boards Manager): esp32 by Espressif Systems, versions 2.0.x or 3.x
  Boards Manager URL (File > Preferences):
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  Libraries: none to install. WiFi.h, ETH.h and WiFiClient.h come with the ESP32 package.
  Wiring (CP2102 USB to TTL adapter, 3.3 V logic):
    Adapter +5V -> module 5V pin (row 1)
    Adapter GND -> module GND pin next to 5V (row 1)
    Adapter TXD -> module RX0
    Adapter RXD -> module TX0
    Module IO0  -> module GND next to IO0 (row 2), only while uploading
    RJ45 port   -> router or switch with DHCP
*/
#include <WiFi.h>
#include <ETH.h>
// Ethernet PHY (LAN8720A) settings specific to the WT32-ETH01
#define WT_PHY_ADDR  1   // PHY address
#define WT_PHY_POWER 16  // GPIO16 enables the 50 MHz oscillator
#define WT_PHY_MDC   23  // Management clock pin
#define WT_PHY_MDIO  18  // Management data pin
static bool ethConnected = false;       // True after an IP address is received
static unsigned long lastCheck = 0;     // Time of the last network check
const unsigned long CHECK_INTERVAL = 5000;  // Check every 5 seconds
// Called by the system for every network event
void onEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH started");
      ETH.setHostname("wt32-eth01");  // Name shown on the router
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH cable connected");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.println(ETH.macAddress());
      Serial.print("IP address: ");
      Serial.println(ETH.localIP());
      Serial.print("Subnet mask: ");
      Serial.println(ETH.subnetMask());
      Serial.print("Gateway: ");
      Serial.println(ETH.gatewayIP());
      ethConnected = true;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH cable disconnected");
      ethConnected = false;
      break;
    case ARDUINO_EVENT_ETH_STOP:
      Serial.println("ETH stopped");
      ethConnected = false;
      break;
    default:
      break;
  }
}
void setup() {
  Serial.begin(115200);  // Serial monitor on TX0 / RX0
  delay(500);
  Serial.println("WT32-ETH01 Ethernet test");
  WiFi.onEvent(onEvent);  // Register the event handler
  // The order of the arguments changed in version 3 of the ESP32 package
#if ESP_ARDUINO_VERSION_MAJOR >= 3
  ETH.begin(ETH_PHY_LAN8720, WT_PHY_ADDR, WT_PHY_MDC, WT_PHY_MDIO, WT_PHY_POWER, ETH_CLOCK_GPIO0_IN);
#else
  ETH.begin(WT_PHY_ADDR, WT_PHY_POWER, WT_PHY_MDC, WT_PHY_MDIO, ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_IN);
#endif
}
void loop() {
  if (millis() - lastCheck < CHECK_INTERVAL) {
    return;  // Not time yet
  }
  lastCheck = millis();
  if (!ethConnected) {
    Serial.println("Waiting for an IP address...");
    return;
  }
  // Show the link speed and duplex mode
  Serial.print("Link: ");
  Serial.print((unsigned int)ETH.linkSpeed());
  Serial.print(" Mbps, ");
  Serial.println(ETH.fullDuplex() ? "full duplex" : "half duplex");
  // Try a TCP connection to the router on port 80 with a 3 second timeout
  WiFiClient client;
  if (client.connect(ETH.gatewayIP(), 80, 3000)) {
    Serial.println("Router reachable on port 80");
    client.stop();  // Close the connection
  } else {
    Serial.println("Router did not accept the connection on port 80");
  }
}

Come funziona il codice:

All'inizio definiamo i parametri del PHY: WT_PHY_ADDR è l'indirizzo 1 del circuito LAN8720A, WT_PHY_POWER è il pin 16 che avvia l'oscillatore, mentre WT_PHY_MDC e WT_PHY_MDIO sono i pin 23 e 18 del bus di gestione. La variabile ethConnected memorizza se abbiamo ricevuto un indirizzo IP, mentre lastCheck memorizza il momento dell'ultima verifica.

La funzione onEvent viene richiamata dal sistema a ogni evento di rete. Con ARDUINO_EVENT_ETH_START impostiamo il nome dell'host con ETH.setHostname. Con ARDUINO_EVENT_ETH_CONNECTED sappiamo che il cavo è collegato. Con ARDUINO_EVENT_ETH_GOT_IP mostriamo l'indirizzo IP, la maschera e il gateway e impostiamo ethConnected su true. Con ARDUINO_EVENT_ETH_DISCONNECTED impostiamo ethConnected su false.

Nel setup avviamo il monitor seriale a 115200 baud, registriamo la funzione onEvent con WiFi.onEvent e richiamiamo ETH.begin. L'ordine degli argomenti di ETH.begin è cambiato nella versione 3 del pacchetto ESP32, per questo la chiamata è scelta con la direttiva ESP_ARDUINO_VERSION_MAJOR.

Nel loop controlliamo ogni 5 secondi, con millis, se l'Ethernet è connesso. In caso affermativo mostriamo la velocità del collegamento con ETH.linkSpeed e la modalità duplex, poi creiamo un oggetto WiFiClient e chiamiamo client.connect verso ETH.gatewayIP() sulla porta 80, con un limite di 3000 ms. Se il router accetta la connessione, la rete funziona completamente e chiudiamo la connessione con client.stop.

Risultato:

Aprite il monitor seriale a 115200 baud dopo aver rimosso il collegamento IO0 - GND e riavviato la scheda. Dopo alcuni secondi compaiono i messaggi qui sotto, con l'indirizzo IP assegnato dal vostro router.

WT32-ETH01 Ethernet test
ETH started
ETH cable connected
ETH MAC: 24:6F:28:A1:5C:7E
IP address: 192.168.1.57
Subnet mask: 255.255.255.0
Gateway: 192.168.1.1
Link: 100 Mbps, full duplex
Router reachable on port 80
Link: 100 Mbps, full duplex
Router reachable on port 80

Problemi frequenti:

Il caricamento si interrompe con l'errore Failed to connect to ESP32. La causa è di solito IO0 non collegato a GND all'avvio oppure i fili TX e RX non incrociati. Collegate IO0 a GND, verificate che TXD dell'adattatore vada a RX0 e RXD a TX0, poi alimentate di nuovo la scheda e ripetete il caricamento.

Dopo il caricamento il monitor seriale mostra waiting for download. Il filo tra IO0 e GND è ancora inserito. Rimuovetelo e riavviate l'alimentazione.

Sul monitor seriale compaiono caratteri senza senso. La velocità del monitor seriale non è 115200 baud. Selezionate questa velocità nell'angolo in basso a destra del monitor.

Appare ETH started, ma non compare nessun indirizzo IP. Il cavo non è collegato, il router non ha il DHCP attivo oppure la porta è difettosa. Verificate il cavo, provate un'altra porta del router e controllate se appare il messaggio di cavo collegato.

Il modulo si riavvia da solo o si blocca all'avvio. L'alimentazione è insufficiente oppure la tensione sale troppo lentamente. Usate il pin +5V dell'adattatore o un alimentatore da 5 V con almeno 500 mA, evitate l'alimentazione dal pin 3V3 dell'adattatore e usate fili di alimentazione corti.

Il programma non compila e dà errore su ETH.begin. Il pacchetto ESP32 installato è una versione diversa da quella prevista. Usate una versione 2.0.x o 3.x e lasciate selezionata la scheda ESP32 Dev Module.

Limitazioni e consigli:

Il modulo ha una sola porta Ethernet da 10/100 Mbps, senza alimentazione tramite cavo di rete (PoE), quindi necessita sempre di un'alimentazione separata. I pin IO34 - IO39 sono solo ingressi e sui connettori a barra sono portati solo IO35, IO36 e IO39. Gli ingressi ADC2 (IO2, IO4, IO12, IO14, IO15) non possono essere letti mentre il Wi-Fi è attivo. I pin IO0, IO2 e IO12 sono pin di avvio e non devono essere forzati all'avvio.

Il livello logico è di 3.3 V, quindi per apparecchiature a 5 V aggiungete un convertitore di livello. Il modulo può lavorare tra -40 °C e +85 °C, ma è bene proteggerlo da umidità e vibrazioni.

In seguito potete costruire un gateway seriale-Ethernet con i pin TXD e RXD, un server web per comandare alcuni relè, un nodo MQTT per automazioni oppure un dispositivo con aggiornamento firmware OTA via rete.