text: This guide shows how to get the ESP32 or ESP8266 boards MAC Address using Arduino IDE. We also show how to change your board’s MAC Address.
  What’s a MAC Address?
  MAC Address stands for Media Access Control Address and it is a hardware unique identifier that identifies each device on a network.
  MAC Addresses are made up of six groups of two hexadecimal digits, separated by colons, for example: 30:AE:A4:07:0D:64.
  MAC Addresses are assigned by manufacturers, but you can also give a custom MAC Address to your board. However, every time the board resets, it will return to its original MAC Address. So, you need to include the code to set a custom MAC Address in every sketch.
  Get ESP32 or ESP8266 MAC Address
  To get your board MAC Address, simply upload the following code to the ESP32 or ESP8266. The code is compatible with both boards.
  // Complete Instructions to Get and Change ESP MAC Address:  #ifdef ESP32 #include <WiFi.h> #else #include <ESP8266WiFi.h> #endif void setup(){ Serial.begin(115200); Serial.println(); Serial.print("ESP Board MAC Address: "); Serial.println(WiFi.macAddress()); } void loop(){ }
  Demonstration
  After uploading the code, open the Serial Monitor at a baud rate of 115200. Press the on-board RESET or EN button.
  The MAC Address should be printed in the Serial Monitor as shown in the following figure.
  That’s it! Now, you know how to get your ESP32 or ESP8266 board MAC Address.
  Set a Custom MAC Address for ESP32 and ESP8266
  In some applications, it might be useful to give your boards a custom MAC Address. However, as explained previously, this doesn’t overwrite the MAC Address set by the manufacturer. So, every time you reset the board, or upload a new code, it will get back to its default MAC Address.
  Change ESP32 MAC Address (Arduino IDE)
  The following code sets a custom MAC Address for the ESP32 board.
  // Complete Instructions:  #include <WiFi.h> #include <esp_wifi.h> // Set your new MAC Address uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66}; void setup(){ Serial.begin(115200); Serial.println(); WiFi.mode(WIFI_STA); Serial.print("[OLD] ESP32 Board MAC Address: "); Serial.println(WiFi.macAddress()); // ESP32 Board add-on before version < 1.0.5 //esp_wifi_set_mac(ESP_IF_WIFI_STA, &newMACAddress[0]); // ESP32 Board add-on after version > 1.0.5 esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]); Serial.print("[NEW] ESP32 Board MAC Address: "); Serial.println(WiFi.macAddress()); } void loop(){ }
  You can set a custom MAC Address in the following line:
  uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};
  After uploading the code, open the Serial Monitor at a baud rate of 115200. Restart the ESP32 and you should get its old and new MAC Address.
  Change ESP8266 MAC Address (Arduino IDE)
  The following code sets a custom MAC Address for the ESP8266 board.
  // Complete Instructions:  #include <ESP8266WiFi.h> // Set your new MAC Address uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66}; void setup(){ Serial.begin(115200); Serial.println(); WiFi.mode(WIFI_STA); Serial.print("[OLD] ESP8266 Board MAC Address: "); Serial.println(WiFi.macAddress()); // For Soft Access Point (AP) Mode //wifi_set_macaddr(SOFTAP_IF, &newMACAddress[0]); // For Station Mode wifi_set_macaddr(STATION_IF, &newMACAddress[0]); Serial.print("[NEW] ESP8266 Board MAC Address: "); Serial.println(WiFi.macAddress()); } void loop(){ }
  Set your custom MAC Address on the following line:
  uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};
  After uploading the code, open the Serial Monitor at a baud rate of 115200. Restart the ESP8266 and you should get its old and new MAC Address.
  Wrapping Up
  In this quick guide, we’ve shown you how to get your ESP32 and ESP8266 manufacturer MAC Address with Arduino IDE. You’ve also learned how to set a custom MAC Address for your boards.
  Learn more about the ESP32 and ESP8266 boards:
  - Learn ESP32 with Arduino IDE (eBook + Video Course)
  - More ESP32 resources…
  - Home Automation using ESP8266 (eBook)
  - More ESP8266 resources…
  Thanks for reading.
  14 thoughts on “Get ESP32/ESP8266 MAC Address and Change It (Arduino IDE)”
  Thank you very much Sara.
  A very interesting idea and i personally intend to use it in my projects..
  Great idea and i love it.
  Let’s say you make a product and sell it to 100 or thousands , or more customers all over the world using Ebay, Amazon, KickStarter or other mass selling companii. You do not have always the user address.
  Then …. the accident has happened and the board is destroyed.
  You are asked to provide a new board, which will not work because it has a new MAC.
  With your suggestion, , you are safe and whatever board you send will always work.
  You look on your database, see what was the MAC address used for that customer/board and program it on the replacement.
  You guys are genius.
  Hi Ion.
  That’s great!
  I’m glad you’ve found this tutorial useful 😀
  Regards,
  Sara
  Does anyone know how to get the mac address of other networks when we do a wifi scan? Since SSID and RSSI is available.
  Hello,
  I have a question.
  I used an example from the web and,
  First, they have a soft to get the MAC, but they GET 2 MAC
  one SOFT and one AP
  Which is the one to use?
  On their application i had to use the SOFT which is 2 bits higher than AP
  Let’s say AP MAC start with 60, then SOFT is 62.
  The rest is the same, but it is confusing.
  On your example it looks like i get the AP MAC address .
  I got lost here and i need some help.
  Thank you
  Hello,
  i am building a “digital twin” of an LEGO technic Hub, by using an ESP32.
  Target is that ESP32 can be connected to LEGO BLE Apps.
  At least i have concerns, that one reason i did not get a connecteion request is because LEGO Apps using Address Filters .
  An Example of a LEGO HUB Adress is like:Advertising Address: LegoSyst_4a:3a:0c (90:84:2b:4a:3a:0c) ( a hub owned by me)
  As you may know ours is like: Advertising Address: Espressi_cb:69:fa (bc:dd:c2:cb:69:fa)
  Question is, how to change Advertising address is scetch to be shown as “LegoSyste” like : 90:84:2b:aa:bb:cc for example
  Thanks in advance
  Marc
  Hi Marc.
  You question was answered in our forum: 
  Regards,
  Sara
  Thank you very much Sara.
  I have a project that needs to permanently change the MAC address of the equipment vendor. I don’t know how to do it. Can you help me?
  Download the binary and edit it as a binary in a hex editor, but they will have to have set the mac themselves, you just need to find it and change it.
  Thanks, Sara!
  I believe something has broken in the ESP32 code since it was published.
  esp_wifi_set_mac(ESP_IF_WIFI_STA, &newMACAddress[0]);
  Now causes the error:
  ”
  cannot convert ‘esp_interface_t’ to ‘wifi_interface_t’ for argument ‘1’ to ‘esp_err_t esp_wifi_set_mac(wifi_interface_t, const uint8_t*)’
  This used to work for me, hope there’s a quick solution!
  Hi.
  This also used to work for me.
  I also get the same error. I’ll try to investigate and see how to solve the issue.
  I’ll update the tutorial as soon as I can find the issue.
  Regards,
  Sara
  Hi.
  Just replace
  esp_wifi_set_mac(ESP_IF_WIFI_STA, &newMACAddress[0]);
  with
  esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]);
  Regards,
  Sara
  Exellent article.
  Is there any criteria to assign a custom MAC address?
  I was trying to assign the address “0x53, 0x6D, 0x54, 0x00, 0x00, 0x01” to my board, but i noticed that the change only takes effect if i write “0x32, 0x6D, 0x54, 0x00, 0x00, 0x01”
  Is there “a range” of valid values for the first digit?
  Morning Diego
  Had a similar problem, but not only with the first hex values – also with subsequent values. Some new mac addresses work and some don’t. Eventually I found a series of addresses that worked and tested them on several ESP32 boards. Sticking to slight changes to the address given by RNT in their example or sticking close to mac addresses on the ESP32 boards that I have usually works. Creating mac addresses from scratch didn’t work so well.
  I want to set a static IP in my WiFi router for a project, but want to switch the physical ESP32 boards from time to time and retain a common IP address. Still work in progress.
  Hello,
  thanks for perfect tutorial.
  Please is there any way to change MAC on ethernet interface?
  Thanks for help.
  typedef enum {
  WIFI_IF_STA = ESP_IF_WIFI_STA,
  WIFI_IF_AP = ESP_IF_WIFI_AP,
  } wifi_interface_t;
  typedef enum {
  ESP_IF_WIFI_STA = 0, /< ESP32 station interface */
  ESP_IF_WIFI_AP, /< ESP32 soft-AP interface */
  ESP_IF_ETH, /**< ESP32 ethernet interface */ <– Need change MAC on this interface
  ESP_IF_MAX
  } esp_interface_t;