Добрый день, уважаемые друзья и читатели!
Представляю вашему вниманию обзор небольшой платы на базе ESP32 – Wireless-Tag WT32-ETH01. Про существование данной платы мне подсказал один из моих читателей, и мне она показалась достаточно интересной, чтобы приобрести её хотя бы для опытов и обзора. Что я, собственно и сделал, а вам теперь придется это все читать. Данный текст – это ни в коем случае не реклама, а информация к размышлению.
Почему же именно эта плата заслуживает отдельного обзора?
Дело в том, что WT32-ETH01 – одна из немногих плат на базе ESP32, которая имеет встроенные PHY-интерфейс для работы с Ethernet-соединениями. А еще она очень маленькая и дешевая. Конечно, ESP32 сама по себе широко известна встроенным WiFi-интерфейсом – никто не спорит. Однако иногда приходится сталкиваться с тем, что проложить ethernet-кабель оказывается в разы проще и дешевле, чем обеспечить постоянное и качественное беспроводное соединение. Именно для таких случаев и предназначена эта, и подобные ей, конструкции.
Плата производится китайской компанией Wireless-Tag и построена она на базе модуля WT32-S1, производства той же самой компании. Сайт wireless-tag.com открывается “в час по чайной ложке”, написан на китайском языке. Есть английская версия, но там у меня вообще ничего толком не работает – меню кривое, текста нет. Почти все найденные для данной статьи материалы были получены со сторонних источников, ссылки на которые, как обычно, будут в конце статьи. Возможно, я что-то пропустил или упустил – ну тогда прошу в комментарии.
Небольшое теоретическое вступление
Для начала необходимо хотя бы чуть-чуть осветить основы создания ethernet-подключений на ESP32, дабы было в дальнейшем понятно, что и для чего использовано и напаяно на данной платке.
Драйвер любого Ethernet-подключения состоит из двух основных уровней – MAC и PHY.
- MAC – реализует канальный уровень передачи данных (аббревиатура от англ. Media Access Control), это цифровой интерфейс, который отвечает за управление и подключение физической среды физического уровня.
- PHY – реализует физический уровень, то есть это уже приемопередатчик электрических сигналов (аббревиатура от англ. Physical layer), который “занимается” формированием и получением аналоговых сигналов, которые “бегут” по витой паре сетевого кабеля к роутеру и обратно. Интерфейс PHY состоит из двух независимых каналов для передатчика и приемника.
Микроконтроллер ESP32 уже имеет встроенный сетевой MAC-интерфейс, который может быть использован для создания ethernet-подключений. А вот для PHY уровня нам по любому потребуется дополнительная микросхемка. ESP-IDF на текущий момент поддерживает несколько ethernet-чипов, в том числе “внутренние” EMAC и “внешние” с SPI-интерфейсом:
- Davicom DM9051 SPI to Ethernet MAC Controller
- Texas Instuments DP83848 Single Port 10/100 Mb/s Ethernet Physical Layer Transceiver
- IC+ IP101 Single Port 10/100 MII/RMII/TP/Fiber Fast Ethernet Transceiver
- Micrel KSZ80xx 10Base-T/100Base-TX/100Base-FX Physical Layer Transceiver
- Microchip KSZ8851SNL Single-Port Ethernet Controller with SPI
- SMSC LAN87xx Small Footprint RMII 10/100 Ethernet Transceiver
- Realtek RTL8201 10/100M Fast Ethernet Phyceiver
- WIZnet W5500 Hardwired TCP/IP embedded Ethernet controller
В микросхемах DM9051, KSZ8851 и W5500 реализован как PHY, так и MAC-контроллер, поэтому их можно связать с ESP32 с помощью SPI-интерфейса. В данной статье я не буду их рассматривать, просто потому, что с ними не работал.
Для остальных чипов для связи уровней MAC и PHY придется воспользоваться интерфейсом MII (аббревиатура от англ. Media Independent Interface). Каждый уровень имеет свои данные, тактовые и управляющие сигналы. Интерфейс управления — это двухсигнальный интерфейс: один — тактовый сигнал, а другой — сигнал данных. Через интерфейс управления верхние уровни могут полностью отслеживать и контролировать PHY. Всего для интерфейса данных MII требуется аж 18 сигналов. Для микроконтроллеров это слишком жирно – почти все GPIO уйдут на обслуживание Ethernet. Поэтому в ESP32 для связи с общественностью PHY уровнем может быть использована облегченная версия интерфейса RMII (аббревиатура от англ. Reduced Media Independent Interface), которая требует всего 9 сигналов (GPIO). Но при этом PHY и MAC синхронизируются уже только одним и тем же источником таковых сигналов REF_CLK 50MHz, который должен обладать достаточно высокой стабильностью.

Сп$жжено здесь: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/network/esp_eth.html
ESP-IDF Ethernet API предусматривает три варианта генерации опорного сигнала:
- a) C помощью внутреннего генератора ESP 25 Mhz с умножителем
- b) C помощью внешнего кварцевого генератора 50 MHz
- c) Некоторые контроллеры EMAC могут генерировать REF_CLC помощью внутренней высокоточной ФАПЧ.
В случае использования внутреннего тактового сигнала следует выбрать режим CONFIG_ETH_RMII_CLK_OUTPUT, в случае использования внешнего тактового сигнала – режим CONFIG_ETH_RMII_CLK_INPUT. При этом следует помнить, что для вывода тактового сигнала можно использовать только GPIO0 / GPIO16 / GPIO17, а для его получения извне – только GPIO0. Да и GPIO16 / GPIO17 могут быть заняты внешним SPIRAM модулем памяти. Поэтому для использования в качестве опорного сигнала в некоторых случаях остается только GPIO0. Но GPIO0 – довольно важный strapping pin, который отвечает за перевод контроллера в режим загрузки прошивки. Поэтому, если вы собираетесь использовать внешний опорный генератор, то на время сброса ESP тактовый сигнал необходимо отключить, программным или “аппаратным” способом, например отключив питание кварцевого генератора.
Про создание ethernet-подключений в ESP-IDF я уже однажды писал тут – Ethernet-соединения на ESP32.
Общие сведения о плате
Думаю, в данной статье нет особого смысла перечислять характеристики чипов ESP32 и всевозможные интерфейсы, которые им поддерживаются. Если вам интересно, можно почитать другую статью, посвященную этому. А поэтому остановлюсь только на общем обзоре платы и схемах основных узлов и модулей.
Итак…
Плата имеет весьма скромные размеры, при этом на плате установлены:
- SoC-модуль WT32-S1 – внутри него установлен двухядерный микроконтроллер ESP32 и FLASH-память
- Линейный стабилизатор AMS1117-3,3 для обеспечения ESP32 и PHY-контроллера напряжением 3.3В
- Сетевой PHY-контроллер SMSC LAN8720A RMII 10/100 Ethernet Transceiver
- Кварцевый генератор 50 MHz для синхронизации PHY-контроллера и SoC
- Ethernet-разъем со встроенными согласующими трансформаторами с говорящим названием HULYN
- Три светодиода POWER, RXD и TXD. Первый, собственно, индицирует подачу питания на микроконтроллер, а RXD и TXD можно, при желании, использовать в проектах.
- Немного рассыпухи – конденсаторы, резисторы и прочее
Сразу бросается в глаза то, что данная плата не имеет собственного USB-UART моста, а поэтому для работы с ней придется использовать внешний адаптер. Про некоторые из них я писал в другой статье. Для подключения к адаптеру USB-to-UART предназначены выводы TX0
, RX0
.
Также отсутствуют кнопки сброса и перевода микроконтроллера в режим программирования – RESET и BOOT, поэтому придется их подключать к контактам платы IO0
и EN
“снаружи” (или использовать специальный адаптер).
На оборотной стороне платы можно рассмотреть версию платы и подписи к контактам, выведенным на боковые гребенки:
Если посмотреть на GPIO, которые выведены на гребенки и доступны для использования в проектах – то их не так уж и много. А теперь давайте наваливать подробностей.
Система питания
Питание на плату следует подавать на вывод 5V, соответственно напряжение должно быть около 5В.
Никаких неожиданностей и сюрпризов – здесь разработчики использовали самый обычный линейный стабилизатор напряжения AMS1117-3,3 с максимальным током потребления до 0,8А.
Правда, на схеме он обозначен как 1,8В – это явная ошибка. От выходного напряжения 3,3В запитан светодиод индикации питания.
Стабилизатор рассчитан на входное напряжение до 15В, но следует учитывать, что он построен по линейной (а не импульсной) схеме, поэтому весь “излишек” мощности он будет рассеивать на себе. Поэтому я бы не стал подавать на эту плату больше 5В – иначе греться он будет как хороший кипятильник.
Микропроцессорный SoC модуль WT32-S1
Как я уже упоминал, “сердцем” платы является модуль WT32-S1. Это модуль, как собственно и сама плата, производится китайской компанией Wireless-Tag Technology Co. ltd. Судя по даташиту на модуль, построен он на базе “классического” чипа Espressif ESP32-D0WDQ6 и обычного в таких модулях чипа flash-памяти объемом 4Mb.
В целом, этот модуль весьма похож на обычные модули ESP32-WROOM от компании-производителя чипов, и останавливаться тут особо не на чем.
Если вы еще не в курсе, что такое ESP32-D0WDQ6, прошу ознакомиться с другой статьей.
Схема подключения модуля на плате:
Как видим, довольно много выводов микроконтроллера (GPIO) отожрал интерфейс RMII. Про него и поговорим в первую очередь.
Ethernet-интерфейс
PHY-интерфейс на данной плате реализован в виде микросхемки LAN8720A.
Схема включения, полагаю, самая стандартная:
В качестве источника опорных таковых сигналов используется внешний кварцевый генератор с частотой 50 мегагерц:
В качестве линии синхронизации используется вывод ESP GPIO0. Вывод разрешения работы генератора подключен к GPIO16. Таким образом, работа генератора блокируется, если на GPIO16 низкий уровень (по умолчанию – он подтянут к “земле”). И для того, чтобы запустить ethernet-интерфейс, необходимо установить на GPIO16 высокий уровень.
Но микросхема PHY – это еще не все. Для связи с внешним миром на торце платы установлен разъем RJ45 HRK1-1B72F09 (или аналогичный), внутри которого находятся согласующие трансформаторы и светодиоды.
“Земля” разъема ethernet теоретически должна быть соединена с “землей” платы через R26 и С10, но на моем экземпляре ни тот ни другой не установлены.
GPIO и контакты платы
Переходим к самому насущному вопросу: какие GPIO и как можно использовать на данной плате.
Все выводы платы можно разбить на несколько условных групп:
Питание
GND
– общий провод, минус питания, “земля”5V
– основной вход питания 5 вольт3V3
– на этот контакт можно подать напряжение 3.3В с внешнего источника. Либо наоборот – запитать какой-либо датчик от данной платы. Только не следует забывать, что стабилизатор не рассчитан на ток более 800 мА, а минимум половину скушает ESP32 и ethernet.
Служебные strapping pins для программирования и serial port
TX0
иRX0
– выводы последовательного UART0 – интерфейса, который используется для программирования и отладки микроконтроллера. Именно к ним необходимо подключать контактыRXD
иTXD
адаптера UART-to-USB.EN
– вывод аппаратного сброса микроконтроллера. К данному контакту необходимо подключить внешнюю кнопку RESET, которая будет замыкать его наGND
, либо сигналEN
адаптера UART-to-USB, если таковой на нем имеется.IO0
– низкий уровень на этом выводе при сбросе переводит загрузчик в режим прошивки. Поэтому в данному выводу мы также подключаем либо кнопку BOOT так же “на землю”, либо сигналBOOT
адаптера UART-to-USB, если таковой на нем имеется. После того, как микроконтроллер запущен, он будет задействован для передачи тактового сигнала, так что использовать его в проектах никак нельзя.
Другие strapping pins, которые следует использовать с осторожностью
IO12
– данный вывод управляет напряжением питания flash-памяти. Если при сбросе MCU на нём установлен высокий уровень, напряжение флэш-памяти (VDD_SDIO) составляет 1,8 В вместо 3,3 В по умолчанию. Поскольку в данном модуле использована 3,3В – память, установка высокого уровня при сбросе приведет к тому, что ESP “не увидит” память и не сможет нормально работать. Поэтому при сбросе на нем должен быть низкий уровень. После того, как микроконтроллер запущен, вы можете использовать его как угодно.IO2
– для входа в режим прошивки, кроме низкого уровня на GPIO0, необходимо обеспечить низкий уровень и на GPIO2. По умолчанию на нем и так уже низкий уровень, так что просто не подтягивайте его к питанию. После того, как микроконтроллер запущен, вы можете использовать его как угодно.IO5
(помечен какRXD
на данной плате) совместно сIO15
используется для управления таймингами flash-памяти – “Timing of SDIO Slave”. По умолчанию на нем высокий уровень. Изменение уровня при старте системы, возможно, может нарушить работу flash-памяти. После того, как микроконтроллер запущен, вы можете использовать его как угодно.
Доступные входы / выходы
IO2
,IO4
,IO5
,IO12
,IO14
,IO15
,IO17
,IO32
,IO33
можно использовать в проектах, но с учетом особенностей, упомянутых выше, они имеют как режим входа, так и выхода
Только входы
IO34
,IO35
,IO36
,IO39
могут работать только в режиме входа и не имеют встроенных резисторов подтяжки
ADC
Многие GPIO можно использовать как АЦП. ESP32 имеет два отдельных канала ADC. Но, если включен WiFi, второй канал становится не доступным. Учитывая. что на данной плате имеется ethernet, здесь можно легко использовать и второй канал.
- Канал 1:
IO36
– ADC1_CH0IO39
– ADC1_CH3IO32
– ADC1_CH4IO33
– ADC1_CH5IO34
– ADC1_CH6IO35
– ADC1_CH7
- Канал 2:
GPIO4
– ADC2_CH0GPIO2
– ADC2_CH2GPIO15
– ADC2_CH3GPIO12
– ADC2_CH5GPIO14
– ADC2_CH6
Светодиоды
- К выводам
IO17
иIO5
подключены светодиоды – анодом к питанию, катодом к микроконтроллеру. То есть при установке низкого уровня на этих выводах они начинают светиться.
RS485 – порт
Несколько выводов, по всей видимости, были зарезервированы разработчиками для управления микросхемой RS485-порта. Если вы планируете использовать MAX3485 в вашем проекте, вы можете использовать их именно для этого. При этом, во время обмена данными по шине будут весело перемигиваться светодиодики RXD и TXD.
485_EN
/IO33
– можно использовать для управления режимом “прием” / “передача”RXD
/IO5
– прием данных UART1 / UART2TXD
/IO17
– передача данных UART1 / UART2
Если вы не планируете использовать шину RS485 – используйте их как обычные GPIO.
Интересные особенности
CFG
/IO32
– вроде бы обычный PIN, но может быть использован для сброса к заводским настройкам. При условии, что вы еще не перезаписали прошивку на свою.
Контакты, не относящиеся к GPIO микроконтроллера
LINK
– к этому контакту можно подключить внешний светодиод индикации ethernet-соединения
Подключение к компьютеру
Напомню, платка не имеет кнопок сброса и перевода чипа в режим программирования, поэтому для работы с ней либо придется иметь специальный адаптер с “волшебными” транзисторами, либо обычный трехпроводный адаптер и две кнопки “снаружи”. Подробнее об этом было рассказано в отдельной статье. В данный момент использовал плату ESP_PROG V1.0, так как она имеет аппаратную кнопочку для сброса ESP.
Просто соединяем выводы на адаптере с соответствующими выводами на плате:

К сожалению, не нашлось компонента fritzing для ESP Prog, поэтому его пришлось обозначить просто как разъем
Можно приступать к бесчеловечным опытам над железяками…
Встроенная прошивка
Что ж, подключаем все это хозяйство к компу и видим в мониторе последовательного порта занимательную картинку – чип непрерывно перегружается примерно 1 раз в секунду. Причина определилась быстро – взгляните на вывод в монитор.
Что интересно, на шине SPI чип flash памяти определился как 2 Мб вместо стандартных четырех. Но это полбеды.
Во-вторых, внутри модуля стоит чип ESP32-D0WD (вместо устаревшего ESP32-D0WDQ6 по даташиту), но это даже неплохо.
Finding Chip Information....esptool.py v4.8.1 Serial port COM10 Connecting...... Detecting chip type... Unsupported detection protocol, switching and trying again... Connecting.... Detecting chip type... ESP32 Chip is ESP32-D0WD (revision v1.1) Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None Crystal is 40MHz Warning: ESP32 has no Chip ID. Reading MAC instead.
И в третьих, встроенная прошивка явно рассчитана на внешнюю PSRAM, которая на данной плате просто отсутствует.
Поэтому опробовать встроенную прошивку мне не удалось. Сколько бы я не пытался. Китайцы – они такие китайцы. Никогда ничего не доведут “до ума”. Х..к, х..к – и в продажу.
Что ж, напишем свою…
Пробуем свою прошивку
Тестовый проект создан в PlatformIO, с использованием ESP-IDF. На версии ESP-IDF 5.3.1 проект почему-то отказался собираться…. Зато после обновления до ESP-IDF 5.4 – всё прекрасно заработало с полпинка. Кстати, PlatformIO “знает” про данную платку:
[env:esp32dev] platform = espressif32 framework = espidf board = wt32-eth01 upload_speed = 921600 monitor_speed = 115200
За основу я взял код, когда то написанный для другой платы – Kincony KC868-A16. Принципы подключения к Ethernet на ESP32 я описывал здесь, повторять одно и то же, думаю, нет никакого смысла. Тестовый проект можно скачать здесь.
Настройки ethernet пришлось немного поменять, памятуя о том, что генератор здесь у нас внешний и подключен он к GPIO0 и управляется он GPIO16:
// EN: Ethernet (LAN8720) // RU: Ethernet (LAN8720) #define CONFIG_ETH_ENABLED 1 #define CONFIG_ETH_PHY_ADDR -1 // PHY address according your board schematic, range: -1..31. Set to -1 to driver find the PHY address automatically. #define CONFIG_ETH_PHY_TYPE ETH_PHY_LAN87XX #define CONFIG_ETH_CLK_MODE EMAC_CLK_EXT_IN #define CONFIG_ETH_GPIO_POWER_PIN 16 #define CONFIG_ETH_GPIO_CLK EMAC_CLK_IN_GPIO // Output RMII Clock from internal APLL Clock available at GPIO0 #define CONFIG_ETH_GPIO_MDIO 18 #define CONFIG_ETH_GPIO_MDC 23
После прошивки размер flash-памяти уже определяется корректно:
I (30) boot: ESP-IDF 5.4.0 2nd stage bootloader I (30) boot: compile time Apr 15 2025 22:22:28 I (31) boot: Multicore bootloader I (32) boot: chip revision: v1.1 I (35) boot.esp32: SPI Speed : 80MHz I (38) boot.esp32: SPI Mode : DIO I (42) boot.esp32: SPI Flash Size : 4MB
А сама плата успешно подключается к роутеру посредством ethernet:
00:00:00 [I] ETH :: Start Ethernet network... 00:00:00 [D] ETH :: Selected PHY: LAN87XX 00:00:00 [I] ETH :: Ethernet driver installed 00:00:01 [I] ETH :: Ethernet started 00:00:01 [I] ETH :: Ethernet link up: mac address 89:c0:5d:c9:d1:4b 00:00:03 [I] ETH :: Ethernet got IP-address: 192.168.8.209, mask: 255.255.255.0, gateway: 192.168.8.1 00:00:03 [I] STATES :: Check system started: wifi=0, ethernet=1, internet=1, time=0, mqtt=0 00:00:03 [I] SNTP :: Starting time synchronization with SNTP servers for a zone MSK-3... 00:00:03 [D] MQTT :: Event received: RE_INET_PING_OK
Все работает, как и было обещано производителем…
Тестовый проект можно скачать туточки. После скачивания каталог проекта необходимо поместить в c:\Projects\PlatformIO\
, а затем папку libs
из каталога проекта переместить туда же.
Ссылки
- Сайт производителя
- Страница продукта
- Документация на GitHub от Daniel Egnor
- Документация на GitHub от Dirk Luberth Dijkman
- Обзор на myscu.club
- Ethernet-соединения на ESP32
Пожалуйста, оцените статью:
-= Каталог статей (по разделам) =- -= Архив статей (подряд) =-
RTSP аудио поток с микрофона INMP441с помощью этой платы WT32-ETH01возможно
передать в локальной сети и принять в VLC?
Пробовал вместе с chat GPT написать рабочий скетч, но так IP-микрофон и не получился, куча библиотек, TCP соединение…