Imaginile produselor au caracter informativ si pot prezenta diferente minore, in functie de lot si de furnizor. Este posibil ca specificatiile si pretul produselor sa fie modificate fara preaviz. Facem tot posibilul sa adaugam in pagina produselor specificatii cat mai exacte si corecte dar este posibil ca acestea sa nu fie in totalitate corecte. in cazul in care identificati un astfel de caz, va rugam sa ne semnalati acest lucru.
Produsele noastre sunt destinate in principal dezvoltarii, prototiparii si proiectelor tehnice. Informatiile privind specificatiile, instructiunile si conformitatea sunt furnizate conform datelor disponibile de la producatori sau furnizori. Pentru integrarea in produse finale sau aplicatii comerciale, recomandam verificarea compatibilitatii si conformitatii in functie de utilizarea dorita.
Specificatiile tehnice mentionate (curent, putere etc.) reprezinta valori maxime admise in conditii ideale de functionare. Pentru o utilizare sigura si o durata de viata optima, recomandam exploatarea produsului in regim continuu la cel mult 50% din valorile maxime specificate.
Modul gateway WT32-ETH01 ESP32, Ethernet 10/100 Mbps, Wi-Fi, Bluetooth, alimentare 5V sau 3.3V
Modul ESP32 cu port Ethernet RJ45 de 10/100 Mbps, Wi-Fi si Bluetooth, potrivit ca gateway pentru automatizari, monitorizare si proiecte IoT. Suporta TCP si UDP in mod server sau client, comenzi AT, actualizare OTA prin retea si criptare software, iar alimentarea se face la 5 V sau 3.3 V.
Expediere estimata: miercuri 11 noiembrie
Cumparand acest produs primesti 3,67 RON in puncte de fidelitate.
Adauga in cos produse in valoare de 130 Ron si ai livrare gratuita daca alegi sa platesti online
Produsele sunt expediate din stoc propriu
Primesti puncte la fiecare comanda, in valoare de 5%
Modulul WT32-ETH01 este o placa compacta cu ESP32 care combina pe aceeasi placa un port Ethernet RJ45 de 10/100 Mbps, Wi-Fi si Bluetooth. Este potrivit ca gateway intre o retea locala si dispozitive cu port serial, pentru automatizari, monitorizare industriala, panouri de control si proiecte IoT care au nevoie de o conexiune stabila prin cablu. Modulul accepta transmisie transparenta de date intre doua dintre cele patru interfete disponibile: port serial, Wi-Fi, Ethernet si Bluetooth.
Procesorul este un ESP32 dual-core Xtensa 32-bit LX6, cu memorie flash SPI de 32 Mbit si 520 KB de SRAM. Interfata Ethernet este realizata cu circuitul LAN8720A, iar modurile de lucru in retea sunt TCP server, TCP client, UDP server si UDP client, peste IPv4. Viteza portului serial se poate seta intre 80 si 5000000 bps. Modulul accepta comenzi AT, actualizare de firmware OTA prin Wi-Fi sau Ethernet si algoritmi software de criptare AES, RSA, ECC si SHA.
Printre caracteristicile principale se numara portul RJ45 cu circuit Ethernet LAN8720A, antena Wi-Fi si Bluetooth integrata pe placa, doua barete de cate 13 pini la pas de 2.54 mm cu GPIO, intrari ADC, UART, pinii EN si LINK, pinii de programare TX0, RX0 si IO0, LED-ul de alimentare POWER si doua LED-uri RXD si TXD pentru traficul pe portul serial secundar. Alimentarea se face la 5 V prin pinul 5V sau la 3.3 V prin pinul 3V3, folosind o singura sursa.
Fiind o placa cu ESP32, modulul se programeaza din Arduino IDE (placa ESP32 Dev Module), ESP-IDF sau PlatformIO, printr-un adaptor USB-TTL cu logica de 3.3 V conectat la pinii TX0 si RX0.
Specificatii:
Tensiune alimentare: 5 V (pin 5V) sau 3.3 V (pin 3V3), numai una dintre ele
Curent: 80 mA in functionare medie, sursa de minimum 500 mA
Microcontroler: ESP32 dual-core Xtensa 32-bit LX6, pana la 240 MHz
Memorie Flash: 32 Mbit SPI
SRAM: 520 KB
Ethernet: RJ45 10/100 Mbps, circuit LAN8720A
Wi-Fi: 802.11 b/g/n, 2.4 GHz
Bluetooth: Bluetooth 4.2 (BR/EDR si BLE)
Interfete de date: Serial, Wi-Fi, Ethernet, Bluetooth
Moduri de retea: TCP server, TCP client, UDP server, UDP client
Protocol retea: IPv4, TCP/UDP
Baudrate serial: 80 - 5000000 bps
Nivel logic GPIO: 3.3 V
Criptare software: AES, RSA, ECC, SHA
Actualizare firmware: OTA prin Wi-Fi sau Ethernet
Temperatura de functionare: -40 °C la +85 °C
Pini: Lipiti sau nelipiti, in functie de lot, 2 x 13, pas 2.54 mm
Dimensiuni: 25 x 63 x 17 mm
Layout:
| Element | Functie |
|---|---|
| Port RJ45 | Conector Ethernet 10/100 Mbps pentru conectarea la router sau switch printr-un cablu de retea. |
| Modul WT32-S1 cu ESP32 | Procesorul principal, cu Wi-Fi, Bluetooth si antena integrata pe placa. |
| Circuit LAN8720A | Controlerul fizic Ethernet, legat de ESP32 prin interfata RMII. |
| Oscilator Ethernet | Furnizeaza ceasul de 50 MHz al circuitului LAN8720A si este pornit de ESP32 prin pinul IO16. |
| Stabilizator de tensiune | Produce tensiunea de 3.3 V a placii cand modulul este alimentat prin pinul 5V. |
| LED POWER (LED1) | Se aprinde cand alimentarea placii este normala. |
| LED RXD (LED3) | Se aprinde cand exista trafic pe linia RXD2 (IO5) a portului serial secundar. |
| LED TXD (LED4) | Se aprinde cand exista trafic pe linia TXD2 (IO17) a portului serial secundar. |
| Pin LINK | Iesire pentru un indicator extern al starii legaturii de retea. |
| Pin EN | Activare cu nivel high a modulului. Adus la GND, reseteaza modulul. Placa nu are buton de reset. |
| Pin IO0 | Selecteaza modul de pornire. Conectat la GND la pornire, activeaza modul de programare prin serial. Lasat neconectat, porneste programul din memoria flash. Placa nu are jumper sau comutator, legatura se face cu un fir. |
| Pini TX0 si RX0 | Portul serial principal al ESP32 (IO1 si IO3), folosit pentru programare si pentru monitorul serial. |
| Baretele de pini | Doua randuri de cate 13 pini cu alimentare, masa, GPIO, intrari ADC, UART si pinii EN si LINK. |
Pinout:

Pinii sunt listati de la capatul cu portul RJ45 spre capatul cu antena. Bareta 1 este cea care contine pinii LINK, 5V si 3V3, iar bareta 2 este cea care contine pinii IO0, RX0 si TX0.
| Conector | Pin | Functie |
|---|---|---|
| Bareta 1 | LINK | Iesire pentru indicatorul starii legaturii de retea |
| Bareta 1 | 5V | Alimentare 5 V |
| Bareta 1 | GND | Masa |
| Bareta 1 | 3V3 | Alimentare 3.3 V |
| Bareta 1 | GND | Masa |
| Bareta 1 | TXD | IO17, TXD2, transmisie serial secundar |
| Bareta 1 | RXD | IO5, RXD2, receptie serial secundar |
| Bareta 1 | 485_EN | IO33, pin de activare pentru un transceiver RS485 |
| Bareta 1 | CFG | IO32, marcat CFG |
| Bareta 1 | EN | Activare modul, nivel high. La GND reseteaza modulul |
| Bareta 1 | 3V3 | Alimentare 3.3 V |
| Bareta 1 | GND | Masa |
| Bareta 1 | EN | Activare modul, nivel high. La GND reseteaza modulul |
| Bareta 2 | GND | Masa |
| Bareta 2 | IO2 | GPIO2, pin de pornire. Trebuie lasat liber sau pe low la programare |
| Bareta 2 | IO4 | GPIO4, ADC2 CH0 |
| Bareta 2 | IO35 | GPIO35, numai intrare, ADC1 CH7 |
| Bareta 2 | IO12 | GPIO12, trebuie lasat liber sau pe low la pornire |
| Bareta 2 | IO14 | GPIO14, ADC2 CH6 |
| Bareta 2 | IO15 | GPIO15, ADC2 CH3 |
| Bareta 2 | IO36 | GPIO36, numai intrare, ADC1 CH0 |
| Bareta 2 | IO39 | GPIO39, numai intrare, ADC1 CH3 |
| Bareta 2 | GND | Masa |
| Bareta 2 | IO0 | Mod de pornire. La GND la pornire activeaza programarea. Folosit si pentru ceasul Ethernet de 50 MHz |
| Bareta 2 | RX0 | IO3, RXD0, receptie serial principal |
| Bareta 2 | TX0 | IO1, TXD0, transmisie serial principal |
| Pin IO0 la pornire | Mod pornire ESP32 |
|---|---|
| Neconectat | Rulare program din memoria flash (functionare normala) |
| Conectat la GND | Bootloader serial (incarcare program prin TX0 si RX0) |
| Pin ESP32 | Folosit intern pentru |
|---|---|
| IO16 | Pornirea oscilatorului de 50 MHz al circuitului LAN8720A |
| IO23 | MDC, ceas de management Ethernet |
| IO18 | MDIO, date de management Ethernet |
| IO0 | Intrare ceas de referinta de 50 MHz (REF_CLK) |
| IO19, IO21, IO22 | TXD0, TX_EN, TXD1 (RMII) |
| IO25, IO26, IO27 | RXD0, RXD1, CRS_DV (RMII) |
Pinii din ultimul tabel sunt ocupati de interfata Ethernet si nu sunt scosi pe barete.
Utilizare:
Alimentati modulul fie la 5 V prin pinul 5V, fie la 3.3 V prin pinul 3V3, niciodata prin ambii pini in acelasi timp, cu masa comuna cu restul circuitului.
Folositi o sursa stabila, care poate furniza cel putin 500 mA, si nu aplicati pe pinul 5V o tensiune mai mare de 5 V. Dupa alimentare, LED-ul POWER se aprinde.
Respectati nivelul logic de 3.3 V. Nu aplicati semnale de 5 V pe pinii de semnal si folositi un convertor de nivel logic cand comunicati cu echipamente de 5 V.
Pentru programare conectati un adaptor USB-TTL cu logica de 3.3 V astfel: TXD adaptor la RX0, RXD adaptor la TX0 si GND la GND. Alimentati modulul de la pinul de 5 V al adaptorului, conectat la pinul 5V al modulului.
Nu alimentati modulul de la iesirea de 3.3 V a unui adaptor mic, pentru ca aceasta nu da curentul necesar functionarii cu Wi-Fi.
Conectati pinul IO0 la un pin GND din baretele 2, apoi porniti alimentarea sau resetati modulul aducand scurt pinul EN la GND. Modulul intra in modul de programare.
In Arduino IDE selectati placa ESP32 Dev Module, setati viteza de incarcare la 115200 si incarcati programul.
Dupa incarcare scoateti legatura dintre IO0 si GND, apoi opriti si porniti din nou alimentarea sau resetati modulul prin EN. Programul porneste din memoria flash.
La programare si la pornire lasati pinii IO2 si IO12 neconectati sau pe nivel low, deoarece nivelul lor la pornire influenteaza pornirea ESP32.
Pentru conexiunea Ethernet conectati un cablu de retea intre portul RJ45 si un router sau switch cu DHCP, apoi deschideti monitorul serial la 115200 baud si verificati ca modulul obtine o adresa IP.
Pentru conexiunea Wi-Fi setati numele si parola retelei prin comenzi AT sau prin codul aplicatiei.
Nu folositi pinii IO2, IO4, IO12, IO14 si IO15 ca intrari analogice cat timp Wi-Fi este activ, deoarece apartin convertorului ADC2. Pentru masurari analogice folositi IO35, IO36 si IO39, care sunt numai intrari.
Pentru actualizari OTA asigurati-va ca modulul are acces la reteaua locala si folositi functia de actualizare integrata in firmware sau utilitarul espota.py.
Pentru functionare stabila folositi o sursa cu pornire rapida si cabluri de alimentare scurte, iar in medii industriale pastrati modulul in intervalul de temperatura de -40 °C la +85 °C, protejat de umiditate si vibratii.
- Tensiune de alimentare
- 5 V sau 3.3 V
- Dimensiuni
- 25 x 63 x 17 mm
- Temperatura de lucru
- -40 °C la +85 °C
- Numar de pini
- 2 x 13
- Interfata
- Serial, Wi-Fi, Ethernet, Bluetooth
- Tensiune logica
- 3.3 V
- Curent
- 80 mA in functionare medie, sursa de minimum 500 mA
- Memorie Flash
- 32 Mbit SPI
- Spatiere pini
- 2.54 mm
- Microcontroler
- 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)
- Memorie SRAM
- 520 KB
- Protocol
- 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:
Acest produs este destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie, cercetare si aplicatii tehnice similare. Produsul trebuie utilizat doar conform specificatiilor tehnice mentionate in pagina produsului si/sau in documentatia disponibila.
Utilizarea incorecta, depasirea valorilor maxime admise de tensiune, curent, temperatura sau conectarea gresita pot duce la defectarea produsului, deteriorarea altor echipamente sau la riscuri de siguranta.
Produsul nu este jucarie si nu este destinat copiilor. Montajul, testarea si utilizarea trebuie realizate de persoane cu cunostinte minime in domeniul electric/electronic. Se recomanda utilizarea produsului in montaje protejate, carcase adecvate sau sisteme care respecta normele de siguranta aplicabile.
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]
/*
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 este o placa cu ESP32 si port Ethernet, folosita in proiecte care au nevoie de o legatura prin cablu mai stabila decat Wi-Fi, de exemplu noduri de automatizare, gateway-uri pentru echipamente seriale sau panouri de monitorizare. In acest tutorial folosim modulul singur, programat din Arduino IDE cu placa ESP32 Dev Module, fara nicio alta placa de dezvoltare.
Modulul nu are port USB, asa ca il programam printr-un adaptor USB-TTL CP2102 cu logica de 3.3 V. La final vom avea un program care porneste Ethernet-ul, afiseaza adresa IP primita de la router si verifica periodic ca reteaua raspunde.

Cum functioneaza:
ESP32 contine controlerul MAC pentru Ethernet, iar circuitul LAN8720A de pe placa este partea fizica (PHY) care vorbeste cu cablul. Cele doua se leaga prin interfata RMII, care are nevoie de un ceas de referinta de 50 MHz. Acest ceas vine de la un oscilator de pe placa, pornit de ESP32 prin pinul IO16, si intra in ESP32 pe pinul IO0. De aceea in program pinul IO16 este declarat ca pin de alimentare al PHY si ceasul este setat pe ETH_CLOCK_GPIO0_IN.
Pinii IO23 (MDC) si IO18 (MDIO) formeaza magistrala de management prin care ESP32 configureaza LAN8720A, iar adresa PHY este 1. Datele propriu-zise circula pe pinii RMII IO19, IO21, IO22, IO25, IO26 si IO27, care sunt folositi intern si nu apar pe barete.
Cateva calcule utile. Portul serial la 115200 baud transmite 10 biti pentru fiecare octet (un bit de start, 8 de date si un bit de stop), deci aproximativ 115200 / 10 = 11520 octeti pe secunda. Ethernet-ul de 100 Mbps are o viteza teoretica de 100 / 8 = 12.5 MB pe secunda, de peste 1000 de ori mai mare. Consumul mediu este de 80 mA, dar sursa trebuie sa poata da cel putin 500 mA pentru varfurile de curent ale Wi-Fi si Ethernet. Un port USB ofera 500 mA, deci este suficient.
Conectare:
Alimentam modulul de la pinul +5V al adaptorului CP2102, care trece direct tensiunea de 5 V din USB. Nu folosim pinul 3V3 al adaptorului, pentru ca regulatorul lui da un curent mic, insuficient pentru un ESP32 cu Wi-Fi. Semnalele sunt de 3.3 V, deci nu este nevoie de convertor de nivel, dar nu aplicati niciodata 5 V pe pinii de semnal. Linia seriala se leaga in cruce: TXD al adaptorului la RX0 si RXD al adaptorului la TX0. Pinul IO0 se leaga la GND doar cat timp incarcam programul.
| Pin produs | Se conecteaza la | Rol |
|---|---|---|
| 5V (bareta 1) | Pinul +5V al adaptorului CP2102 | Alimentare 5 V din USB |
| GND (bareta 1, langa pinul 5V) | Pinul GND al adaptorului CP2102 | Masa comuna |
| RX0 (bareta 2) | Pinul TXD al adaptorului CP2102 | Receptie serial, IO3 |
| TX0 (bareta 2) | Pinul RXD al adaptorului CP2102 | Transmisie serial, IO1 |
| IO0 (bareta 2) | Pinul GND de langa IO0, din baretele 2 | Mod programare, numai la incarcare |
| Port RJ45 | Router sau switch cu DHCP, prin cablu Cat5e | Conexiune de retea |
| 3V3 | Neconectat | Nu se alimenteaza de aici cand se foloseste pinul 5V |
Butoane, reglaje si indicatoare:
Placa nu are butoane, potentiometre, jumperi sau comutatoare. Pornirea in modul de programare se face cu un fir intre IO0 si GND, iar resetarea se face cu pinul EN. Starea placii o arata trei LED-uri.
| Element | Ce face | Cum se foloseste |
|---|---|---|
| Legatura IO0 - GND | Alege modul de pornire al ESP32 | Conectata la pornire, ESP32 asteapta programul prin serial. Scoasa, ruleaza programul din flash. |
| Pin EN | Activeaza sau reseteaza modulul | Atins scurt de GND, reseteaza modulul. Lasat liber, modulul ramane pornit. |
| LED POWER (LED1) | Indica alimentarea | Se aprinde cand alimentarea este normala. Daca ramane stins, verificati alimentarea si polaritatea. |
| LED RXD (LED3) | Indica trafic pe RXD2 (IO5) | Se aprinde cand pe linia RXD2 trec date. In programul din tutorial ramane stins, pentru ca acea linie nu este folosita. |
| LED TXD (LED4) | Indica trafic pe TXD2 (IO17) | Se aprinde cand pe linia TXD2 trec date. In programul din tutorial ramane stins. |
| Pin LINK | Iesire pentru indicatorul legaturii de retea | Se poate conecta la un LED extern cu rezistenta de limitare, daca doriti sa vedeti starea legaturii. |
Modul de programare. Conectati firul dintre IO0 si GND inainte de a alimenta placa sau inainte de a o reseta. Dupa ce Arduino IDE termina incarcarea, scoateti firul si reporniti alimentarea. Daca monitorul serial afiseaza mesajul waiting for download, firul este inca pus sau placa nu a fost repornita.
Resetarea. Pentru a reporni programul fara a scoate alimentarea, atingeti scurt pinul EN de GND cu un fir. Programul reporneste de la inceput si vedeti din nou mesajele de pornire pe monitorul serial.
LED-ul POWER. La conectarea adaptorului in USB trebuie sa se aprinda imediat. Este primul semn ca alimentarea si masa sunt corecte.
Placa si biblioteci:
In Arduino IDE selectati din Tools > Board placa ESP32 Dev Module, din pachetul esp32 by Espressif Systems, instalat din Boards Manager. Pachetul nu vine cu Arduino IDE, asa ca adaugati mai intai in File > Preferences, la Additional boards manager URLs, adresa https://espressif.github.io/arduino-esp32/package_esp32_index.json. Programul a fost scris pentru versiunile 2.0.x si 3.x ale pachetului. Setati Upload Speed la 115200.
Programul foloseste doar bibliotecile care vin cu pachetul ESP32 (WiFi.h, ETH.h si WiFiClient.h), deci nu trebuie instalata nicio biblioteca din Library Manager.
Codul:
Programul porneste interfata Ethernet cu parametrii specifici placii WT32-ETH01, afiseaza evenimentele de retea si adresa IP, iar la fiecare 5 secunde incearca o conexiune TCP catre gateway-ul retelei, adica routerul, pe portul 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");
}
}
Cum functioneaza codul:
La inceput definim parametrii PHY-ului: WT_PHY_ADDR este adresa 1 a circuitului LAN8720A, WT_PHY_POWER este pinul 16 care porneste oscilatorul, iar WT_PHY_MDC si WT_PHY_MDIO sunt pinii 23 si 18 ai magistralei de management. Variabila ethConnected retine daca am primit o adresa IP, iar lastCheck retine momentul ultimei verificari.
Functia onEvent este apelata de sistem la fiecare eveniment de retea. La ARDUINO_EVENT_ETH_START setam numele gazdei cu ETH.setHostname. La ARDUINO_EVENT_ETH_CONNECTED stim ca cablul este conectat. La ARDUINO_EVENT_ETH_GOT_IP afisam adresa IP, masca si gateway-ul si punem ethConnected pe true. La ARDUINO_EVENT_ETH_DISCONNECTED punem ethConnected pe false.
In setup pornim monitorul serial la 115200 baud, inregistram functia onEvent cu WiFi.onEvent si apelam ETH.begin. Ordinea argumentelor lui ETH.begin s-a schimbat in versiunea 3 a pachetului ESP32, de aceea apelul este ales cu directiva ESP_ARDUINO_VERSION_MAJOR.
In loop verificam o data la 5 secunde, cu millis, daca Ethernet-ul este conectat. Daca da, afisam viteza legaturii cu ETH.linkSpeed si modul duplex, apoi cream un obiect WiFiClient si apelam client.connect catre ETH.gatewayIP() pe portul 80, cu limita de 3000 ms. Daca routerul accepta conexiunea, reteaua functioneaza complet si inchidem conexiunea cu client.stop.
Rezultat:
Deschideti monitorul serial la 115200 baud dupa ce ati scos legatura IO0 - GND si ati repornit placa. Dupa cateva secunde apar mesajele de mai jos, cu adresa IP data de routerul dumneavoastra.
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
Probleme frecvente:
Incarcarea se opreste cu eroarea Failed to connect to ESP32. Cauza este de obicei IO0 neconectat la GND la pornire sau firele TX si RX nelegate in cruce. Conectati IO0 la GND, verificati ca TXD al adaptorului merge la RX0 si RXD la TX0, apoi alimentati din nou placa si reluati incarcarea.
Dupa incarcare monitorul serial arata waiting for download. Firul dintre IO0 si GND este inca pus. Scoateti-l si reporniti alimentarea.
Pe monitorul serial apar caractere aiurea. Viteza monitorului serial nu este 115200 baud. Selectati aceasta viteza in coltul din dreapta jos al monitorului.
Apare ETH started, dar nu apare nicio adresa IP. Cablul nu este conectat, routerul nu are DHCP activ sau portul este defect. Verificati cablul, incercati alt port al routerului si urmariti daca apare mesajul de cablu conectat.
Modulul se reseteaza singur sau se blocheaza la pornire. Alimentarea este insuficienta sau tensiunea creste prea lent. Folositi pinul +5V al adaptorului sau o sursa de 5 V cu minimum 500 mA, evitati alimentarea din pinul 3V3 al adaptorului si folositi fire de alimentare scurte.
Programul nu compileaza si da eroare la ETH.begin. Pachetul ESP32 instalat are alta versiune decat cea asteptata. Folositi o versiune 2.0.x sau 3.x si lasati selectata placa ESP32 Dev Module.
Limitari si sfaturi:
Modulul are un singur port Ethernet de 10/100 Mbps, fara alimentare prin cablul de retea (PoE), deci are nevoie mereu de alimentare separata. Pinii IO34 - IO39 sunt numai intrari, iar pe baretele sunt scosi numai IO35, IO36 si IO39. Intrarile ADC2 (IO2, IO4, IO12, IO14, IO15) nu pot fi citite cat timp Wi-Fi este pornit. Pinii IO0, IO2 si IO12 sunt pini de pornire si nu trebuie fortati la pornire.
Nivelul logic este de 3.3 V, deci pentru echipamente de 5 V adaugati convertor de nivel. Modulul poate lucra intre -40 °C si +85 °C, dar este bine sa fie protejat de umiditate si vibratii.
Mai departe puteti construi un gateway serial-Ethernet cu pinii TXD si RXD, un server web pentru comanda unor relee, un nod MQTT pentru automatizari sau un dispozitiv cu actualizare de firmware OTA prin retea.