Sat. Nov 8th, 2025

В търсене на читав, нискобюджетен контролер с повечко GPIO-та и достатъчно ресурси да се пише на език от по-високо ниво, съм се спрял на ESP32 в комбинация с MicroPython. В търсене на LAN решение за въпросния, минах през WIZNET 5K, за съжaление, micropython не го поддържа като вграден модул, а тази които намерих, не можаха да го запалят, затова преминах към следващия LAN, кото имам и се поддържа от тях – LAN8720

Комбиниран с ето този вариант на ESP32, който намирам за най-читав и удобен за работа като платка:

Преди да преминем към начина на свързване, LAN8720 модула се нуждае от лека модификация, трябва да се запои една жица от NC пин-а който не се ползва по принцип, до единия крак на генератора:

Внимавайте при спойката на генератора да не се окъси с корпуса.

След като сте направили модификацията, започва свързването, необходими са 2 резистора по 10 килоома и кабелчета, аз съм си модифицирал моите, като съм им запоил резисторите с накрайници.

ESP32SIGNALLAN8720
GPIO 17PHY_POWERNC и чрез 10К резистора към GND
GPIO 22EMAC_TXD1TX1
GPIO 19EMAC_TXD0TXD
GPIO 21EMAC_TX_ENTX_EN
GPIO 26EMAC_RXD1RX1
GPIO 25EMAC_RXD0RX0
GPIO 27EMAC_RX_DVCRS
GPIO 00EMAC_TX_CLKnINT/REFCLK и през 10к резистора към VCC или 3.3V
GPIO 16SMI_MDCMDC
GPIO 27SMI_MDIOMDIO
3.3VVCC
GNDGND

Малко теория защо са необходими резисторите и модификацията. Когато GPIO00 е LOW при стартиране ESP32 минава в режим на флашване, затова му слагаме pull-up резистор. Жицата която е запоена за генератора, е на негов пин който е за ENABLE, ако той е LOW генератора не стартира, затова му слагаме pull-down резистор. В това състояние като се захрани системата, ESP 32 си стартира нормално, след това като подаде HIGH сигнал на GPIO 17, генератора стартира и запалваме LAN 8720. Ето и кода който се изпълнява за целта:

>>> import network
>>> from machine import Pin
>>> lanenable = Pin(17, Pin.OUT)
>>> lanenable.value(1)
>>> lan = network.LAN(mdc=Pin(16), mdio=Pin(18), power=None, id=None, phy_addr=1, phy_type=network.PHY_LAN8720)
>>> lan.active(True)

>>> lan.ifconfig()
('192.168.1.142', '255.255.255.0', '192.168.1.22', '192.168.1.22')
>>>                                                                                

По подразбиране ланката си взима IP адрес по DHCP. От линк-а по-долу може да изтеглите версията на MicroPython която съм ползвал, както и някой полезни скриптове и пособия като upycraft, чрез него може да си сложите MircroPython на ESP32-то, като за целта трябва да изберете адрес за flash-ване 0x1000.

Моето заключение след направените тестове е, че LAN8720 работи стабилно, но недостатъка е заемането на прекалено много пинове в сравнение с WIZNET 5K, но няма как. Оттук нататък мога да пожелая успех.

By Ven

12 thoughts on “LAN 8720 на ESP32 с Micropython”

Leave a Reply