设置、查询 ESP32 设备的 MAC 地址有多种方式,如下:
1 使用 AT 指令来设置、查询 ESP32 设备的 MAC 地址
1.1 使用 AT 指令设置、查询 Wi-Fi Station 模式的 MAC 地址
- 使用
AT+CIPSTAMAC="22:33:44:55:66:77"
指令来设置
Wi-Fi Station 的 MAC 地址。 - 使用
AT+CIPSTAMAC?
指令来查询
Wi-Fi Station 的 MAC 地址。
1.2 使用 AT 指令设置、查询 Wi-Fi SoftAP 模式的 MAC 地址
- 使用
AT+CIPAPMAC="22:33:44:55:66:77"
指令来设置
Wi-Fi SoftAP 模式的 MAC 地址。 - 使用
AT+CIPAPMAC?
指令来查询
Wi-Fi SoftAP 模式的 MAC 地址。
1.3 使用 AT 指令设置、查询 Ethernet 的 MAC 地址
- 通过
AT+CIPETHMAC="1a:fe:35:98:d4:7b"
指令来设置
Ethernet 的 MAC 地址。 - 通过
AT+CIPETHMAC?
指令来查询
Ethernet 的 MAC 地址。
1.4 使用 AT 指令设置、查询 BLE(BT)模式 的 MAC 地址
- 通过
AT+BLEADDR=1,"f8:7f:24:87:1c:7b"
指令来设置
BLE(BT) 模式的 MAC 地址。 - 通过
AT+BLEADDR?
指令来查询
BLE(BT) 模式的 MAC 地址。
1.5 使用 ESP32 设备当前模式下的 MAC 地址
只有当 ESP32 设备获取到有效接口信息后,才能查询到它的 MAC 地址
- 使用
AT+CIFSR
指令来查询
ESP32 设备当前模式下的 MAC 地址。
2 使用 esptool 工具来设置、查询 ESP32 设备的 MAC 地址
可先使用
espefuse.py -h
命令来查询相关命令的使用方法,如下:
2.1 使用 esptool 工具来查询
ESP32 设备默认出厂写入 EFUSE BLOCK0
中的 MAC 地址
- 使用
espefuse.py summary
命令可查询 ESP32 设备默认出厂写入EFUSE BLOCK0
中的 MAC 地址,如下:
- 查询到的
EFUSE BLOCK0
中的 MAC 地址为base_mac
,base_mac
默认是Wi-Fi Station
模式的 MAC 地址。根据Wi-Fi Station
模式的 MAC 地址可获取 Wi-Fi SoftAP 模式、蓝牙模式、以太网的 MAC 地址。可参考 MAC Address 说明。如下:
2.2 使用 esptool 工具向 EFUSE BLOCK3
中设置
用户自定义的 MAC 地址
- 使用
espefuse.py burn_custom_mac 12:22:33:44:55:66
命令可向EFUSE BLOCK3
中设置用户自定义的 MAC 地址
,如下:
注意:EFUSE
BLOCK3
的Bit 1
不能为 1
2.3 使用 esptool 工具查询
EFUSE BLOCK3
中设置的用户自定义的 MAC 地址
- 使用
espefuse.py get_custom_mac
命令可查询
用户自定义设置的EFUSE BLOCK3
中的 MAC 地址,如下:
- 也可以使用
espefuse.py summary
命令来查询
用户自定义设置的EFUSE BLOCK3
中的 MAC 地址,如下:
3 使用相关 API 来设置、查询 Wi-Fi 的 MAC 地址
-
使用 esp_base_mac_addr_set(uint8_t *mac); 设置用户自定义的 MAC 地址(base_mac)到
EFUSE BLOCK3
中,默认为 WI-Fi STA 的 MAC 地址。例如:“ esp_base_mac_addr_set(12:22:33:44:55:FF)“,
-
对应的是:
> STA(FF) > AP(FF + 1 -> 00) > BT(FF + 2 -> 01) > ETH(FF + 3 -> 02)`(末位不进位)`
注:可参考 MAC Address 说明。如下:
-
因此:
"esp_wifi_set_mac(ESP_IF_WIFI_STA, 12:22:33:44:55:FF)" "esp_wifi_set_mac(ESP_IF_WIFI_AP, 12:22:33:44:55:01)"
-
使用 esp_efuse_mac_get_custom(uint8_t *mac) 函数获取用户自定义设置的
EFUSE BLOCK3
中的 MAC 地址(base_mac) -
使用 esp_base_mac_addr_get(uint8_t *mac) 函数获取 ESP32 设备的
base_mac
地址。若EFUSE BLOCK3
中没有写入用户自定义的 MAC 地址,则将获取到的是出厂默认写入EFUSE BLOCK0
中的 MAC 地址(base_mac) -
使用 esp_read_mac(uint8_t *mac, esp_mac_type_t type) 函数将首先读取
esp_base_mac_addr_get()
函数获取的base_mac
的地址 -
使用 esp_efuse_mac_get_default(uint8_t *mac) 函数将获取到 ESP32 设备出厂默认写入
EFUSE BLOCK0
的 MAC 地址。注: 使用 esp_efuse_mac_get_default(uint8_t *mac) 获取到的出厂默认写入
EFUSE BLOCK0
的 MAC 地址为全球唯一的 MAC 地址。
4 使用 NVS 写入 MAC 地址
- 构建特定的 NVS 分区表来写入 MAC 地址
- 然后使用“ nvs_get_str(nvs_handle_thandle,const char * key,char * out_value,size_t * length)”函数读取特定的 NVS 分区表,从而获得特定的 NVS 分区表中写入的 MAC 地址。
- 可参考 “NVS分区生成工具” 来了解 NVS 的应用。
【MAC 地址】
- ESP32 模组出厂会将设备的 MAC 基地址(默认也是 Wi-Fi STA MAC 地址)写到
EFUSE BLOCK0
中(即:通过扫描模组二维码获取的是基地址) - MAC 基地址加 “1” 即为 Wi-Fi AP MAC 地址;MAC 基地址加“2”即为蓝牙的 MAC 地址;MAC 基地址加“3”即为 Ethernet 的 MAC 地址。
- MAC 地址是全球唯一的,且每个批次都不相同。