ESP32 от Espressif – это мощный микроконтроллер с встроенной поддержкой Wi-Fi и Bluetooth. Однако, в некоторых случаях, вам может потребоваться подключить Ethernet к вашему проекту. Это может быть полезно, если вы хотите подключиться к сети, которая не поддерживает Wi-Fi, или если вы хотите использовать Ethernet для более надежной связи, чем Wi-Fi может предложить. В этой статье мы рассмотрим, как подключить Ethernet модуль LAN8720 к плате NodeMCU 32S на базе ESP32.
LAN8720 – это Ethernet PHY (Physical Layer Device), который преобразует сигналы Ethernet на уровне физического слоя в сигналы, которые можно обрабатывать микроконтроллером. Он имеет RMII (Reduced Media Independent Interface) интерфейс, который совместим с ESP32. LAN8720 имеет меньше пинов, чем некоторые другие Ethernet PHY, что делает его более компактным и дешевым.
Однако, стоит отметить, что LAN8720 не имеет встроенного TCP/IP стека, поэтому вам потребуется дополнительная библиотека для обработки сетевых протоколов.
NodeMCU 32S – это плата, основанная на микроконтроллере ESP32. Она имеет множество GPIO (General Purpose Input/Output) пинов, которые можно использовать для подключения различных датчиков и модулей. NodeMCU 32S также поддерживает Wi-Fi и Bluetooth, что делает ее очень универсальной для различных проектов IoT.
Схема подключения
Подключение LAN8720 к ESP32 довольно прямолинейно. Вот таблица распиновки:
ESP32 | Ethernet PHY LAN8720 |
---|---|
GPIO 21 | TX-EN |
GPIO 22 | TXD1 |
GPIO 19 | TXD0 |
GPIO 27 | CRS |
GPIO 26 | RXD1 |
GPIO25 | RXD0 |
GPIO 23 | MDC |
GPIO 18 | MDIO |
GPIO17 | nINT/RETCLK |
GND | GND |
VCC | 3.3V |
- TX1 и TX0 – это сигналы Ethernet, которые отправляются из LAN8720 в сеть.
- RX1 и RX0 – это сигналы Ethernet, которые приходят из сети в LAN8720.
- MDC и MDIO – это сигналы для управления Ethernet PHY. MDC – это тактовый сигнал, а MDIO – это сигнал данных.
- 3.3V и GND
Библиотеки
Для программирования платы NodeMCU необходимо добавить поддержку плат ESP в Arduino IDE:
- Откройте Arduino IDE, перейдите в “Файл” -> “Настройки”.
- В поле “Дополнительные ссылки для менеджера плат” вставьте следующий URL: https://dl.espressif.com/dl/package_esp32_index.json.
- Если у вас уже есть другие URL-адреса в этом поле, просто добавьте новый, разделив его с предыдущими запятой.
Для работы с Ethernet модулем в Arduino IDE, вам потребуется библиотека ETH.h
, она уже входит в набор стандартных библиотек и не требует дополнительной установки. Помимо этого, может пригодиться библиотека AsyncWebServer.h
для создания веб сервера. Чтобы её установить, выполните следующие действия:
- Откройте Arduino IDE.
- Перейдите в “Скетч” (Sketch) -> “Подключить библиотеку” (Include Library) -> “Управление библиотеками” (Manage Libraries).
- Введите “AsyncWebServer” в поисковой строке.
- Установите библиотеку, выбрав “Установить” (Install).
Пример кода
Вот пример кода, который демонстрирует, как подключить Ethernet модуль LAN8720 к ESP32 с использованием Arduino IDE:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 |
#include <ETH.h> #include <ESPAsyncWebServer.h> #ifdef ETH_CLK_MODE #undef ETH_CLK_MODE #endif #define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT #define ETH_POWER_PIN -1 #define ETH_TYPE ETH_PHY_LAN8720 #define ETH_ADDR 1 #define ETH_MDC_PIN 23 #define ETH_MDIO_PIN 18 static bool eth_connected = false; AsyncWebServer server(80); // Создаем объект AsyncWebServer на порту 80 void WiFiEvent(WiFiEvent_t event) { switch (event) { case ARDUINO_EVENT_ETH_START: Serial.println("ETH Started"); ETH.setHostname("esp32-ethernet"); break; case ARDUINO_EVENT_ETH_CONNECTED: Serial.println("ETH Connected"); break; case ARDUINO_EVENT_ETH_GOT_IP: Serial.print("ETH MAC: "); Serial.print(ETH.macAddress()); Serial.print(", IPv4: "); Serial.print(ETH.localIP()); if (ETH.fullDuplex()) { Serial.print(", FULL_DUPLEX"); } Serial.print(", "); Serial.print(ETH.linkSpeed()); Serial.println("Mbps"); eth_connected = true; break; case ARDUINO_EVENT_ETH_DISCONNECTED: Serial.println("ETH Disconnected"); eth_connected = false; break; case ARDUINO_EVENT_ETH_STOP: Serial.println("ETH Stopped"); eth_connected = false; break; default: break; } } void setup() { Serial.begin(115200); // Начинаем серийную коммуникацию для отладки WiFi.onEvent(WiFiEvent); // Регистрируем функцию обратного вызова для обработки событий Wi-Fi ETH.begin(ETH_ADDR, -1, ETH_MDC_PIN, ETH_MDIO_PIN, ETH_TYPE, ETH_CLK_MODE); // Начинаем работу с Ethernet // Настройка маршрутов для AsyncWebServer server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){ // Обработчик для корневого URL ("/") request->send(200, "text/plain", "Hello, world"); // Отправляем ответ с кодом 200 и текстом "Hello, world" }); server.begin(); // Запускаем сервер } void loop() { if (eth_connected) { // Если подключение к Ethernet установлено // Здесь вы можете добавить свой код для обработки Ethernet } delay(10000); // Ждем 10 секунд перед следующим проходом цикла } |
Подключение Ethernet модуля LAN8720 к NodeMCU 32S открывает множество возможностей для создания проектов IoT, требующих сетевого подключения. Следуя приведенной выше схеме и используя соответствующий код, вы сможете легко настроить соединение между вашим устройством и сетью Ethernet.