ESP8266基于WiFiManager设置页面添加参数并且掉电不丢失
默认情况下,WiFiManager 只会保存 Wi-Fi 凭据(SSID 和密码)。如果你希望保存自定义参数,可以将其存储到设备的非易失性存储器(如 EEPROM 或 SPIFFS)。
首先从网页获取数据并且通过串口打印
#include <WiFiManager.h>
WiFiManager wifiManager;
// 定义自定义参数
WiFiManagerParameter custom_mqtt_server("server", "MQTT Server", "mqtt.example.com", 40);
WiFiManagerParameter custom_mqtt_port("port", "MQTT Port", "1883", 6);
void setup() {
Serial.begin(115200);
// 添加自定义参数
wifiManager.addParameter(&custom_mqtt_server);
wifiManager.addParameter(&custom_mqtt_port);
if (!wifiManager.autoConnect("AutoConnectAP")) {
Serial.println("Failed to connect and hit timeout");
ESP.restart();
}
Serial.println("Connected to Wi-Fi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// 获取自定义参数值
String mqttServer = custom_mqtt_server.getValue();
String mqttPort = custom_mqtt_port.getValue();
Serial.print("MQTT Server: ");
Serial.println(mqttServer);
Serial.print("MQTT Port: ");
Serial.println(mqttPort);
}
void loop() {
// 主循环
}
然后实现参数掉电不丢失
#include <WiFiManager.h>
#include <FS.h>
#include <ArduinoJson.h>
// 定义自定义参数
WiFiManagerParameter custom_mqtt_server("server", "MQTT Server", "mqtt.example.com", 40);
WiFiManagerParameter custom_mqtt_port("port", "MQTT Port", "1883", 6);
// 保存参数到 SPIFFS
void saveCustomParameters() {
// 创建 JSON 对象
StaticJsonDocument<200> jsonDoc;
jsonDoc["mqtt_server"] = custom_mqtt_server.getValue();
jsonDoc["mqtt_port"] = custom_mqtt_port.getValue();
// 打开文件
File file = SPIFFS.open("/config.json", "w");
if (!file) {
Serial.println("Failed to open file for writing");
return;
}
// 将 JSON 对象写入文件
serializeJson(jsonDoc, file);
file.close();
Serial.println("Parameters saved to SPIFFS");
}
// 从 SPIFFS 加载参数
void loadCustomParameters() {
// 打开文件
File file = SPIFFS.open("/config.json", "r");
if (!file) {
Serial.println("Failed to open file for reading");
return;
}
// 解析 JSON 对象
StaticJsonDocument<200> jsonDoc;
DeserializationError error = deserializeJson(jsonDoc, file);
if (error) {
Serial.println("Failed to parse JSON file");
return;
}
// 设置自定义参数的值
custom_mqtt_server.setValue(jsonDoc["mqtt_server"], 40);
custom_mqtt_port.setValue(jsonDoc["mqtt_port"], 6);
file.close();
Serial.println("Parameters loaded from SPIFFS");
}
void setup() {
Serial.begin(115200);
// 初始化 SPIFFS
if (!SPIFFS.begin()) {
Serial.println("Failed to mount SPIFFS");
return;
}
// 加载自定义参数
loadCustomParameters();
// 创建 WiFiManager 对象
WiFiManager wifiManager;
// 可选:重置保存的 Wi-Fi 配置(用于测试)
//wifiManager.resetSettings();
// 添加自定义参数
wifiManager.addParameter(&custom_mqtt_server);
wifiManager.addParameter(&custom_mqtt_port);
// 启动配置模式
if (!wifiManager.autoConnect("MyESP")) {
Serial.println("Failed to connect and hit timeout");
ESP.restart();
}
// 连接成功
Serial.println("Connected to Wi-Fi!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
// 保存自定义参数
saveCustomParameters();
// 打印参数值
String mqttServer = custom_mqtt_server.getValue();
String mqttPort = custom_mqtt_port.getValue();
Serial.print("MQTT Server: ");
Serial.println(mqttServer);
Serial.print("MQTT Port: ");
Serial.println(mqttPort);
}
void loop() {
// 主循环
}