#include "WiFiConfig.h" #include "MQTTHandler.h" #include "LEDHandler.h" // 引入 LEDHandler #include "WatchdogHandler.h" // 引入 WatchdogHandler #define BUTTON_PIN 4 // 重置引脚4 //高低电平3 //代开发信号5 #define WIFI_CONNECT_TIMEOUT 30000 #define BUTTON_HOLD_TIME 1000 #define DEBOUNCE_DELAY 50 // LED 连接的 GPIO #define LED_PIN 5 // GPIO 5 // 数据量统计 unsigned long lastCheckTime = 0; // 上次检查时间 long unsigned int lastDebounceTimeNew = 0; int lastButtonStateNew = HIGH; bool resetModeActivated = false; int lastGPIO18State = LOW; // 保存上一次 GPIO18 的电平状态 void setup() { Serial.begin(115200); delay(1000); // 等待串口初始化完成 pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(GPIO3_PIN, INPUT); // 设置 GPIO18 为输入模式 pinMode(LED_PIN, OUTPUT); // 设置 LED 引脚为输出模式 // 初始化 LED setupLED(); // 确保调用 setupLED() 来初始化 LED // 设置 LED 亮度为 20% setFixedBrightness(5); // 20% 亮度 // 初始化看门狗 setupWatchdog(); // 加载服务器参数 loadServerParams(); // 循环连接 WiFi 和进入配置模式 while (true) { // 尝试连接 WiFi,超时时间为 30 秒 if (connectWiFiWithTimeout(30000)) { break; // 连接成功,退出循环 } else { Serial.println("[信息] Wi-Fi 连接失败,进入配置模式..."); setupWiFiConfig(); // 进入配置模式,超时时间为 60 秒 } } // 初始化 MQTT 客户端 mqttSetup(); // 尝试连接到 MQTT 服务器 if (!connectMQTT()) { Serial.println("[错误] MQTT 连接失败"); } Serial.println("[信息] 已永久存储 targetDeviceID: " + targetDeviceID); } void loop() { static unsigned long lastCheckTime = 0; // 记录上次检查时间 unsigned long currentTime = millis(); // 按钮去抖逻辑 int buttonState = digitalRead(BUTTON_PIN); if (buttonState != lastButtonStateNew) { lastDebounceTimeNew = currentTime; } if ((currentTime - lastDebounceTimeNew) > DEBOUNCE_DELAY) { if (buttonState == LOW && !resetModeActivated) { uint32_t pressStartTime = millis(); while (digitalRead(BUTTON_PIN) == LOW) { if (millis() - pressStartTime >= BUTTON_HOLD_TIME) { Serial.println("[信息] 按钮长按,进入配置模式..."); setupWiFiConfig(); resetModeActivated = true; break; } } } } lastButtonStateNew = buttonState; if (resetModeActivated) { resetModeActivated = false; return; } // 每 5 秒执行一次的任务(非阻塞) if (currentTime - lastCheckTime >= 5000) { lastCheckTime = currentTime; // 更新上次检查时间 // 处理 GPIO18 状态 handleGpio18State(); // 调用 handleGpio18State 函数 handleRelayControl(); // 开关继电器 // MQTT 客户端循环 if (!client.connected()) { if (!connectMQTT()) { Serial.println("[错误] MQTT 连接失败"); setupWiFiConfig(); // 进入配置模式,超时时间为 60 秒 } } else { mqttLoop(); // 继续 MQTT 循环 } // 喂狗操作 feedWatchdog(); addBlinkTask(1); //Serial.println("[信息] 主循环运行中……"); //Serial.println("[信息] 已永久存储 targetDeviceID: " + targetDeviceID); } // LED 闪烁逻辑 blinkLED(); // 确保 blinkLED() 被调用 }