|
| 1 | +/* |
| 2 | + * GetMacAddress |
| 3 | + * |
| 4 | + * This sketch prints out the MAC addresses for different interfaces. |
| 5 | + * |
| 6 | + * Written by: Daniel Nebert |
| 7 | + * |
| 8 | + * The first printed MAC address is obtained by calling 'esp_efuse_mac_get_default' |
| 9 | + * (https://docs.espressif.com/projects/esp-idf/en/release-v5.1/esp32/api-reference/system/misc_system_api.html#_CPPv425esp_efuse_mac_get_defaultP7uint8_t) |
| 10 | + * which returns base MAC address which is factory-programmed by Espressif in EFUSE. |
| 11 | + * |
| 12 | + * The remaining printed MAC addresses is obtained by calling 'esp_read_mac' |
| 13 | + * (https://docs.espressif.com/projects/esp-idf/en/release-v5.1/esp32/api-reference/system/misc_system_api.html#_CPPv412esp_read_macP7uint8_t14esp_mac_type_t) |
| 14 | + * and passing in the 'esp_mac_type_t' type. |
| 15 | + * (https://docs.espressif.com/projects/esp-idf/en/release-v5.1/esp32/api-reference/system/misc_system_api.html#esp__mac_8h_1a1b19aca597277a2179682869c140477a) |
| 16 | + * |
| 17 | +
|
| 18 | +esp_mac_type_t values: |
| 19 | + |
| 20 | + ESP_MAC_WIFI_STA - MAC for WiFi Station (6 bytes) |
| 21 | + ESP_MAC_WIFI_SOFTAP - MAC for WiFi Soft-AP (6 bytes) |
| 22 | + ESP_MAC_BT - MAC for Bluetooth (6 bytes) |
| 23 | + ESP_MAC_ETH - MAC for Ethernet (6 bytes) |
| 24 | + ESP_MAC_IEEE802154 - if CONFIG_SOC_IEEE802154_SUPPORTED=y, MAC for IEEE802154 (8 bytes) |
| 25 | + ESP_MAC_BASE - Base MAC for that used for other MAC types (6 bytes) |
| 26 | + ESP_MAC_EFUSE_FACTORY - MAC_FACTORY eFuse which was burned by Espressif in production (6 bytes) |
| 27 | + ESP_MAC_EFUSE_CUSTOM - MAC_CUSTOM eFuse which was can be burned by customer (6 bytes) |
| 28 | + ESP_MAC_EFUSE_EXT - if CONFIG_SOC_IEEE802154_SUPPORTED=y, MAC_EXT eFuse which is used as an extender for IEEE802154 MAC (2 bytes) |
| 29 | + |
| 30 | +*/ |
| 31 | + |
| 32 | +#include "esp_mac.h" // required - exposes esp_mac_type_t values |
| 33 | + |
| 34 | +void setup() { |
| 35 | + |
| 36 | + Serial.begin(115200); |
| 37 | + while(!Serial) { delay( 100 ); } |
| 38 | + |
| 39 | + Serial.println("Interface\t\t\t\t\t\tMAC address (6 bytes, 4 universally administered, default)"); |
| 40 | + |
| 41 | + Serial.print("Wi-Fi Station (using 'esp_efuse_mac_get_default')\t"); |
| 42 | + Serial.println(getDefaultMacAddress()); |
| 43 | + |
| 44 | + Serial.print("WiFi Station (using 'esp_read_mac')\t\t\t"); |
| 45 | + Serial.println(getInterfaceMacAddress(ESP_MAC_WIFI_STA)); |
| 46 | + |
| 47 | + Serial.print("WiFi Soft-AP (using 'esp_read_mac')\t\t\t"); |
| 48 | + Serial.println(getInterfaceMacAddress(ESP_MAC_WIFI_SOFTAP)); |
| 49 | + |
| 50 | + Serial.print("Bluetooth (using 'esp_read_mac')\t\t\t"); |
| 51 | + Serial.println(getInterfaceMacAddress(ESP_MAC_BT)); |
| 52 | + |
| 53 | + Serial.print("Ethernet (using 'esp_read_mac')\t\t\t\t"); |
| 54 | + Serial.println(getInterfaceMacAddress(ESP_MAC_ETH)); |
| 55 | +} |
| 56 | + |
| 57 | +void loop() { /* Nothing in loop */ } |
| 58 | + |
| 59 | +String getDefaultMacAddress() { |
| 60 | + |
| 61 | + String mac = ""; |
| 62 | + |
| 63 | + unsigned char mac_base[6] = {0}; |
| 64 | + |
| 65 | + if(esp_efuse_mac_get_default(mac_base) == ESP_OK) { |
| 66 | + char buffer[18]; // 6*2 characters for hex + 5 characters for colons + 1 character for null terminator |
| 67 | + sprintf(buffer, "%02X:%02X:%02X:%02X:%02X:%02X", mac_base[0], mac_base[1], mac_base[2], mac_base[3], mac_base[4], mac_base[5]); |
| 68 | + mac = buffer; |
| 69 | + } |
| 70 | + |
| 71 | + return mac; |
| 72 | +} |
| 73 | + |
| 74 | +String getInterfaceMacAddress(esp_mac_type_t interface) { |
| 75 | + |
| 76 | + String mac = ""; |
| 77 | + |
| 78 | + unsigned char mac_base[6] = {0}; |
| 79 | + |
| 80 | + if(esp_read_mac(mac_base, interface) == ESP_OK) { |
| 81 | + char buffer[18]; // 6*2 characters for hex + 5 characters for colons + 1 character for null terminator |
| 82 | + sprintf(buffer, "%02X:%02X:%02X:%02X:%02X:%02X", mac_base[0], mac_base[1], mac_base[2], mac_base[3], mac_base[4], mac_base[5]); |
| 83 | + mac = buffer; |
| 84 | + } |
| 85 | + |
| 86 | + return mac; |
| 87 | +} |
0 commit comments