我正在使用 esp32 smartconfig 设置 wifi 凭证,并且它工作可靠。我希望能够从我的 arduino esp32 sketch 中删除存储在闪存中的凭据。
我能够删除凭据的唯一方法(我不确定它们存储在哪里)是使用 Windows PC 上的 esptool.py 删除整个闪存:
esptool.py --chip esp32 --port com8 erase_flash
我希望能够从我的草图中删除凭据,以便没有电脑的用户也能拥有此功能。
谢谢。
您尚未提供有关实现的详细信息,但如果假设采用标准 ESP-IDF 实现,则 WiFi 凭证将存储在名为“nvs”的默认 NVS 分区上的闪存中(概述)。您可以轻松地对整个分区执行擦除周期,这将擦除设备中存储的所有内容。
或者,您可以查找 ESP WiFi 组件用于存储凭据的特定 NVS 密钥并仅删除这些密钥。这有点冒险,因为他们没有开源 WiFi 驱动程序,并且可能随时更改实现。考虑到这一点,当前的 ESP IDF 4.2 似乎将这些密钥存储在命名空间“nvs.net80211”下的默认 NVS 分区中。相关的密钥名称将显示为“sta.authmode”、“sta.ssid”和“sta.pswd”。
任何其他人都会遇到这个问题,有 esp_wifi_restore() 它将清除 wifi 凭据而不擦除 NVS。
来源 [https://github.com/espressif/esp-idf/issues/4108]
您可以使用 ESP32 Networking API 删除它。以下是重置和管理凭据的两个示例:
#include <esp_wifi.h>
void Network_reset()
{
wifi_config_t current_conf;
esp_wifi_get_config((wifi_interface_t)ESP_IF_WIFI_STA, ¤t_conf);
memset(current_conf.sta.ssid, 0, sizeof(current_conf.sta.ssid));
memset(current_conf.sta.password, 0, sizeof(current_conf.sta.password));
esp_wifi_set_config((wifi_interface_t)ESP_IF_WIFI_STA, ¤t_conf);
}
void Set_wifi_credentials(String ssid, String pwd)
{
wifi_config_t current_conf;
esp_wifi_get_config((wifi_interface_t)ESP_IF_WIFI_STA, ¤t_conf);
memcpy(current_conf.sta.ssid, ssid.c_str(), sizeof(current_conf.sta.ssid));
memcpy(current_conf.sta.password, pwd.c_str(), sizeof(current_conf.sta.password));
esp_wifi_set_config((wifi_interface_t)ESP_IF_WIFI_STA, ¤t_conf);
}
在深入研究基本的 WiFi.begin() API 后,我找到了详细信息。
@Henrique:目的是在不重新编译的情况下删除凭据(从标准 .HEX 文件)