You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Arduino IDE中获取ESP32的8字节唯一ID?

在Arduino IDE中为ESP32获取8字节全局唯一ID的方案

直接调用ESP-IDF原生API

Arduino for ESP32本质是基于ESP-IDF框架封装的,因此可以直接使用你熟悉的esp_efuse_mac_get_default()函数,无需额外依赖。该函数会返回8字节的全局唯一值,和你在纯ESP-IDF开发中获取的结果完全一致。

示例代码:

#include "esp_efuse.h"

uint8_t unique_id[8];

void setup() {
  Serial.begin(115200);
  esp_efuse_mac_get_default(unique_id);
  
  Serial.print("8字节唯一ID: ");
  for (int i = 0; i < 8; i++) {
    Serial.printf("%02X ", unique_id[i]);
  }
  Serial.println();
}

void loop() {
}

组合现有信息生成8字节ID

如果不想直接引入ESP-IDF头文件,也可以通过ESP.getEfuseMac()获取的6字节MAC地址,搭配ESP32 EFUSE中存储的其他唯一硬件信息(如芯片版本、批次码),拼接成8字节ID。

需要说明的是:ESP.getEfuseMac()返回的6字节MAC是出厂烧录的全局唯一值,同批次设备不会出现重复,你之前的担心其实是多余的。在此基础上添加2字节硬件信息,即可得到符合需求的8字节唯一标识。

示例代码:

#include "esp_efuse.h"

uint8_t unique_id[8];

void setup() {
  Serial.begin(115200);
  
  // 复制6字节MAC到ID的后6位
  uint64_t mac = ESP.getEfuseMac();
  memcpy(unique_id + 2, &mac, 6);
  
  // 从EFUSE读取芯片版本信息作为前2位
  uint32_t chip_rev = esp_efuse_read_field(EFUSE_RD_CHIP_VER_REV1) | (esp_efuse_read_field(EFUSE_RD_CHIP_VER_REV2) << 1);
  unique_id[0] = (chip_rev >> 8) & 0xFF;
  unique_id[1] = chip_rev & 0xFF;
  
  Serial.print("组合生成的8字节ID: ");
  for (int i = 0; i < 8; i++) {
    Serial.printf("%02X ", unique_id[i]);
  }
  Serial.println();
}

void loop() {
}

内容的提问来源于stack exchange,提问作者gxor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:45:58