ESP32/ESP8266 MAC地址的获取与设定 – 凌顺实验室 您所在的位置:网站首页 esp8266wifi固件丢失 ESP32/ESP8266 MAC地址的获取与设定 – 凌顺实验室

ESP32/ESP8266 MAC地址的获取与设定 – 凌顺实验室

2023-10-02 20:13| 来源: 网络整理| 查看: 265

目录

首先,凌顺实验室(lingshunlab.com)介绍使用Arduino IDE 编程的方式获取和设定(修改)ESP32/ESP8266的MAC地址。

WiFi.macAddress() 用法一:WiFi.macAddress()

在获取MAC地址中,主要使用WiFi.macAddress()函数

其实macAddress方法调用了 esp_wifi_get_mac 函数,可以查看相关资料。在获取MAC地址之前,我们并不需求连接任何WIFI。

但在查看 esp_wifi_get_mac 时见到该函数有其中一个错误提示 ESP_ERR_WIFI_NOT_INIT: WiFi is not initialized by esp_wifi_init 为WIFI未初始化。

而在实际应用中,添加或者不添加以下WIFI初始化的代码,在ESP32中仍然能获取到MAC地址 。

WiFi.mode(WIFI_MODE_STA); // 如果无法获取MAC地址时,不妨试试添加这行用于WIFI初始化的代码 用法二:WiFi.macAddress(macAddr)

该函数还有另一个用法WiFi.macAddress(macAddr),其中macAddr为可选择项,如果输入参数macAddr,那么ESP32/ESP8266开发板的mac地址将会存储在macAddr的变量中。macAddr必须是一个uint8_t类型的数组,这个数组含有6个元素。

示例代码:

uint8_t macAddr[6]; WiFi.macAddress(macAddr); //MAC地址会储存在这个macAddr数组里面 Serial.printf("用转存到数组的方式获取MAC地址: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); 获取MAC地址代码 // welcome to lingshunlab.com // 详细说明请访问: https://lingshunlab.com/book/esp32/esp32-mac-address-get-and-set #ifdef ESP32 #include #else #include #endif void setup(){ Serial.begin(115200); // 设置波特率 Serial.println(); // 串口输出换行 // WiFi.mode(WIFI_MODE_STA); // // 如果无法获取MAC地址时,不妨试试添加这行用于WIFI初始化的代码 Serial.print("ESP Board MAC Address: "); Serial.println(WiFi.macAddress()); // 串口输出当前ESP32/ESP8266的MAC地址 uint8_t macAddr[6]; // 定义macAddr为uint8_t类型的数组,这个数组含有6个元素。 WiFi.macAddress(macAddr); //MAC地址会储存在这个macAddr数组里面 Serial.printf("用转存到数组的方式获取MAC地址: %02x:%02x:%02x:%02x:%02x:%02x\n", macAddr[0], macAddr[1], macAddr[2], macAddr[3], macAddr[4], macAddr[5]); } void loop(){ }

上传代码,打开串口监视器,波特率设置为115200,可以查看得到如下信息:

esp32-get-mac-address-serial-output

修改MAC地址

MAC地址由制造商分配,当然你也可以修改其地址,但修改后并不会覆盖原来的MAC地址,每次您重置电路板或上传新代码时,它都会恢复到其制造商分配的默认 MAC 地址。因此,如果修改MAC地址则需要在每个项目代码中添加修改MAC地址的代码。

// welcome to lingshunlab.com // 详细说明请访问: https://lingshunlab.com/book/esp32/esp32-mac-address-get-and-set #ifdef ESP32 #include #include #else #include #endif uint8_t newMACAddress[] = {0xAA, 0xBB, 0xCC, 0x11, 0x22, 0x33}; // 设置新的MAC地址,newMACAddress变量为uint8_t类型的数组 void setup(){ Serial.begin(115200); // 设置波特率 WiFi.mode(WIFI_STA); // 设置 WIFI模式 为 WIFI_STA Serial.print("原厂默认:MAC Address: "); Serial.println(WiFi.macAddress()); // 串口输出原有的MAC地址 // ESP32 ============ // ESP32 使用以下代码,把ESP8266的代码添加注释 // 在开发板管理中查看 ESP32 的版本 小于 1.0.5 使用以下代码进行设定新MAC地址 //esp_wifi_set_mac(ESP_IF_WIFI_STA, &newMACAddress[0]); // 在开发板管理中查看 ESP32 的版本 大于 1.0.5 使用以下代码进行设定新MAC地址 esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]); // ESP8266 END ======== // ESP8266 ============ // ESP8266 使用以下代码,把ESP32的代码添加注释 // 如果ESP8266使用的是AP模式,则使用以下代码设定新MAC地址 //wifi_set_macaddr(SOFTAP_IF, &newMACAddress[0]); // 如果ESP8266使用的是STATION模式,则使用以下代码设定新MAC地址 //wifi_set_macaddr(STATION_IF, &newMACAddress[0]); // ESP8266 END ======== Serial.print("最新设定:MAC Address: "); Serial.println(WiFi.macAddress()); // 串口输出新设定的MAC地址 } void loop(){ }

上传代码,打开串口监视器,波特率设置为115200,可以查看得到如下信息:

esp32-get-mac-address-serial-set-output

参考引用: https://randomnerdtutorials.com/get-change-esp32-esp8266-mac-address-arduino/ http://www.taichi-maker.com/homepage/iot-development/iot-dev-reference/esp8266-c-plus-plus-reference/esp8266wifista/macaddress/



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有