mirror of
https://github.com/esphome/esphome.git
synced 2026-06-24 15:10:51 +00:00
1f0af903ea3ddc0f7dd3ac13dd452d16848bb583
Brings ethernet to feature parity with wifi's per-interface lifecycle, and applies the same lazy-init pattern as wifi's Unit B+ so enable_on_boot:false genuinely reclaims DMA-capable internal SRAM. Unit B — lifecycle API surface (mirrors WiFiComponent): - New `enable_on_boot: true` (default) YAML option on ethernet. - New set_enable_on_boot(), enable(), disable(), is_disabled(), is_enabled() methods on EthernetComponent. - ESP32 path: enable() calls esp_eth_start(), disable() calls esp_eth_stop(). - RP2040 path: stub methods that log a warning — arduino-pico's LwipIntfDev doesn't expose a clean start/stop hook; schema parity only. Unit B+ — lazy-init refactor (mirrors WiFiComponent::wifi_lazy_init_()): - New ethernet_lazy_init_() method (idempotent, guarded by ethernet_initialized_ flag) holds the entire heavy init body that used to live in setup(): SPI bus init, netif creation, MAC/PHY allocation, eth driver install, netif attach, event handler registration. - setup() becomes thin: 300ms power-stabilization delay, then if enable_on_boot_=true call lazy_init + esp_eth_start, else mark disabled_=true and return. - enable() calls ethernet_lazy_init_() first, then esp_eth_start() — so a runtime enable after enable_on_boot:false works end-to-end. Safe-default getter guards — external callers (sendspin, ethernet_info, mdns, etc.) may invoke MAC/IP/duplex queries before/regardless of whether ethernet is enabled. Without guards these call into esp_eth_ioctl(null, ...) and esp_netif_get_*(null, ...), producing error spam + erroneous mark_failed() calls during dump_config(): - get_eth_mac_address_raw() falls back to esp_read_mac(ESP_MAC_ETH) — the hardware MAC, same value the driver would have returned. - get_duplex_mode() returns ETH_DUPLEX_HALF. - get_link_speed() returns ETH_SPEED_10M. - get_ip_addresses() returns empty (zero) addresses. - dump_connect_params_() early-returns with "(uninitialized)" log line. For a user's reboot-to-toggle workflow with both interfaces declared but only one active per boot: the inactive interface costs zero DMA-capable memory. WiFi-side reclaims ~15-30KB DMA-capable, ethernet-side reclaims ~3-8KB (W5500 SPI driver is gentler than wifi). Field-tested on ESP32-S3 + W5500. Verifies clean dump_config() output and no false "ethernet was marked as failed" state when ethernet is dormant.
[esp32] Decouple esp-idf toolchain version check from PIO, honor framework source: override (#16516)
Description
ESPHome is a system to control your ESP8266/ESP32 by simple yet powerful configuration files and control them remotely through Home Automation systems.
Readme
Multiple Licenses
393 MiB
Languages
C++
60.7%
Python
38.9%
C
0.3%
