如何从闪存中删除 ESP32 wifi Smartconfig 凭证?

问题描述 投票:0回答:5

我正在使用 esp32 smartconfig 设置 wifi 凭证,并且它工作可靠。我希望能够从我的 arduino esp32 sketch 中删除存储在闪存中的凭据。

我能够删除凭据的唯一方法(我不确定它们存储在哪里)是使用 Windows PC 上的 esptool.py 删除整个闪存:

esptool.py --chip esp32 --port com8 erase_flash

我希望能够从我的草图中删除凭据,以便没有电脑的用户也能拥有此功能。

谢谢。

esp32
5个回答
2
投票

您尚未提供有关实现的详细信息,但如果假设采用标准 ESP-IDF 实现,则 WiFi 凭证将存储在名为“nvs”的默认 NVS 分区上的闪存中(概述)。您可以轻松地对整个分区执行擦除周期,这将擦除设备中存储的所有内容。

或者,您可以查找 ESP WiFi 组件用于存储凭据的特定 NVS 密钥并仅删除这些密钥。这有点冒险,因为他们没有开源 WiFi 驱动程序,并且可能随时更改实现。考虑到这一点,当前的 ESP IDF 4.2 似乎将这些密钥存储在命名空间“nvs.net80211”下的默认 NVS 分区中。相关的密钥名称将显示为“sta.authmode”、“sta.ssid”和“sta.pswd”。


2
投票

任何其他人都会遇到这个问题,有 esp_wifi_restore() 它将清除 wifi 凭据而不擦除 NVS。

来源 [https://github.com/espressif/esp-idf/issues/4108]


0
投票

您可以使用 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, &current_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, &current_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, &current_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, &current_conf);
}

在深入研究基本的 WiFi.begin() API 后,我找到了详细信息。


0
投票

@Henrique:目的是在不重新编译的情况下删除凭据(从标准 .HEX 文件)


-1
投票

如果您在 VSCode 上使用 PlatformIO,您可以在 Platform IO 左侧菜单中选择“Erase Flash”(当您单击“左侧”菜单中的 ET 头时)。

确保 ESP 已重置并处于闪光模式。 (与在其上放置新代码相同)

Erasing flash

© www.soinside.com 2019 - 2024. All rights reserved.