ESP8266深度睡眠唤醒后,复位时代码不执行
问题:
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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。