Skip to content

ESP32/ESP8266 MAC地址的获取与设定

目录

首先,凌顺实验室(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 <WiFi.h>
#else
  #include <ESP8266WiFi.h>
#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 <WiFi.h>
  #include <esp_wifi.h>
#else
  #include <ESP8266WiFi.h>
#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/

One thought on “ESP32/ESP8266 MAC地址的获取与设定

  • Pingback: ESP32 使用NOW进行一对一双向通讯互发数据的例子 – 凌顺实验室

Comments are closed.

News

Arduino UNO R4 Minima 简介和引脚大全(pinout)

本文主要介绍Arduino UNO R4 Minima 这块板的资料和引脚说明。

Arduino Uno 使用TTP223点动触摸传感器的简单例子

Arduino Uno颜色识别TCS3200传感器使用教程

Arduino 使用MCP2515模块进行CANBUS通讯

深圳SEO优化公司坪地网站搭建推荐保山关键词按天扣费哪家好九江设计网站多少钱温州百度关键词包年推广推荐临汾推广网站多少钱大鹏网站优化公司聊城建设网站秦皇岛企业网站制作清远网站seo优化报价阿坝网站优化按天计费公司商丘网站优化按天计费哪家好布吉品牌网站设计兰州网站设计推荐南平网站设计吉祥网络营销多少钱黄南SEO按天扣费推荐淄博网站优化软件多少钱菏泽SEO按天扣费报价自贡模板网站建设哪家好贵阳SEO按天计费推荐德阳模板网站建设推荐日照网站优化按天收费益阳如何制作网站赤峰百姓网标王推广贵阳阿里店铺运营报价南澳网站优化按天扣费报价莆田网站搜索优化价格广安阿里店铺托管价格银川网站设计模板报价襄樊网站建设价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化