ESP8266深度睡眠唤醒后,复位时代码不执行

编程语言 2026-07-11

问题:

ESP8266会正确进入深度睡眠,唤醒时(发生复位),但唤醒后似乎没有正确执行我的代码。我只看到启动信息,但没有任何 Serial.println() 的输出。

我观察到:

唤醒后我得到:

rst cause:2
boot mode:(3,6)
  • 这表明从深睡眠的重置正在发生。

  • 然而在那之后,我的代码似乎没有运行(没有Serial输出,初次测试之外没有LED活动)。

测试代码(简化):

#include <ESP8266WiFi.h>

void setup() 
{
    Serial.begin(115200);
    delay(2000);

    Serial.println("BOOT OK");

    // LED Notification
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, LOW);
    delay(200);
    digitalWrite(LED_BUILTIN, HIGH);

    delay(2000);

    Serial.println("Going to sleep...");
    Serial.flush(); // Ensure the message is sent before sleep

    // Deep sleep for 5 seconds (5,000,000 microseconds)
    ESP.deepSleep(5e6);
}

void loop() 
{
    // Deep sleep restarts the ESP8266, so loop() is never reached.
}

硬件设置:

  • ESP8266(NodeMCU / 克隆版,CH340 USB)
  • D0(GPIO16)直接连接到RST
  • 我也尝试加了1k电阻。

我已经尝试过的做法:

  • ✔ 确认使用的是D0(GPIO16)(不是D1等)
  • ✔ 尝试有无外部电阻对RST的影响
  • ✔ 移除了所有传感器(没有DHT,未连接任何东西)
  • ✔ 使用最小测试代码(没有WiFi、没有Blynk)
  • ✔ 在启动时添加延时(2–5秒)
  • ✔ 在深睡前使用 Serial.flush()
  • ✔ 用LED闪烁替代Serial → 首次启动后只闪烁一次
  • ✔ 尝试在启动时禁用WiFi(WiFi.mode(WIFI\_OFF)
  • ✔ 检查确实会唤醒(rst cause:2
  • ✔ 不同的USB线缆和端口
  • ✔ D0与 RST之间的连线尽量短

行为:

  • 第一次启动工作正常
  • 进入深睡
  • 唤醒(重置发生,启动日志可见)
  • 之后:代码不再运行(没有Serial、没有LED闪烁)

我应该怎么做?

解决方案

尝试将睡眠命令改为 ESP.deepSleep(5e6, WAKE_RF_DISABLED);,看看突然的WiFi上电尖峰是否在代码执行前引发了电压下降崩溃(brownout)。

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章