首页 > 其他分享 >获取ESP32的mac地址

获取ESP32的mac地址

时间:2025-01-11 10:05:09浏览次数:3  
标签:ESP ESP32 EFUSE MAC mac 地址 address type

据说ESP32的mac地址可以作为设备的唯一ID,在esp-idf的esp_mac.h中定义了mac的几种类型

typedef enum {
    ESP_MAC_WIFI_STA,      /**< MAC for WiFi Station (6 bytes) */
    ESP_MAC_WIFI_SOFTAP,   /**< MAC for WiFi Soft-AP (6 bytes) */
    ESP_MAC_BT,            /**< MAC for Bluetooth (6 bytes) */
    ESP_MAC_ETH,           /**< MAC for Ethernet (6 bytes) */
    ESP_MAC_IEEE802154,    /**< if CONFIG_SOC_IEEE802154_SUPPORTED=y, MAC for IEEE802154 (8 bytes) */
    ESP_MAC_BASE,          /**< Base MAC for that used for other MAC types (6 bytes) */
    ESP_MAC_EFUSE_FACTORY, /**< MAC_FACTORY eFuse which was burned by Espressif in production (6 bytes) */
    ESP_MAC_EFUSE_CUSTOM,  /**< MAC_CUSTOM eFuse which was can be burned by customer (6 bytes) */
    ESP_MAC_EFUSE_EXT,     /**< if CONFIG_SOC_IEEE802154_SUPPORTED=y, MAC_EXT eFuse which is used as an extender for IEEE802154 MAC (2 bytes) */
} esp_mac_type_t;

可以通过esp_err_t esp_read_mac(uint8_t *mac, esp_mac_type_t type);获取mac相应类型的mac地址,

也可通过esp_err_t esp_efuse_mac_get_default(uint8_t *mac);获取ESP_MAC_BASE

通过遍历mac枚举,循环输出相应类型的mac地址

#include <esp_mac.h>

void mac_address_(){
  // 获取mac地址
  uint8_t mac_address[6];
  esp_err_t err;
  for (esp_mac_type_t mac_type = ESP_MAC_WIFI_STA; mac_type <= ESP_MAC_EFUSE_EXT; mac_type = static_cast<esp_mac_type_t>(mac_type + 1))
  {
      printf(
          "MAC Type: %d (%s)\n", mac_type,
          mac_type == ESP_MAC_WIFI_STA        ? "ESP_MAC_WIFI_STA"
          : mac_type == ESP_MAC_WIFI_SOFTAP   ? "ESP_MAC_WIFI_SOFTAP"
          : mac_type == ESP_MAC_BT            ? "ESP_MAC_BT"
          : mac_type == ESP_MAC_ETH           ? "ESP_MAC_ETH"
          : mac_type == ESP_MAC_IEEE802154    ? "ESP_MAC_IEEE802154"
          : mac_type == ESP_MAC_BASE          ? "ESP_MAC_BASE"
          : mac_type == ESP_MAC_EFUSE_FACTORY ? "ESP_MAC_EFUSE_FACTORY"
          : mac_type == ESP_MAC_EFUSE_CUSTOM  ? "ESP_MAC_EFUSE_CUSTOM"
          : mac_type == ESP_MAC_EFUSE_EXT     ? "ESP_MAC_EFUSE_EXT"
                                              : "Unknown");
      err = esp_read_mac(mac_address, mac_type);
      if (err == ESP_OK)
      {
          printf("MAC Address: " MACSTR "\n\n", mac_address[0], mac_address[1], mac_address[2], mac_address[3], mac_address[4], mac_address[5]);
      }
      else
      {
          printf("Failed to read MAC address: %s\n\n", esp_err_to_name(err));
      }
  }
}

ESP32-S3 结果如下:

MAC Type: 0 (ESP_MAC_WIFI_STA)
MAC Address: e8:06:90:97:fa:50

MAC Type: 1 (ESP_MAC_WIFI_SOFTAP)
MAC Address: e8:06:90:97:fa:51

MAC Type: 2 (ESP_MAC_BT)
MAC Address: e8:06:90:97:fa:52

MAC Type: 3 (ESP_MAC_ETH)
MAC Address: e8:06:90:97:fa:53

MAC Type: 4 (ESP_MAC_IEEE802154)
E (4105) system_api: 4 mac type is incorrect (not found)
Failed to read MAC address: ESP_ERR_NOT_SUPPORTED

MAC Type: 5 (ESP_MAC_BASE)
MAC Address: e8:06:90:97:fa:50

MAC Type: 6 (ESP_MAC_EFUSE_FACTORY)
MAC Address: e8:06:90:97:fa:50

MAC Type: 7 (ESP_MAC_EFUSE_CUSTOM)
E (4130) system_api: eFuse MAC_CUSTOM is empty
E (4135) system_api: unsupported mac type
E (4140) system_api: MAC address generation error
Failed to read MAC address: ESP_ERR_NOT_SUPPORTED

MAC Type: 8 (ESP_MAC_EFUSE_EXT)
E (4153) system_api: 8 mac type is incorrect (not found)
Failed to read MAC address: ESP_ERR_NOT_SUPPORTED

可以看出 ESP_MAC_BASE、ESP_MAC_EFUSE_FACTORY、ESP_MAC_WIFI_STA是一样的

如果用Ardunio的<wifi.h>,也能获取地址,和ESP_MAC_WIFI_STA一样的

#include <WiFi.h>

void mac_address() {
  uint8_t mac[6];
  WiFi.macAddress(mac);

  Serial.print("MAC Address: ");
  for (int i = 0; i < 6; ++i) {
    Serial.printf("%02X", mac[i]);
    if (i != 5) Serial.print(":");
  }
  Serial.print("\n\n");
}

标签:ESP,ESP32,EFUSE,MAC,mac,地址,address,type
From: https://blog.csdn.net/cnnews/article/details/145065081

相关文章

  • Mac电脑如何安装 Audition 2025 Au音频编辑软件?
    Mac电脑如何安装Audition2025Au音频编辑软件?介绍AdobeAudition2025Mac版是一款功能强大的音频录制和编辑软件。具备出色的多轨录音和编辑功能,允许用户同时录制和编辑多个音频轨道。通过直观的界面和丰富的编辑工具,用户可以轻松实现音频的剪切、修剪、合并等操作,并获得精确......
  • Mac电脑必备的菜单栏管理软件 Bartender 5
    Mac电脑必备的菜单栏管理软件Bartender5介绍Bartender5,是一款菜单栏管理软件,可以帮助用户隐藏、组织和自定义Mac菜单栏中的图标和通知。使用Bartender5,用户可以将不常用的图标隐藏起来,使菜单栏保持整洁,并只显示重要的通知和信息。此外,Bartender5还支持自定义图标和通知的显......
  • VMware Fusion Pro 13 for Mac虚拟机如何安装?
    VMwareFusionPro13forMac虚拟机如何安装?介绍VMwareFusionProforMac,是一款mac虚拟机软件,跟ParallelsDesktop一样,都可以让你的Mac同时运行一个或多个不同的操作系统。VMwareFusionPromac不仅能让你在Mac苹果电脑上运行Windows或Linux系统、使用非Mac平台的软......
  • Mac电脑如何安装 Audition 2025 Au音频编辑软件?
    Mac电脑如何安装Audition2025Au音频编辑软件?介绍AdobeAudition2025Mac版是一款功能强大的音频录制和编辑软件。具备出色的多轨录音和编辑功能,允许用户同时录制和编辑多个音频轨道。通过直观的界面和丰富的编辑工具,用户可以轻松实现音频的剪切、修剪、合并等操作,并获......
  • VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS Huawei (华为) 定制版
    VMwareESXi8.0U3cmacOSUnlocker&OEMBIOSHuawei(华为)定制版ESXi8.0U3c标准版,Dell(戴尔)、HPE(慧与)、Lenovo(联想)、Inspur(浪潮)、Cisco(思科)、Hitachi(日立)、Fujitsu(富士通)、NEC(日电)、Huawei(华为)、xFusion(超聚变)OEM定制版请访问原文链接:htt......
  • 安防视频监控EasyCVR视频汇聚平台如何配置webrtc播放地址?
    EasyCVR安防监控视频系统采用先进的网络传输技术,支持高清视频的接入和传输,能够满足大规模、高并发的远程监控需求。平台支持多协议接入,能将接入到视频流转码为多格式进行分发,包括RTMP、RTSP、HTTP-FLV、WebSocket-FLV、HLS、WebRTC、WS-FMP4、HTTP-FMP4等格式。今天我们来聊一聊......
  • VMWare-虚拟机Linux(CentOS),ping ip地址出现 Network is unreachable和name or service
    检查虚拟网络编辑器VMNet1(仅主机)勾选:将主机虑拟适配器连接到此网络;使用本地DHCP服务将IP地址分配给虚拟机这会在电脑上创建一个网络确认:在虚拟网络编辑器里,子网IP和子网掩码设置好;DHCP中网关不要选xxx.xxx.xxx.1确认(宿主局cmd——ipconfig):宿主机VMNet1的网关地址......
  • ETL之kettle版本安装包免费下载地址
    想真正学习或者提升自己的ETL领域知识的朋友欢迎进群,一起学习,共同进步。由于群内人员较多无法直接扫描进入,公众号后台加我微信入群,备注kettle/hop。1、群里经常有小伙伴询问kettle安装包或者私下找我要,今天群里的三倍镜大佬分享了一个kettle全家桶版本,今天我整理下分享给大家。......
  • emacs cscope linux kernel 找不到符号的一种原因
     当阅读linux内核代码时,我一般使用emacs+cscope,但是今天发生了找不到符合的问题。cscopecannotfindsymbolfunctionsock_setbindtodevice 找了半天原因,重建了很多次索引库,都不行。但是egrep就可以正常找到。最后发现,是因为子目录里也创建了cscope的索引库,emac在使......
  • 《ESP32-S3使用指南—IDF版 V1.6》第一章 本书学习方法
    第一章本书学习方法1)实验平台:正点原子DNESP32S3开发板2)章节摘自【正点原子】ESP32-S3使用指南—IDF版V1.63)购买链接:https://detail.tmall.com/item.htm?&id=7684993426594)全套实验源码+手册+视频下载地址:http://www.openedv.com/docs/boards/esp32/ATK-DNESP32S3.html5)正点......