ESP8266 NodeMCU拉低RST引脚后WiFi连接阶段代码失效问题
问题根源分析
你当前的核心问题是将传感器直接连接到RST引脚——RST是ESP8266的硬件复位引脚,只要被拉低就会强制重启设备,完全打断当前正在执行的WiFi连接、HTTP请求等任务。所以在WiFi连接过程中关门(拉低RST),代码必然会停止运行。
解决方案
放弃用RST引脚触发唤醒/检测传感器,改用GPIO外部中断唤醒方案,既满足低功耗需求,又能保证任务执行完成后再进入休眠。
1. 硬件接线调整
把磁控开关从RST+GND改接到一个支持深度睡眠唤醒的GPIO引脚(比如GPIO14,对应NodeMCU的D5)和GND:
- 若磁控开关为常闭型(门关闭时开关闭合,门打开时断开):引脚接D5,另一端接GND,启用ESP内部上拉电阻,门打开时D5为高电平,触发唤醒。
- 若磁控开关为常开型(门关闭时断开,门打开时闭合):引脚接D5,另一端接GND,启用内部下拉电阻,门打开时D5为低电平,触发唤醒。
2. 修改后的代码示例
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> HTTPClient sender; WiFiClient wifiClient; const char* ssid = "xxx"; const char* password = "xxx"; const int sensorPin = 14; // 对应NodeMCU的D5引脚 void setup() { Serial.begin(9600); pinMode(sensorPin, INPUT_PULLUP); // 启用内部上拉电阻,适配常闭型磁控开关 // 记录当前传感器状态 int sensorState = digitalRead(sensorPin); Serial.print("当前门状态: "); Serial.println(sensorState == HIGH ? "打开" : "关闭"); WiFi.persistent(false); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); // 添加WiFi连接超时机制,避免无限等待 unsigned long connectTimeout = millis(); while (WiFi.status() != WL_CONNECTED && millis() - connectTimeout < 30000) { delay(100); Serial.print("."); } if (WiFi.status() == WL_CONNECTED) { Serial.println("\nWiFi已连接!"); if (sender.begin(wifiClient, "http://192.168.178.64:1880/update-sensor")) { int httpCode = sender.GET(); if (httpCode > 0) { if (httpCode == HTTP_CODE_OK) { String payload = sender.getString(); Serial.println("服务器响应: " + payload); } } else { Serial.printf("HTTP错误: %s\n", sender.errorToString(httpCode).c_str()); } sender.end(); } else { Serial.println("无法建立HTTP连接!"); } } else { Serial.println("\nWiFi连接超时!"); } // 配置深度睡眠:当D5引脚变为高电平时唤醒(适配常闭型开关,门打开触发) // 若为常开型开关,改为WAKEUP_GPIO_LOW ESP.deepSleep(0, WAKEUP_GPIO_HIGH); } void loop() { // 深度睡眠后不会执行到此处,留空即可 }
3. 关键修改说明
- 用GPIO引脚替代RST检测传感器,运行过程中传感器状态变化不会触发硬件复位,保证WiFi连接和HTTP请求能执行完成。
- 添加WiFi连接超时,避免因信号差导致设备一直卡在连接循环中浪费电量。
- 配置深度睡眠的GPIO唤醒条件,只有当传感器触发指定电平(比如门打开时的高电平)才唤醒设备,门关闭时不会触发唤醒,也不会打断当前任务。
备选方案(需额外硬件)
如果坚持要用RST引脚唤醒,可以添加单稳态锁存电路:传感器触发RST唤醒后,电路会保持RST引脚为高电平,直到ESP完成任务进入深度睡眠,再恢复可触发状态。但这种方案需要额外的电子元件,不如GPIO方案简洁。
内容的提问来源于stack exchange,提问作者kskskr
相关产品推荐
相关产品推荐

