You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32 Arduino项目:夜间断电后LED无法自动恢复点亮问题求助

问题分析

你现在的代码逻辑是只在19:00:00和06:00:00这两个精确到秒的时间点执行开关灯操作。一旦夜间断电重启,设备错过了19:00的触发时刻,就不会主动判断当前是否处于夜间时段,自然不会点亮LED,只会等第二天6:00执行关灯动作。

修复方案

核心思路是每次获取到NTP时间后,直接判断当前是否在「19:00-次日06:00」区间内,实时同步LED状态,而不是只依赖整点触发。修改后的完整代码如下:

#include <NTPClient.h>
#include <WiFiUdp.h>
#include <WiFi.h>

#define LED 2
#define command 4
#define sensor 19

const char* ssid = "SSID_NETWORK";
const char* password = "PASS_NETWORK";

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");

// 根据当前时间设置LED和传感器状态
void setNightModeState() {
  int currentHour = timeClient.getHours();
  // 判断是否处于夜间时段:19点到23点,或者0点到5点
  bool isNightTime = (currentHour >= 19 && currentHour <= 23) || (currentHour >= 0 && currentHour < 6);
  
  if (isNightTime) {
    digitalWrite(LED, HIGH);
    digitalWrite(sensor, HIGH);
  } else {
    digitalWrite(LED, LOW);
    digitalWrite(sensor, LOW);
  }
}

void setup() {
    Serial.begin(115200);
    WiFi.begin(ssid, password);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("Conectando ao WiFi...");
    }
    Serial.println("Conectado ao WiFi.");
    digitalWrite(LED, HIGH);
    delay(100);
    digitalWrite(LED, LOW);

    timeClient.begin();
    timeClient.setTimeOffset(-3 * 3600); // 巴西时区GMT-3
    
    // 等待NTP时间同步完成
    while(!timeClient.update()) {
      timeClient.forceUpdate();
      delay(1000);
      Serial.println("Sincronizando horário NTP...");
    }

    pinMode (LED, OUTPUT);
    pinMode (sensor, OUTPUT);
    pinMode (command, OUTPUT);
    
    // 初始化时立即设置正确的夜间模式状态
    setNightModeState();
}

void loop() {
    // 每10秒更新一次时间并检查状态(避免过于频繁)
    if(timeClient.update()) {
      Serial.println(timeClient.getFormattedTime());
      setNightModeState();
    }
    
    delay(10000); // 10秒延迟,减少资源消耗
}
关键改动说明
  1. 封装状态设置逻辑:新增setNightModeState函数,把时段判断和硬件状态设置整合在一起,代码更简洁易维护
  2. 强制NTP同步:初始化阶段等待时间同步完成,避免设备重启后因时间未就绪导致状态错误
  3. 实时时段判断:不再依赖精确整点触发,只要当前时间在夜间区间,就保持LED点亮;反之则关闭,彻底解决重启后不亮灯的问题
  4. 优化资源占用:把原有的100毫秒延迟改为10秒,减少串口打印和NTP请求频率,降低ESP32的资源消耗

内容的提问来源于stack exchange,提问作者Bruno Barreto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 15:54:57