1. Ідентифікація та основні компоненти
  
  WT32-ETH01 — це плата на базі ESP32 з вбудованим Ethernet-контролером LAN8720A, що забезпечує дротове підключення до мережі додатково до бездротових інтерфейсів Wi-Fi та Bluetooth, якими оснащений ESP32.
  
  
  flowchart TD
    subgraph WT32ETH01["WT32-ETH01 (вигляд зверху)"]
      direction TB
      
      subgraph Components["Основні компоненти"]
        ESP32["ESP32
Мікроконтролер"]
        LAN8720["LAN8720A
Ethernet контролер"]
        PORT["RJ45
Ethernet порт"]
        LEDS["Індикаторні
світлодіоди"]
      end
      
      subgraph Pins["Виводи (контакти)"]
        direction TB
        
        subgraph LeftPins["Ліва сторона"]
          direction TB
          L1["3V3"] --- L2["GND"] --- L3["IO36"] --- L4["IO39"] --- L5["IO34"] --- L6["IO35"] --- L7["IO32"] --- L8["IO33"] --- L9["IO25"] --- L10["IO26"] --- L11["IO27"] --- L12["IO14"] --- L13["IO12"]
        end
        
        subgraph RightPins["Права сторона"]
          direction TB
          R1["5V"] --- R2["GND"] --- R3["IO23"] --- R4["IO22"] --- R5["TXD"] --- R6["RXD"] --- R7["IO21"] --- R8["IO19"] --- R9["IO18"] --- R10["IO5"] --- R11["IO17"] --- R12["IO16"] --- R13["IO0"] --- R14["EN"]
        end
      end
    end
    
    classDef pin fill:#f96,stroke:#333,stroke-width:2px
    class L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,R1,R2,R3,R4,R5,R6,R7,R8,R9,R10,R11,R12,R13,R14 pin
  
   
  
  Призначення основних виводів:
  
    
      | Вивід | Призначення | 
    
      | 3V3 | Вихід живлення 3.3В | 
    
      | 5V | Вхід живлення 5В | 
    
      | GND | Земля (мінус) | 
    
      | TXD | Передача даних UART | 
    
      | RXD | Прийом даних UART | 
    
      | EN | Сигнал увімкнення/скидання (активний рівень - низький) | 
    
      | IO0 | GPIO0 для вибору режиму завантаження | 
    
      | IO16-IO39 | Різні GPIO піни для підключення сенсорів та пристроїв | 
  
  
  
    Важливо правильно визначити піни для програмування (TXD, RXD, IO0, EN, GND, 5V), оскільки плата не має вбудованого USB-порту для прямого підключення до комп'ютера.
  
  2. Необхідні компоненти для програмування
  
  2.1. Базовий набір
  
    - Плата WT32-ETH01 V1.4
- USB-TTL адаптер (UART конвертер з підтримкою 3.3В)
- Макетна плата (breadboard)
- З'єднувальні дроти (jumper wires)
- Комп'ютер з USB-портом
- Ethernet-кабель (для підключення до мережі після програмування)
2.2. Програмне забезпечення
  
    - Arduino IDE або PlatformIO (на базі Visual Studio Code)
- Бібліотеки для ESP32 та Ethernet
    Рекомендується використовувати якісний USB-TTL адаптер з підтримкою живлення 5В та стабільним перетворювачем логічних рівнів, оскільки це впливає на надійність процесу програмування.
  
  3. Підключення для програмування
  
  
  flowchart TD
    subgraph Connection["Схема підключення для програмування"]
      USB_PC["USB порт
комп'ютера"] --> USB_TTL["USB-TTL
адаптер"]
      
      USB_TTL -.-> |"5V"| WT32["WT32-ETH01
5V"]
      USB_TTL -.-> |"GND"| WT32GND["WT32-ETH01
GND"]
      USB_TTL -.-> |"TXD"| WT32RX["WT32-ETH01
RXD"]
      USB_TTL -.-> |"RXD"| WT32TX["WT32-ETH01
TXD"]
      
      subgraph BootMode["Режим завантаження"]
        IO0GND["З'єднання
IO0-GND"] -.-> WT32BOOT["WT32-ETH01
IO0"]
        IO0GND -.-> WT32GND
        
        ENGND["Короткочасне
з'єднання EN-GND
(Reset)"] -.-> WT32EN["WT32-ETH01
EN"]
        ENGND -.-> WT32GND
      end
    end
    
    classDef boot fill:#f96,stroke:#333,stroke-width:2px
    class IO0GND,ENGND boot
  
   
  
  3.1. Покрокове підключення для програмування
  
  
    - Встановіть WT32-ETH01 на макетну плату.
- Підключіть USB-TTL адаптер до WT32-ETH01:
      
        - TXD (USB-TTL) → RXD (WT32-ETH01)
- RXD (USB-TTL) → TXD (WT32-ETH01)
- 5V (USB-TTL) → 5V (WT32-ETH01)
- GND (USB-TTL) → GND (WT32-ETH01)
 
- Для входу в режим завантаження:
      
        - З'єднайте IO0 з GND (встановіть постійне з'єднання на час програмування)
 
- Підключіть USB-TTL адаптер до комп'ютера.
- Для ініціювання завантаження:
      
        - Короткочасно з'єднайте пін EN з GND (імітація натискання кнопки Reset)
 
    Перехресне підключення є критичним! TXD адаптера підключається до RXD модуля, а RXD адаптера — до TXD модуля. Неправильне підключення призведе до помилок зв'язку.
  
  4. Налаштування середовища розробки
  
  4.1. Налаштування Arduino IDE
  
  
    - Встановіть Arduino IDE з офіційного веб-сайту.
- Додайте підтримку ESP32:
      
    
- Встановіть драйвери для вашого USB-TTL адаптера (якщо потрібно)
4.2. Налаштування PlatformIO (альтернативно)
  
  
    - Встановіть Visual Studio Code.
- Встановіть розширення PlatformIO IDE для VS Code.
- Створіть новий проєкт:
      
        - Плата: ESP32 Dev Module
- Framework: Arduino
 
4.3. Налаштування для завантаження коду
  
  В Arduino IDE:
  
    - Виберіть плату: Інструменти → Плата → ESP32 Arduino → ESP32 Dev Module
- Виберіть порт: Інструменти → Порт → COMx(виберіть порт вашого USB-TTL адаптера)
- Виберіть стандартні налаштування завантажувача
    Якщо ви не впевнені, який COM-порт вибрати, відключіть USB-TTL адаптер, подивіться список доступних портів, підключіть знову і виберіть новий порт у списку.
  
  5. Тестовий скетч для перевірки підключення
  
  
// Базовий тест для WT32-ETH01
// Блимання вбудованим світлодіодом на GPIO2
// Виберіть GPIO для світлодіода (на багатьох ESP32 платах GPIO2 підключений до вбудованого світлодіода)
const int ledPin = 2;
void setup() {
  // Ініціалізація серійного порту для відлагодження
  Serial.begin(115200);
  Serial.println("WT32-ETH01 тестування...");
  
  // Налаштування GPIO для світлодіода
  pinMode(ledPin, OUTPUT);
}
void loop() {
  digitalWrite(ledPin, HIGH);  // Ввімкнути світлодіод
  Serial.println("LED ON");
  delay(1000);                // Зачекати 1 секунду
  
  digitalWrite(ledPin, LOW);   // Вимкнути світлодіод
  Serial.println("LED OFF");
  delay(1000);                // Зачекати 1 секунду
}
  
  
  5.1. Процедура завантаження
  
  
    - Переконайтеся, що IO0 з'єднано з GND.
- Натисніть кнопку "Завантажити" в Arduino IDE або PlatformIO.
- Якщо завантаження не починається, короткочасно з'єднайте пін EN з GND для скидання модуля.
- Стежте за процесом у нижньому вікні середовища розробки — мають з'явитися повідомлення про підключення та завантаження з відсотками.
- Після успішного завантаження (Hard resetting via RTS pin...):
        - Від'єднайте IO0 від GND (важливо для виходу з режиму завантаження)
- Виконайте ресет плати (короткочасно з'єднайте EN з GND)
 
    Для регулярного програмування можна додати кнопки: одну між IO0 та GND для входу в режим завантаження, а іншу між EN та GND для скидання плати.
  
  6. Підключення до мережі Ethernet
  
  
  flowchart TD
    subgraph NetworkConnection["Підключення до мережі"]
      WT32ETH["WT32-ETH01"] --> Router["Маршрутизатор
або комутатор"]
      Router --> LocalNetworkNode["Локальна
мережа"]
      Power["Джерело
живлення 5V"] --> WT32ETH
      Sensors["Сенсори/Реле
(За потреби)"] --> WT32ETH
    end
  
   
  
  6.1. Приклад скетчу для Ethernet підключення
  
  
// Базовий тест підключення Ethernet для WT32-ETH01
#include 
// Піни ETH інтерфейсу для WT32-ETH01
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN  // Використання внутрішнього кварцу 50MHz
#define ETH_TYPE     ETH_PHY_LAN8720     // Тип контролера Ethernet - LAN8720
#define ETH_POWER    -1                  // Немає піна керування живленням на WT32-ETH01
#define ETH_MDC      23                  // Пін I²C Clock
#define ETH_MDIO     18                  // Пін I²C Data
#define ETH_ADDR     1                   // Адреса I²C пристрою LAN8720
static bool eth_connected = false;
void WiFiEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Почав (старт)");
      // Встановлення типу ETH
      ETH.setHostname("esp32-ethernet");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Підключено");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("ETH IP: ");
      Serial.println(ETH.localIP());
      eth_connected = true;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Відключено");
      eth_connected = false;
      break;
    case ARDUINO_EVENT_ETH_STOP:
      Serial.println("ETH Зупинено");
      eth_connected = false;
      break;
    default:
      break;
  }
}
void setup() {
  Serial.begin(115200);
  Serial.println("WT32-ETH01 Ethernet Тест");
  
  // Реєстрація обробника подій
  WiFi.onEvent(WiFiEvent);
  
  // Ініціалізація Ethernet
  ETH.begin(ETH_ADDR, ETH_POWER, ETH_MDC, ETH_MDIO, ETH_TYPE, ETH_CLK_MODE);
}
void loop() {
  if(eth_connected) {
    // Тут можна реалізувати додаткову логіку, коли з'єднання активне
    Serial.println("Підключено до мережі");
  } else {
    Serial.println("Очікування підключення...");
  }
  delay(1000);
}
  
  
  6.2. Установка після програмування
  
  
    - Підключіть живлення 5V до плати (через USB-TTL адаптер або окреме джерело живлення).
- Підключіть Ethernet-кабель від маршрутизатора або комутатора до RJ45 порту на WT32-ETH01.
- Якщо все налаштовано правильно, світлодіоди статусу на Ethernet-порті мають загорітися, вказуючи на активне з'єднання.
- Можна перевірити IP-адресу через серійний порт або в інтерфейсі маршрутизатора.
7. Програмування WT32-ETH01 для типових застосувань
  
  7.1. Веб-сервер для моніторингу сенсорів
  
  WT32-ETH01 можна легко запрограмувати як веб-сервер, який відображає дані з підключених сенсорів.
  
  
#include 
#include 
// Піни ETH інтерфейсу для WT32-ETH01
#define ETH_CLK_MODE ETH_CLOCK_GPIO0_IN
#define ETH_TYPE     ETH_PHY_LAN8720
#define ETH_POWER    -1
#define ETH_MDC      23
#define ETH_MDIO     18
#define ETH_ADDR     1
WebServer server(80);
static bool eth_connected = false;
// Приклад даних сенсора (у реальному проєкті ці дані надходитимуть від реальних сенсорів)
float temperature = 21.5;
int humidity = 65;
void WiFiEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Почав (старт)");
      ETH.setHostname("esp32-ethernet");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Підключено");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("ETH IP: ");
      Serial.println(ETH.localIP());
      eth_connected = true;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Відключено");
      eth_connected = false;
      break;
    case ARDUINO_EVENT_ETH_STOP:
      Serial.println("ETH Зупинено");
      eth_connected = false;
      break;
    default:
      break;
  }
}
void setup() {
  Serial.begin(115200);
  Serial.println("WT32-ETH01 Веб-сервер");
  
  // Реєстрація обробника подій
  WiFi.onEvent(WiFiEvent);
  
  // Ініціалізація Ethernet
  ETH.begin(ETH_ADDR, ETH_POWER, ETH_MDC, ETH_MDIO, ETH_TYPE, ETH_CLK_MODE);
  
  // Налаштування обробників веб-сервера
  server.on("/", handleRoot);
  server.on("/data", handleData);
  server.onNotFound(handleNotFound);
  
  // Запуск веб-сервера
  server.begin();
  Serial.println("Веб-сервер запущено");
}
void loop() {
  if(eth_connected) {
    server.handleClient();
    
    // Імітація зміни даних сенсорів
    temperature = 20.0 + (float)random(0, 100) / 10.0;
    humidity = 50 + random(0, 30);
  }
  delay(10);
}
// Обробка головної сторінки
void handleRoot() {
  String html = "<!DOCTYPE html><html><head><meta charset='UTF-8'>";
  html += "<meta http-equiv='refresh' content='5'>";
  html += "<title>WT32-ETH01 Моніторинг</title>";
  html += "<style>body{font-family:Arial;margin:20px;text-align:center;}";
  html += ".container{max-width:600px;margin:0 auto;padding:20px;border:1px solid #ddd;border-radius:10px;}";
  html += ".data{font-size:24px;margin:15px;padding:10px;background:#f0f0f0;border-radius:5px;}</style></head>";
  html += "<body><div class='container'><h1>WT32-ETH01 Сенсори</h1>";
  html += "<div class='data'>Температура: " + String(temperature) + " °C</div>";
  html += "<div class='data'>Вологість: " + String(humidity) + " %</div>";
  html += "<p>Сторінка оновлюється автоматично кожні 5 секунд</p>";
  html += "<p><a href='/data'>API (JSON)</a></p>";
  html += "</div></body></html>";
  server.send(200, "text/html", html);
}
  
// API для отримання даних у форматі JSON
void handleData() {
  String json = "{\"temperature\":" + String(temperature) + ",\"humidity\":" + String(humidity) + "}";
  server.send(200, "application/json", json);
}
// Обробка 404
void handleNotFound() {
  server.send(404, "text/plain", "Сторінку не знайдено");
}
  7.2. Інтеграція з WLED
  
  WT32-ETH01 чудово підходить для запуску WLED — популярного програмного забезпечення для керування світлодіодними стрічками через мережу. Ethernet-з'єднання забезпечує стабільність, особливо для складних світлових шоу.
  
  
    - Завантажте вихідний код WLED з GitHub.
- Встановіть PlatformIO в VS Code (як описано раніше).
- Відкрийте проєкт WLED в PlatformIO.
- Знайдіть та виберіть середовище esp32_eth.
- Натисніть "Upload" для компіляції та завантаження на плату.
- Після завантаження підключіться до точки доступу Wi-Fi WLED-AP (пароль за замовчуванням: wled1234).
- Відкрийте браузер та перейдіть за адресою 4.3.2.1.
- У налаштуваннях Wi-Fi прокрутіть до розділу Ethernet Type і виберіть WT32-ETH01.
- Збережіть налаштування, потім підключіть плату до мережі через Ethernet-кабель.
    WLED на WT32-ETH01 з Ethernet-з'єднанням забезпечує надійну роботу для синхронізованих світлових шоу з використанням протоколів E1.31 та DMX, які активно використовуються для святкового освітлення.
  
  8. Підключення додаткових пристроїв
  
  
  flowchart LR
    WT32["WT32-ETH01"] --> ETH["Ethernet
Мережа"]
    
    subgraph Sensors["Сенсори та периферія"]
      DHT["Сенсор температури
DHT22"] --> WT32
      RELAY["Реле модуль"] --> WT32
      OLED["OLED дисплей
I2C"] --> WT32
      LED["RGB стрічка
WS2812B"] --> WT32
    end
    
    classDef eth fill:#b3e0ff,stroke:#333
    class ETH eth
  
   
  
  8.1. Підключення сенсора температури DHT22
  
  
    
      | DHT22 | WT32-ETH01 | 
    
      | VCC | 3V3 | 
    
      | DATA | IO32 | 
    
      | GND | GND | 
  
  
  
    Між VCC і DATA рекомендується додати підтягуючий резистор 10кОм для стабільної роботи DHT22.
  
  
  8.2. Підключення OLED дисплея I2C
  
  
    
      | OLED I2C | WT32-ETH01 | 
    
      | VCC | 3V3 | 
    
      | GND | GND | 
    
      | SCL | IO22 | 
    
      | SDA | IO21 | 
  
  
  8.3. Підключення реле
  
  
    
      | Реле модуль | WT32-ETH01 | 
    
      | VCC | 5V | 
    
      | GND | GND | 
    
      | IN1 | IO5 | 
    
      | IN2 | IO17 | 
  
  9. Корисні налаштування для дротового з'єднання
  
  9.1. Статична IP-адреса
  
  
// Встановлення статичної IP-адреси для WT32-ETH01
#include 
// Налаштування мережі
IPAddress static_ip(192, 168, 1, 200);   // Бажана статична IP-адреса
IPAddress gateway(192, 168, 1, 1);       // IP-адреса шлюзу (маршрутизатора)
IPAddress subnet(255, 255, 255, 0);      // Маска підмережі
IPAddress dns1(8, 8, 8, 8);              // DNS-сервер (Google DNS)
void WiFiEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("ETH Почав (старт)");
      ETH.setHostname("wt32-static");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("ETH Підключено");
      // Встановлення статичної IP після підключення
      ETH.config(static_ip, gateway, subnet, dns1);
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("ETH IP: ");
      Serial.println(ETH.localIP());
      break;
    // ...інші обробники подій...
  }
}
void setup() {
  Serial.begin(115200);
  // Реєстрація обробника подій
  WiFi.onEvent(WiFiEvent);
  
  // Ініціалізація Ethernet
  ETH.begin(1, -1, 23, 18, ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_IN);
}
void loop() {
  // Ваша основна логіка тут
}
  
  
  9.2. Моніторинг та діагностика Ethernet-з'єднання
  
  
// Моніторинг стану Ethernet-з'єднання
#include 
unsigned long lastCheckTime = 0;
const long checkInterval = 10000;  // 10 секунд
bool ethernetConnected = false;
void setup() {
  Serial.begin(115200);
  Serial.println("Моніторинг Ethernet-з'єднання");
  
  // Реєстрація обробника подій Wi-Fi
  WiFi.onEvent(WiFiEvent);
  
  // Ініціалізація Ethernet
  ETH.begin(1, -1, 23, 18, ETH_PHY_LAN8720, ETH_CLOCK_GPIO0_IN);
}
void loop() {
  unsigned long currentTime = millis();
  
  // Періодична перевірка стану з'єднання
  if (currentTime - lastCheckTime >= checkInterval) {
    lastCheckTime = currentTime;
    
    if (ethernetConnected) {
      Serial.println("Статус: Підключено");
      
      // Діагностична інформація
      Serial.print("IP-адреса: ");
      Serial.println(ETH.localIP());
      
      Serial.print("Маска підмережі: ");
      Serial.println(ETH.subnetMask());
      
      Serial.print("Шлюз: ");
      Serial.println(ETH.gatewayIP());
      
      Serial.print("MAC-адреса: ");
      Serial.println(ETH.macAddress());
      
      // Перевірка зв'язку з зовнішньою мережею
      // У реальному проєкті тут можна використовувати ping або HTTP-запит
    } else {
      Serial.println("Статус: Відключено");
    }
  }
}
void WiFiEvent(WiFiEvent_t event) {
  switch (event) {
    case ARDUINO_EVENT_ETH_START:
      Serial.println("Ethernet ініціалізовано");
      break;
    case ARDUINO_EVENT_ETH_CONNECTED:
      Serial.println("Ethernet-кабель підключено");
      break;
    case ARDUINO_EVENT_ETH_GOT_IP:
      Serial.print("Отримано IP-адресу: ");
      Serial.println(ETH.localIP());
      ethernetConnected = true;
      break;
    case ARDUINO_EVENT_ETH_DISCONNECTED:
      Serial.println("Ethernet-кабель відключено");
      ethernetConnected = false;
      break;
    case ARDUINO_EVENT_ETH_STOP:
      Serial.println("Ethernet зупинено");
      ethernetConnected = false;
      break;
    default:
      break;
  }
}
  
  10. Обмеження та граничні параметри
  
  
    
      | Параметр | Значення | 
    
      | Напруга живлення | 5В ±5% | 
    
      | Максимальний струм споживання | ~300мА (пік при активному Ethernet та Wi-Fi) | 
    
      | Робоча температура | -40°C ~ 85°C | 
    
      | Ethernet | 10/100 Мбіт/с | 
    
      | Wi-Fi | IEEE 802.11 b/g/n | 
    
      | Bluetooth | BLE/Bluetooth 4.2 | 
    
      | Flash-пам'ять | 4 МБ | 
    
      | SRAM | 520 КБ | 
  
  
  
    WT32-ETH01 не має захисту від перенапруги на Ethernet-порту. У промислових умовах рекомендується використовувати додатковий ізольований трансформатор або обмежувач перенапруги.
  
  11. Практичні поради та рекомендації
  
  11.1. Живлення та стабільність
  
    - Якісний блок живлення: Використовуйте якісне джерело живлення 5В з достатнім запасом за струмом (мінімум 500мА, рекомендовано 1А).
- Місткий конденсатор: Додайте електролітичний конденсатор 100-470 мкФ паралельно до входу живлення для фільтрації стрибків напруги.
- PoE-адаптер: Для віддалених інсталяцій можна використовувати зовнішній PoE-сплітер, щоб отримувати живлення через Ethernet-кабель.
11.2. Програмування та відлагодження
  
    - Постійні кнопки Reset/Boot: Для зручності регулярного програмування припаяйте дві кнопки: одну між IO0 та GND, іншу між EN та GND.
- LED-індикатори: Додайте зовнішні світлодіоди для індикації стану роботи програми.
- Інтерфейсне плату: Розгляньте можливість створення інтерфейсної плати з USB-UART мостом для спрощення підключення.
11.3. Мережеве підключення
  
    - Екранований кабель: У промислових умовах використовуйте екранований Ethernet-кабель для зменшення впливу електромагнітних завад.
- Статична IP-адреса: Налаштуйте статичну IP-адресу для надійного доступу до вашого пристрою.
- mDNS: Використовуйте mDNS (ESP-MDNS бібліотеку) для доступу до пристрою за доменним ім'ям у локальній мережі.
    WT32-ETH01 ідеально підходить для проєктів, де потрібне надійне мережеве з'єднання з низькою затримкою, наприклад, для систем домашньої автоматизації, промислового контролю та моніторингу.
  
  
    Важливе зауваження: Ми доклали зусиль, щоб ця інструкція була точною та корисною. Однак, ця інструкція надається як довідковий матеріал. Електронні компоненти можуть мати варіації, а схеми підключення залежать від конкретних умов та вашого обладнання. Ця інформація надається "як є", без гарантій повноти чи безпомилковості. Наполегливо рекомендуємо перевіряти специфікації вашого модуля (datasheet), звірятися з іншими джерелами та, за найменших сумнівів, звертатися до кваліфікованих фахівців, особливо при роботі з напругою 220В.