一:芯片的MAC:
ESP32的MAC地址由芯片在生产时烧录,是唯一且固定的。在大多数开发场景中,它就被当作芯片的ID来使用
它本质上是在芯片出厂时,由乐鑫(Espressif)公司写入一次性可编程存储器(eFuse)的一组固定数据。这组数据不可更改,全球唯一。
除了MAC地址,eFuse里还存着芯片型号(如ESP32-S3)、晶圆批次、修订版本等信息。你读取到的ID,正是这些底层硬件信息的数字化体现。
二:设备ID的用途
这是它最重要的作用。你可以把它当作设备的“身份证号”:
2.1 云端绑定:
智能家居设备(如智能灯、插座)首次配网时,会将芯片ID上报给服务器,服务器用这个ID来绑定设备,确保后续下发的指令不会发错对象。
2.2 防止克隆:
因为ID无法篡改,服务器可以验证连接过来的设备是否为正版硬件,防止别人用伪造的硬件盗用你的账号权限。
生成设备默认名称与密码许多路由器或蓝牙扫描列表里,会看到类似 ESP_123456 的设备名。这个后缀 123456 通常就是取芯片MAC地址或ID的后几位转换而成,方便你区分家里多个同款设备。某些场景下,它也被用作出厂默认的AP(热点)密码。2.3 产品追溯与库存管理
在生产环节,工厂可以扫描每个设备的芯片ID,将其与产品序列号(SN)关联。一旦售出的产品出现故障,厂家能通过你提供的ID,回溯到具体的生产批次、测试数据和原始固件版本。2.4 离线数据加密(掩码)
在不需要联网的场景下,这个ID可以作为加密算法的掩码(Salt)。比如,你用它结合一个固定密钥,对存储在Flash里的配置文件进行加密。这样即使有人把Flash拆下来读数据,由于缺少芯片内部ID,也无法解密。
三:软件代码:uint32_t chipId = 0;
void setup() {
Serial.begin(115200);
}
void loop() {
for (int i = 0; i < 17; i = i + 8) {
chipId |= ((ESP.getEfuseMac() >> (40 - i)) & 0xff) << i;
}
Serial.printf("ESP32 Chip model = %s Rev %un", ESP.getChipModel(), ESP.getChipRevision());
Serial.printf("This chip has %u coresn", ESP.getChipCores());
Serial.print("Chip ID: ");
Serial.println(chipId);
delay(1000);
}四:图片验证:
我要赚赏金
