Skip to content

Commit 595dc01

Browse files
dpnebertP-R-O-C-H-YSuGlider
authored
Added example 'get mac address' (#8618)
* Example sketch prints MAC for different interfaces Interfaces described in documenation: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/misc_system_api.html#mac-address * Update README.md to include 'MacAddress' * Add files via upload * Delete libraries/ESP32/examples/MacAddress/GetMacAddress.ino * Delete libraries/ESP32/examples/MacAddress/GetMacAddress/GetMacAddress.ino * Delete libraries/ESP32/examples/MacAddress/GetMacAddress/MacAddress directory * Add files via upload * Add files via upload * Adds necessary MAC header file * Reverting - moving to the sketch * Adds include with esp_mac_type_t values --------- Co-authored-by: Jan Procházka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com>
1 parent 00a9579 commit 595dc01

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
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+
}

Diff for: libraries/README.md

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ arduino-esp32 includes libraries for Arduino compatibility along with some objec
3333
* GPIO
3434
* HallSensor
3535
* I2S
36+
* MacAddress
3637
* ResetReason
3738
* RMT
3839
* Time

0 commit comments

Comments
 (0)