Получение и изменение MAC-адреса ESP32/ESP8266 (Arduino IDE)
В этом руководстве показано, как получить MAC-адрес плат ESP32 или ESP8266 NodeMCU с помощью Arduino IDE. Мы также покажем, как изменить MAC-адрес вашей платы.
Что такое 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.
Установка пользовательского 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-адреса 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 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-адрес 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