#include "WiFiConfig.h" #include // 持久化存储 Preferences preferences; // 持久化存储的参数 String deviceID; //MAC地址 id String serverAddress; //mqtt服务器地址 uint16_t serverPort; //mqtt端口 uint16_t otaPort; // 新增 OTA 端口号 // 加载服务器参数 void loadServerParams() { preferences.begin("settings", true); serverAddress = preferences.getString("serverAddress", "192.168.3.31"); //mqtt地址 serverPort = preferences.getUInt("serverPort", 1883); //mqtt端口 otaPort = preferences.getUInt("otaPort", 2999); // 新增 OTA 端口号,默认 2999 preferences.end(); Serial.println("[信息] 加载服务器参数:"); Serial.println("服务器地址: " + serverAddress); // 打印服务器地址 Serial.println("服务器端口: " + String(serverPort)); // 打印 MQTT 端口号 Serial.println("OTA 端口: " + String(otaPort)); // 打印 OTA 端口号 } // 保存参数回调 void saveParamsCallback() { Serial.println("[信息] 正在保存自定义参数..."); preferences.begin("settings", false); preferences.putString("serverAddress", serverAddress); // 保存 MQTT 服务器地址 preferences.putUInt("serverPort", serverPort); // 保存 MQTT 端口号 preferences.putUInt("otaPort", otaPort); // 保存 OTA 端口号 preferences.end(); Serial.println("[信息] 参数保存成功。"); } // WiFi 配网功能 void setupWiFiConfig() { WiFiManager wifiManager; setConstantOn(true); // LED 常亮 // 创建 WiFiManagerParameter 对象 WiFiManagerParameter customServer("server", "服务器地址", serverAddress.c_str(), 40); WiFiManagerParameter customPort("port", "服务器端口", String(serverPort).c_str(), 6); WiFiManagerParameter customOtaPort("otaPort", "OTA 端口", String(otaPort).c_str(), 6); // 新增 OTA 端口配置 // 添加参数 wifiManager.addParameter(&customServer); wifiManager.addParameter(&customPort); wifiManager.addParameter(&customOtaPort); // 添加 OTA 端口配置 // 设置保存参数回调 wifiManager.setSaveParamsCallback([&customServer, &customPort, &customOtaPort]() { // 直接从已有的 WiFiManagerParameter 对象中获取值 serverAddress = customServer.getValue(); serverPort = String(customPort.getValue()).toInt(); otaPort = String(customOtaPort.getValue()).toInt(); // 保存 OTA 端口号 // 打印调试信息 Serial.println("[调试] 保存参数:"); Serial.println("服务器地址: " + serverAddress); Serial.println("服务器端口: " + String(serverPort)); Serial.println("OTA 端口: " + String(otaPort)); // 调用保存参数函数 saveParamsCallback(); }); // 设置配置模式超时时间 wifiManager.setConfigPortalTimeout(50); // 配置模式超时时间为 60 秒 // 启动配置模式 if (!wifiManager.startConfigPortal("人体存在感应器_Config")) { Serial.println("[错误] 配置模式超时或未完成配置!"); feedWatchdog(); setConstantOn(false); // 关闭 LED } else { // 配置成功,保存参数 serverAddress = customServer.getValue(); serverPort = String(customPort.getValue()).toInt(); otaPort = String(customOtaPort.getValue()).toInt(); // 保存 OTA 端口号 // 调用保存参数函数 saveParamsCallback(); // 重新加载保存的服务器配置 loadServerParams(); // 关闭 LED setConstantOn(false); } } // 尝试连接 WiFi bool connectWiFiWithTimeout(uint32_t timeoutMs) { Serial.println("[信息] 正在尝试连接 Wi-Fi..."); WiFi.begin(); uint32_t startAttemptTime = millis(); feedWatchdog(); while (WiFi.status() != WL_CONNECTED && (millis() - startAttemptTime) < timeoutMs) { delay(500); addBlinkTask(2); Serial.print("."); } if (WiFi.status() == WL_CONNECTED) { Serial.println("\n[信息] Wi-Fi 连接成功!"); deviceID = WiFi.macAddress(); Serial.println("设备 ID (MAC 地址): " + deviceID); Serial.println("IP 地址: " + WiFi.localIP().toString()); return true; } else { Serial.print("\n[错误] Wi-Fi 连接超时,超时时间: "); Serial.print(timeoutMs); Serial.println(" 毫秒"); setupWiFiConfig(); return false; } }