Получение и изменение MAC-адреса ESP32/ESP8266 (Arduino IDE)

В этом руководстве показано, как получить MAC-адрес плат ESP32 или ESP8266 NodeMCU с помощью Arduino IDE. Мы также покажем, как изменить MAC-адрес вашей платы.

Получение или изменение MAC-адреса ESP32 ESP8266 (Arduino IDE)

Что такое MAC-адрес?

MAC-адрес расшифровывается как M edia A ccess C ontrol Address (адрес управления доступом к среде) — это уникальный аппаратный идентификатор, который идентифицирует каждое устройство в сети.

MAC-адреса состоят из шести групп по два шестнадцатеричных символа, разделённых двоеточиями, например: 30:AE:A4:07:0D:64.

MAC-адреса назначаются производителями, но вы также можете задать пользовательский MAC-адрес для вашей платы. Однако каждый раз при перезагрузке плата будет возвращаться к своему оригинальному MAC-адресу. Поэтому вам нужно включать код для установки пользовательского MAC-адреса в каждый скетч.

Получение MAC-адреса ESP32

Чтобы получить MAC-адрес вашей платы ESP32, загрузите следующий код.

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <esp_wifi.h>

void readMacAddress(){
  uint8_t baseMac[6];
  esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
  if (ret == ESP_OK) {
    Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
                  baseMac[0], baseMac[1], baseMac[2],
                  baseMac[3], baseMac[4], baseMac[5]);
  } else {
    Serial.println("Failed to read MAC address");
  }
}

void setup(){
  Serial.begin(115200);

  WiFi.mode(WIFI_STA);
  WiFi.STA.begin();

  Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
  readMacAddress();
}

void loop(){

}

Просмотреть исходный код

Демонстрация

После загрузки кода откройте Serial Monitor на скорости 115200 бод. Нажмите кнопку RESET или EN на плате.

MAC-адрес должен отобразиться в Serial Monitor, как показано на следующем рисунке.

Получение MAC-адреса ESP32 с помощью Arduino IDE

Вот и всё! Теперь вы знаете, как получить MAC-адрес вашего ESP32.

Установка пользовательского MAC-адреса для ESP32

В некоторых приложениях может быть полезно задать пользовательский MAC-адрес для ваших плат. Однако, как объяснялось ранее, это не перезаписывает MAC-адрес, установленный производителем. Поэтому каждый раз при перезагрузке платы или загрузке нового кода, она вернётся к своему MAC-адресу по умолчанию.

Изменение MAC-адреса ESP32 (Arduino IDE)

Следующий код устанавливает пользовательский MAC-адрес для платы ESP32.

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <WiFi.h>
#include <esp_wifi.h>

// Set your new MAC Address
uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};

// Replace with your network credentials
const char* ssid     = "REPLACE_WITH_YOUR_SSID";
const char* password = "REPLACE_WITH_YOUR_PASSWORD";

void readMacAddress(){
  uint8_t baseMac[6];
  esp_err_t ret = esp_wifi_get_mac(WIFI_IF_STA, baseMac);
  if (ret == ESP_OK) {
    Serial.printf("%02x:%02x:%02x:%02x:%02x:%02x\n",
                  baseMac[0], baseMac[1], baseMac[2],
                  baseMac[3], baseMac[4], baseMac[5]);
  } else {
    Serial.println("Failed to read MAC address");
  }
}

void setup(){
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.STA.begin();

  Serial.print("[DEFAULT] ESP32 Board MAC Address: ");
  readMacAddress();

  // Change ESP32 Mac Address
  esp_err_t err = esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]);
  if (err == ESP_OK) {
    Serial.println("Success changing Mac Address");
  }

  // Read the new MAC address
  Serial.print("[NEW] ESP32 Board MAC Address: ");
  readMacAddress();

  // Connect to Wi-Fi
  WiFi.begin(ssid, password);
  Serial.println("Connecting to WiFi...");
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(1000);
  }
  Serial.println("Connected");
}

void loop(){

}

Просмотреть исходный код

Вы можете задать пользовательский MAC-адрес в следующей строке:

uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};

Внимание: бит 0 первого байта MAC-адреса не может быть равен 1. Например, MAC-адрес можно установить как «1a:XX:XX:XX:XX:XX», но нельзя установить как «15:XX:XX:XX:XX:XX».

После загрузки кода откройте Serial Monitor на скорости 115200 бод. Перезагрузите ESP32, и вы должны увидеть MAC-адрес по умолчанию и новый MAC-адрес.

Изменение и установка MAC-адреса ESP32 с помощью Arduino IDE

Получение MAC-адреса ESP8266 NodeMCU

Чтобы получить MAC-адрес вашей платы ESP8266, используйте следующий код.

/*
  Rui Santos & Sara Santos - Random Nerd Tutorials
  Complete project details at https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
  The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
*/
#include <ESP8266WiFi.h>

void setup(){
  Serial.begin(115200);
  Serial.println();
  Serial.print("ESP Board MAC Address:  ");
  Serial.println(WiFi.macAddress());
}

void loop(){

}

Просмотреть исходный код

Демонстрация

После загрузки кода откройте Serial Monitor на скорости 115200 бод. Нажмите кнопку RESET или EN на плате. MAC-адрес должен отобразиться в Serial Monitor.

Получение MAC-адреса ESP8266 по умолчанию

Изменение MAC-адреса ESP8266 NodeMCU (Arduino IDE)

Следующий код устанавливает пользовательский MAC-адрес для платы ESP8266.

// Complete Instructions: https://RandomNerdTutorials.com/get-change-esp32-esp8266-mac-address-arduino/

#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(){

}

Просмотреть исходный код

Задайте свой пользовательский MAC-адрес в следующей строке:

uint8_t newMACAddress[] = {0x32, 0xAE, 0xA4, 0x07, 0x0D, 0x66};

После загрузки кода откройте Serial Monitor на скорости 115200 бод. Перезагрузите ESP8266, и вы должны увидеть MAC-адрес по умолчанию и новый MAC-адрес.

Изменение и установка MAC-адреса ESP8266 с помощью Arduino IDE

Заключение

В этом кратком руководстве мы показали, как получить заводской MAC-адрес ESP32 и ESP8266 с помощью Arduino IDE. Вы также узнали, как установить пользовательский MAC-адрес для ваших плат.

Узнайте больше о платах ESP32 и ESP8266:

Спасибо за чтение.


Источник: :doc:`Get ESP32/ESP8266 MAC Address and Change It (Arduino IDE) <../get-change-esp32-esp8266-mac-address-arduino/index>` — Random Nerd Tutorials