ESP-IDF WiFi 配置信息的保存
ESP-IDF中,提供了一个专门的函数用来保存WiFi配置信息,这些配置信息包括SSID和密码。这些信息保存在ESP32-C3的Flash中,因此即使设备重启,这些配置信息也不会丢失。
这里的信息保存,是关于wifi的配置信息。所以需要使用 wifi
模块,也就是必须要使用 PRIV_REQUIRES esp_wifi
.
保存WiFi配置信息要点
首先需要使用
nvs_flash_init()
函数初始化NVS。 因为NVS是ESP32-C3的一个非易失性存储区域,用于保存WiFi配置信息。要初始化wifi模块。
cwifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT(); ESP_ERROR_CHECK(esp_wifi_init(&cfg));
要指定保存的位置。(RAM或是FLASH)
c//判断是否保存了wifi sta 的信息 if (esp_wifi_set_storage(WIFI_STORAGE_FLASH) != ESP_OK) { ESP_LOGE(TAG, "Failed to set storage Wi-Fi"); return ; } // WIFI_STORAGE_FLASH 或是 WIFI_STORAGE_RAM
指定保存的wifi信息的模式。(STA或是AP或是 APSTA )
c// 设置 Wi-Fi 模式为 STA ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));
这里
WIFI_MODE_STA
表示的是STA模式,也就是设备作为一个客户端连接到一个WiFi网络。还有WIFI_MODE_AP
和WIFI_MODE_APSTA
分别表示AP模式和APSTA模式。设置WiFi的SSID和密码。
cwifi_config_t wifi_config = { .sta = { .scan_method = EXAMPLE_WIFI_SCAN_METHOD, .sort_method = EXAMPLE_WIFI_CONNECT_AP_SORT_METHOD, .threshold.rssi = CONFIG_EXAMPLE_WIFI_SCAN_RSSI_THRESHOLD, .threshold.authmode = EXAMPLE_WIFI_SCAN_AUTH_MODE_THRESHOLD, }, }; // 复制 ssid 到 wifi_config.sta.ssid int len = strlen(ssid); strncpy((char *)wifi_config.sta.ssid, ssid, len); wifi_config.sta.ssid[len] = '\0'; // 复制 password 到 wifi_config.sta.password len = strlen(password); strncpy((char *)wifi_config.sta.password, password, len); wifi_config.sta.password[len] = '\0'; return esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
核心函数是
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
,其中WIFI_IF_STA
表示的是保存STA接口的配置信息。
如何读取WiFi配置信息。
- 同样读取时,也要确保 NVS 已经初始化。
- 也要初始化wifi模块。
- 也要指定保存的位置。(RAM或是FLASH)
- 使用
esp_wifi_get_config(WIFI_IF_STA, &wifi_config);
读取配置信息。
c
wifi_config_t wifi_config;
esp_wifi_get_config(WIFI_IF_STA, &wifi_config);
printf("SSID: %s\n", wifi_config.sta.ssid);
printf("Password: %s\n", wifi_config.sta.password);
读取时,也要按对应的模式进行读取。
如何清除保存的wifi配置信息。
清除wifi信息,可以使用 esp_wifi_set_config
函数,将配置信息设置为{0},即可清除保存的wifi信息。
c
wifi_config_t wifi_config = {0};
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
这样可以直接清除保存的wifi信息。