[rp2040] Fix get_mac_address_raw to use ethernet MAC when WiFi unavailable

On RP2040, get_mac_address_raw() only queried WiFi.macAddress(). When
ethernet is configured without WiFi, the MAC address was left
uninitialized, causing get_mac_address() and get_mac_address_pretty()
to return all zeros. This affects device identification (API, mDNS,
unique ID).

Unlike ESP32 which reads from eFuse (always available regardless of
network interface), RP2040 must query the actual network driver.

Fall back to ethernet::global_eth_component->get_eth_mac_address_raw()
when USE_ETHERNET is defined and USE_WIFI is not.
This commit is contained in:
J. Nick Koston
2026-03-20 14:17:49 -10:00
parent 9e7cdaf475
commit f8af7354b1
+3
View File
@@ -10,6 +10,7 @@
#include <pico/cyw43_arch.h> // For cyw43_arch_lwip_begin/end (LwIPLock)
#elif defined(USE_ETHERNET)
#include <LwipEthernet.h> // For ethernet_arch_lwip_begin/end (LwIPLock)
#include "esphome/components/ethernet/ethernet_component.h"
#endif
#include <hardware/structs/rosc.h>
#include <hardware/sync.h>
@@ -71,6 +72,8 @@ LwIPLock::~LwIPLock() {}
void get_mac_address_raw(uint8_t *mac) { // NOLINT(readability-non-const-parameter)
#ifdef USE_WIFI
WiFi.macAddress(mac);
#elif defined(USE_ETHERNET)
ethernet::global_eth_component->get_eth_mac_address_raw(mac);
#endif
}