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

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

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

Внимавайте при спойката на генератора да не се окъси с корпуса.
След като сте направили модификацията, започва свързването, необходими са 2 резистора по 10 килоома и кабелчета, аз съм си модифицирал моите, като съм им запоил резисторите с накрайници.
| ESP32 | SIGNAL | LAN8720 |
| GPIO 17 | PHY_POWER | NC и чрез 10К резистора към GND |
| GPIO 22 | EMAC_TXD1 | TX1 |
| GPIO 19 | EMAC_TXD0 | TXD |
| GPIO 21 | EMAC_TX_EN | TX_EN |
| GPIO 26 | EMAC_RXD1 | RX1 |
| GPIO 25 | EMAC_RXD0 | RX0 |
| GPIO 27 | EMAC_RX_DV | CRS |
| GPIO 00 | EMAC_TX_CLK | nINT/REFCLK и през 10к резистора към VCC или 3.3V |
| GPIO 16 | SMI_MDC | MDC |
| GPIO 27 | SMI_MDIO | MDIO |
| 3.3V | VCC | |
| GND | GND |
Малко теория защо са необходими резисторите и модификацията. Когато 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, но няма как. Оттук нататък мога да пожелая успех.