如何设置、查询 ESP32 设备的 MAC 地址

设置、查询 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 命令来查询相关命令的使用方法,如下
如何设置、查询 ESP32 设备的 MAC 地址_第1张图片

2.1 使用 esptool 工具来查询 ESP32 设备默认出厂写入 EFUSE BLOCK0 中的 MAC 地址

  • 使用 espefuse.py summary 命令可查询 ESP32 设备默认出厂写入 EFUSE BLOCK0 中的 MAC 地址,如下:
    如何设置、查询 ESP32 设备的 MAC 地址_第2张图片
  • 查询到的 EFUSE BLOCK0 中的 MAC 地址为 base_macbase_mac 默认是 Wi-Fi Station 模式的 MAC 地址。根据 Wi-Fi Station 模式的 MAC 地址可获取 Wi-Fi SoftAP 模式、蓝牙模式、以太网的 MAC 地址。可参考 MAC Address 说明。如下:

如何设置、查询 ESP32 设备的 MAC 地址_第3张图片

2.2 使用 esptool 工具向 EFUSE BLOCK3设置用户自定义的 MAC 地址

  • 使用 espefuse.py burn_custom_mac 12:22:33:44:55:66 命令可向 EFUSE BLOCK3设置用户自定义的 MAC 地址,如下:

注意:EFUSE BLOCK3Bit 1 不能为 1
如何设置、查询 ESP32 设备的 MAC 地址_第4张图片

2.3 使用 esptool 工具查询 EFUSE BLOCK3 中设置的用户自定义的 MAC 地址

  • 使用 espefuse.py get_custom_mac 命令可查询用户自定义设置的 EFUSE BLOCK3 中的 MAC 地址,如下:
    在这里插入图片描述
  • 也可以使用 espefuse.py summary 命令来查询用户自定义设置的 EFUSE BLOCK3 中的 MAC 地址,如下:
    如何设置、查询 ESP32 设备的 MAC 地址_第5张图片

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(1222334455:FF)“,
    
  • 对应的是:

    >  STA(FF)
    >  AP(FF + 1 -> 00)
    >  BT(FF + 2 -> 01)
    >  ETH(FF + 3 -> 02)`(末位不进位)`
    

注:可参考 MAC Address 说明。如下:
如何设置、查询 ESP32 设备的 MAC 地址_第6张图片

  • 因此:

    "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 地址是全球唯一的,且每个批次都不相同。

你可能感兴趣的:(芯片基础,(Chip,Foundation),单片机,嵌入式硬件,环境搭建)