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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 18:40:25