WiFiConfig.cpp 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #include "WiFiConfig.h"
  2. #include <Arduino.h>
  3. // 持久化存储
  4. Preferences preferences;
  5. // 持久化存储的参数
  6. String deviceID; //MAC地址 id
  7. String serverAddress; //mqtt服务器地址
  8. uint16_t serverPort; //mqtt端口
  9. uint16_t otaPort; // 新增 OTA 端口号
  10. // 加载服务器参数
  11. void loadServerParams() {
  12. preferences.begin("settings", true);
  13. serverAddress = preferences.getString("serverAddress", "192.168.3.31"); //mqtt地址
  14. serverPort = preferences.getUInt("serverPort", 1883); //mqtt端口
  15. otaPort = preferences.getUInt("otaPort", 2999); // 新增 OTA 端口号,默认 2999
  16. preferences.end();
  17. Serial.println("[信息] 加载服务器参数:");
  18. Serial.println("服务器地址: " + serverAddress); // 打印服务器地址
  19. Serial.println("服务器端口: " + String(serverPort)); // 打印 MQTT 端口号
  20. Serial.println("OTA 端口: " + String(otaPort)); // 打印 OTA 端口号
  21. }
  22. // 保存参数回调
  23. void saveParamsCallback() {
  24. Serial.println("[信息] 正在保存自定义参数...");
  25. preferences.begin("settings", false);
  26. preferences.putString("serverAddress", serverAddress); // 保存 MQTT 服务器地址
  27. preferences.putUInt("serverPort", serverPort); // 保存 MQTT 端口号
  28. preferences.putUInt("otaPort", otaPort); // 保存 OTA 端口号
  29. preferences.end();
  30. Serial.println("[信息] 参数保存成功。");
  31. }
  32. // WiFi 配网功能
  33. void setupWiFiConfig() {
  34. WiFiManager wifiManager;
  35. setConstantOn(true); // LED 常亮
  36. WiFiManagerParameter customServer("server", "服务器地址", serverAddress.c_str(), 40);
  37. WiFiManagerParameter customPort("port", "服务器端口", String(serverPort).c_str(), 6);
  38. WiFiManagerParameter customOtaPort("otaPort", "OTA 端口", String(otaPort).c_str(), 6); // 新增 OTA 端口配置
  39. wifiManager.addParameter(&customServer);
  40. wifiManager.addParameter(&customPort);
  41. wifiManager.addParameter(&customOtaPort); // 添加 OTA 端口配置
  42. // 修复:捕获 customOtaPort
  43. wifiManager.setSaveParamsCallback([&customOtaPort]() {
  44. serverAddress = WiFiManagerParameter("server", "服务器地址", serverAddress.c_str(), 40).getValue();
  45. serverPort = String(WiFiManagerParameter("port", "服务器端口", String(serverPort).c_str(), 6).getValue()).toInt();
  46. otaPort = String(customOtaPort.getValue()).toInt(); // 保存 OTA 端口号
  47. });
  48. wifiManager.setConfigPortalTimeout(50); // 配置模式超时时间为 60 秒
  49. if (!wifiManager.startConfigPortal("人体存在感应器_Config")) {
  50. Serial.println("[错误] 配置模式超时或未完成配置!");
  51. feedWatchdog();
  52. setConstantOn(false); // 关闭 LED
  53. } else {
  54. serverAddress = customServer.getValue();
  55. serverPort = String(customPort.getValue()).toInt();
  56. otaPort = String(customOtaPort.getValue()).toInt(); // 保存 OTA 端口号
  57. saveParamsCallback();
  58. loadServerParams(); // 重新加载保存的服务器配置
  59. setConstantOn(false); // 关闭 LED
  60. }
  61. }
  62. // 尝试连接 WiFi
  63. bool connectWiFiWithTimeout(uint32_t timeoutMs) {
  64. Serial.println("[信息] 正在尝试连接 Wi-Fi...");
  65. WiFi.begin();
  66. uint32_t startAttemptTime = millis();
  67. feedWatchdog();
  68. while (WiFi.status() != WL_CONNECTED && (millis() - startAttemptTime) < timeoutMs) {
  69. delay(500);
  70. addBlinkTask(2);
  71. Serial.print(".");
  72. }
  73. if (WiFi.status() == WL_CONNECTED) {
  74. Serial.println("\n[信息] Wi-Fi 连接成功!");
  75. deviceID = WiFi.macAddress();
  76. Serial.println("设备 ID (MAC 地址): " + deviceID);
  77. Serial.println("IP 地址: " + WiFi.localIP().toString());
  78. return true;
  79. } else {
  80. Serial.print("\n[错误] Wi-Fi 连接超时,超时时间: ");
  81. Serial.print(timeoutMs);
  82. Serial.println(" 毫秒");
  83. setupWiFiConfig();
  84. return false;
  85. }
  86. }