改用Non-Volatile Storage (NVS) 库实现
时间: 2024-03-14 13:46:41 浏览: 94
Arduino NVS 库、 ESP32 的非易失性存储(NVS、闪存)库
好的,使用 NVS 库也可以实现将 WiFi 和 TCP 服务器的参数保存在 Flash 存储中。相比于 EEPROM 库,NVS 库更加灵活,支持更多类型的数据。以下是一个示例代码:
```c
#include <Preferences.h>
// 定义结构体
struct WifiTcpParams {
char ssid[32]; // WiFi SSID
char password[64]; // WiFi 密码
char server[64]; // TCP 服务器地址
int port; // TCP 服务器端口
};
// 定义 Preferences 对象
Preferences prefs;
// 定义结构体变量
WifiTcpParams params;
void saveParams() {
// 将结构体写入 NVS
prefs.putBytes("params", ¶ms, sizeof(params));
prefs.end();
}
void loadParams() {
// 从 NVS 中读取结构体
prefs.begin("my-app", false);
prefs.getBytes("params", ¶ms, sizeof(params));
prefs.end();
}
void setup() {
// 初始化 NVS
prefs.begin("my-app", false);
// 读取参数
loadParams();
// 连接 WiFi
WiFi.begin(params.ssid, params.password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
}
// 连接 TCP 服务器
WiFiClient client;
while (!client.connect(params.server, params.port)) {
delay(1000);
}
}
void loop() {
// 主循环
}
```
首先,我们需要定义一个结构体来保存 WiFi 和 TCP 服务器的参数。然后,我们使用 Preferences 类来将这个结构体保存在 NVS 中。在 setup 函数中,我们先初始化 Preferences 对象,然后读取参数并连接网络。需要注意的是,在保存参数之前,我们需要先连接上 WiFi,并确保 TCP 服务器可用。否则,保存的参数可能是错误的,无法正常连接网络。
相比于 EEPROM 库,NVS 库有以下优势:
- 支持更多类型的数据,如字符串、数组等;
- 可以在程序运行时随时读写 NVS,而不需要在 setup 函数中初始化;
- 写入 NVS 的数据不会影响程序的运行速度,因为它是异步写入的。
因此,如果你需要更灵活的数据存储方案,可以考虑使用 NVS 库。
阅读全文