ESP32 IDF写入WIFI账号和密码,读取出来联网
时间: 2024-12-29 15:36:35 浏览: 23
在ESP32的IDF(Espressif IoT Development Framework)中,你需要使用非易失性的存储,如Flash或外部EEPROM,来存储WiFi账号和密码,因为它们不适合频繁改变并且需要长期保存。你可以使用第三方库如`nvs_flash`(Non-Volatile Storage)来持久化存储数据。
以下是一个简单的步骤来设置和读取WiFi信息:
1. **设置WiFi信息**:
使用`nvs_flash_write_string`函数将WiFi账号和密码写入到非易失存储区:
```c
#include <esp_system.h>
#include <esp_nvs.h>
esp_err_t write_wifi_info(const char* ssid, const char* password) {
esp_err_t ret = esp_err_t;
nvs_handle nvs;
ret = esp_nvs_open("wifi_settings", NVS_READONLY|NVS_FILE_MODE, &nvs);
if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
ret = esp_nvs_erase_all(); // 如果已存在则先清除旧数据
if (ret == ESP_OK) {
ret = esp_nvs_open("wifi_settings", NVS_WRITE|NVS_FILE_MODE, &nvs); // 再次打开并写入
}
}
if (ret == ESP_OK) {
esp_err_t write_ret = esp_nvs_put_string(nvs, "ssid", ssid, strlen(ssid)+1);
if (write_ret == ESP_OK) {
write_ret = esp_nvs_put_string(nvs, "password", password, strlen(password)+1);
}
esp_err_t commit_ret = esp_nvs_commit(nvs);
if (commit_ret == ESP_OK) {
ESP_LOGI(TAG, "WiFi info saved successfully");
} else {
ESP_LOGE(TAG, "Error committing to NVS: %s", esp_err_to_name(commit_ret));
}
esp_nvs_close(nvs);
} else {
ESP_LOGE(TAG, "Error opening NVS: %s", esp_err_to_name(ret));
}
}
// 调用该函数存储SSID和密码
write_wifi_info("your_SSID", "your_Password");
```
2. **读取WiFi信息**:
当你需要从非易失存储加载WiFi信息时,可以这样做:
```c
void read_and_connect_wifi() {
esp_err_t ret = esp_err_t;
nvs_handle nvs;
ret = esp_nvs_open("wifi_settings", NVS_READONLY, &nvs);
if (ret == ESP_OK) {
const char* ssid = esp_nvs_get_string(nvs, "ssid", "");
const char* password = esp_nvs_get_string(nvs, "password", "");
esp_nvs_close(nvs);
if (!strcmp(ssid, "your_SSID") && !strcmp(password, "your_Password")) {
// 创建WiFi配置结构并连接
// ...
} else {
ESP_LOGE(TAG, "Invalid WiFi credentials");
}
} else {
ESP_LOGE(TAG, "Error reading from NVS: %s", esp_err_to_name(ret));
}
}
```
在实际应用中,连接WiFi通常会包含一个循环,不断尝试连接直到成功或超时。记得在操作过程中处理可能出现的错误。
阅读全文