当前位置: 首页 > article >正文

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() {
  // 主循环
}

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


http://www.kler.cn/a/521157.html

相关文章:

  • GIT管理指令
  • Object类(1)
  • Qt Enter和HoverEnter事件
  • 硬件学习笔记--36 TTL、RS232、RS485相关介绍
  • Linux相关概念和易错知识点(26)(命名管道、共享内存)
  • PostGIS笔记:PostgreSQL 数据库与用户 基础操作
  • 使用ensp进行ppp协议综合实验
  • API接口开发淘宝商品数据一键解析获取商品信息编写
  • Linux Ubuntu 18.04下创建桌面快捷方式
  • 云原生:构建现代化应用的基石
  • 在亚马逊云科技上用Stable Diffusion 3.5 Large生成赛博朋克风图片(上)
  • 【深入理解FFMPEG】命令行阅读笔记
  • 基于微信小程序的外卖点餐系统设计与实现ssm+论文源码调试讲解
  • DeepSeek R1:AI领域的新突破与挑战
  • 【集合】ArrayList扩容机制的源码剖析
  • 航空开放系统架构OSA 与集成 IMA 概念解析
  • 安装 docker 详解
  • CSS all 属性
  • 单片机基础模块学习——DS1302时钟芯片
  • Linux 入门 常用指令 详细版