下面给出完整的、基于ESP-IDF实现修改ESP32设备MAC地址的示例程序:
✅ 一、环境说明:
- ESP-IDF版本:v5.0以上(推荐v5.x)
- 开发板/芯片:ESP32系列任意开发板
✅ 二、完整的代码示例:
项目目录结构:
esp32_mac_change
├── CMakeLists.txt
├── main
│ ├── CMakeLists.txt
│ └── main.c
└── sdkconfig
步骤1:主目录下的CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
include($ENV{IDF_PATH}/tools/cmake/project.cmake)
project(esp32_mac_change)
步骤2:main
文件夹下的CMakeLists.txt
idf_component_register(SRCS "main.c"
INCLUDE_DIRS ".")
步骤3:核心代码main.c
#include <stdio.h>
#include "esp_mac.h"
#include "esp_wifi.h"
#include "nvs_flash.h"
void app_main(void)
{
// 初始化NVS
esp_err_t ret = nvs_flash_init();
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ESP_ERROR_CHECK(nvs_flash_erase());
ret = nvs_flash_init();
}
ESP_ERROR_CHECK(ret);
// 初始化默认的TCP/IP适配器和Wi-Fi模块
ESP_ERROR_CHECK(esp_netif_init());
ESP_ERROR_CHECK(esp_event_loop_create_default());
// 创建默认网络接口实例(WiFi STA)
esp_netif_create_default_wifi_sta();
// Wi-Fi 初始化
wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
ESP_ERROR_CHECK(esp_wifi_init(&cfg));
// 设置Wi-Fi模式为STA模式
ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
// 获取并打印当前MAC地址
uint8_t original_mac[6];
esp_wifi_get_mac(WIFI_IF_STA, original_mac);
printf("原始MAC地址: %02X:%02X:%02X:%02X:%02X:%02X\n",
original_mac[0], original_mac[1], original_mac[2],
original_mac[3], original_mac[4], original_mac[5]);
// 设置新的MAC地址(自定义)
uint8_t custom_mac[6] = {0x24, 0x0A, 0xC4, 0x66, 0x77, 0x88};
esp_err_t err = esp_wifi_set_mac(WIFI_IF_STA, custom_mac);
if (err == ESP_OK) {
printf("MAC地址设置成功!\n");
} else {
printf("MAC地址设置失败:%s\n", esp_err_to_name(err));
}
// 再次获取并打印新MAC地址
uint8_t new_mac[6];
esp_wifi_get_mac(WIFI_IF_STA, new_mac);
printf("修改后的MAC地址: %02X:%02X:%02X:%02X:%02X:%02X\n",
new_mac[0], new_mac[1], new_mac[2],
new_mac[3], new_mac[4], new_mac[5]);
// 启动Wi-Fi
ESP_ERROR_CHECK(esp_wifi_start());
}
✅ 三、编译及烧录:
在项目根目录执行:
idf.py set-target esp32 # 设置为esp32芯片(如需)
idf.py menuconfig # 配置Wi-Fi信息、端口等(可选)
idf.py build # 编译项目
idf.py -p COM3 flash monitor # 烧录并监视串口输出 (根据实际端口替换COM3)
✅ 四、运行效果示例:
设备串口打印信息:
原始MAC地址: A4:CF:12:34:56:78
MAC地址设置成功!
修改后的MAC地址: 24:0A:C4:66:77:88
⚠️ 注意事项:
- 此方案仅限软件临时修改,每次重启均需重新设置。
- 推荐方案仍是从后台系统本身入手,加入解绑机制;该方案仅供临时应急。
如有其他需求可随时提出!