15#include "driver/gpio.h"
21#include "freertos/FreeRTOS.h"
22#include "freertos/task.h"
26static const char *
TAG =
"ethernet";
34#define ETH_MDC_GPIO 23
37#define ETH_MDIO_GPIO 18
40#define ETH_PHY_POWER_GPIO 16
43#define ETH_RMII_CLK_GPIO 0
66 int32_t event_id,
void *event_data)
71 case ETHERNET_EVENT_CONNECTED:
74 ESP_LOGI(
TAG,
"Link up, MAC %02x:%02x:%02x:%02x:%02x:%02x",
75 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
78 case ETHERNET_EVENT_DISCONNECTED:
80 ESP_LOGI(
TAG,
"Link down");
100 int32_t event_id,
void *event_data)
102 ip_event_got_ip_t *
event = (ip_event_got_ip_t *)event_data;
103 const esp_netif_ip_info_t *ip = &
event->ip_info;
105 ESP_LOGI(
TAG,
"IP: " IPSTR
", mask: " IPSTR
", gw: " IPSTR,
106 IP2STR(&ip->ip), IP2STR(&ip->netmask), IP2STR(&ip->gw));
129 ESP_RETURN_ON_FALSE(eth_handle_out, ESP_ERR_INVALID_ARG,
TAG,
"null handle");
132 gpio_config_t pwr_conf = {
134 .mode = GPIO_MODE_OUTPUT,
135 .pull_up_en = GPIO_PULLUP_DISABLE,
136 .pull_down_en = GPIO_PULLDOWN_DISABLE,
137 .intr_type = GPIO_INTR_DISABLE,
139 ESP_RETURN_ON_ERROR(gpio_config(&pwr_conf),
TAG,
"PHY power GPIO config failed");
143 vTaskDelay(pdMS_TO_TICKS(100));
145 eth_mac_config_t mac_config = ETH_MAC_DEFAULT_CONFIG();
146 eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG();
148 phy_config.reset_gpio_num = -1;
150 eth_esp32_emac_config_t esp32_emac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG();
151 esp32_emac_config.interface = EMAC_DATA_INTERFACE_RMII;
153 esp32_emac_config.clock_config.rmii.clock_mode = EMAC_CLK_EXT_IN;
158 esp_eth_mac_t *mac = esp_eth_mac_new_esp32(&esp32_emac_config, &mac_config);
159 ESP_RETURN_ON_FALSE(mac, ESP_FAIL,
TAG,
"MAC init failed");
161 esp_eth_phy_t *phy = esp_eth_phy_new_generic(&phy_config);
164 ESP_RETURN_ON_FALSE(
false, ESP_FAIL,
TAG,
"PHY init failed");
167 esp_eth_config_t eth_config = ETH_DEFAULT_CONFIG(mac, phy);
168 ESP_RETURN_ON_ERROR(esp_eth_driver_install(ð_config, eth_handle_out),
169 TAG,
"driver install failed");
177 ESP_RETURN_ON_ERROR(esp_netif_init(),
TAG,
"netif init failed");
178 ESP_RETURN_ON_ERROR(esp_event_loop_create_default(),
TAG,
"event loop failed");
183 esp_netif_config_t netif_cfg = ESP_NETIF_DEFAULT_ETH();
185 ESP_RETURN_ON_FALSE(
s_eth_netif, ESP_ERR_NO_MEM,
TAG,
"netif create failed");
191 ESP_RETURN_ON_ERROR(esp_event_handler_register(ETH_EVENT, ESP_EVENT_ANY_ID,
193 TAG,
"eth event register failed");
195 ESP_RETURN_ON_ERROR(esp_event_handler_register(IP_EVENT, IP_EVENT_ETH_GOT_IP,
197 TAG,
"ip event register failed");
199 ESP_RETURN_ON_ERROR(esp_eth_start(
s_eth_handle),
TAG,
"eth start failed");
200 ESP_LOGI(
TAG,
"Ethernet started, waiting for link and DHCP...");
static void got_ip_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
Обработчик получения IP-адреса по DHCP (или статической конфигурации).
static esp_eth_handle_t s_eth_handle
Дескриптор драйвера Ethernet (MAC + PHY)
#define ETH_PHY_POWER_GPIO
GPIO включения питания PHY (активный уровень — высокий)
static esp_err_t wt32_eth_driver_init(esp_eth_handle_t *eth_handle_out)
Инициализация драйвера Ethernet под конкретную плату WT32-ETH01.
esp_err_t ethernet_start(void)
Инициализирует и запускает Ethernet на плате WT32-ETH01.
#define ETH_RMII_CLK_GPIO
GPIO внешнего тактового сигнала RMII (50 МГц от PHY на GPIO0)
#define ETH_PHY_ADDR
Адрес PHY на шине SMI (MDC/MDIO), для LAN8720 на этой плате — 1.
static void eth_event_handler(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
Обработчик событий Ethernet (линк, отключение и т.
#define ETH_MDC_GPIO
GPIO линии MDC (Management Data Clock) для SMI.
static httpd_handle_t s_http_server
Дескриптор HTTP-сервера; NULL, если сервер не запущен
#define ETH_MDIO_GPIO
GPIO линии MDIO (Management Data I/O) для SMI.
static esp_eth_netif_glue_handle_t s_eth_glue
Связка между esp_eth и esp_netif.
static esp_netif_t * s_eth_netif
Сетевой интерфейс LwIP для Ethernet.
Публичный интерфейс модуля Ethernet для WT32-ETH01.
esp_err_t mqtt_app_start(void)
Запускает MQTT-клиент и подключается к брокеру.
esp_err_t mqtt_app_stop(void)
Останавливает MQTT-клиент и освобождает ресурсы.
Публичный интерфейс MQTT-клиента.
esp_err_t web_server_stop(httpd_handle_t server)
Останавливает HTTP-сервер и освобождает ресурсы.
esp_err_t web_server_start(httpd_handle_t *server_out)
Запускает HTTP-сервер на порту по умолчанию (80).
Публичный интерфейс встроенного HTTP-сервера.