WiFiConfig.cpp 3.0 KB

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