ESP8266基于WiFiManager设置页面添加参数并且掉电不丢失

发布于:2025-02-10 ⋅ 阅读:(43) ⋅ 点赞:(0)

默认情况下,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() {
  // 主循环
}

最后注意一下:1、自定义的参数只有WIFI信息配置正确时才会被保存;2、下次要重新配置参数时,要断开设备互联网,让其进入AP热点模式


网站公告

今日签到

点亮在社区的每一天
去签到