如何知道ESP8266是否手动复位过?

How to know if the ESP8266 has been manually reset?

我有一个代码在 dsleep 模式的帮助下循环。每次 dsleep 结束时,init.lua 都会加载,然后返回睡眠状态。

现在我想在我的 ESP8266 上实现一个按钮来触发复位引脚。推送时,我的系统应该输入 "setup mode",提供 AP 进行一些设置(那部分代码没问题)。

我的问题是:我如何知道当前的 init 是手动触发的(然后进入设置模式)还是在 dsleep 后正常重启?

我猜应该有两种方法可以做到这一点:

  1. 以编程方式:以某种方式存储由 gpio15 触发器更改的元全局变量 dsleep ...
  2. 电子方式:破解一些东西以在按下重置按钮时改变一个引脚状态

有什么建议吗?

我知道一个事实,即使用 Arduino IDE 和 ESP.getResetInfoPtr(). A guy used it here

是可能的(没有任何黑客攻击)

我认为它没有在 nodemcu 固件中启用。

您可以使用node.bootreason()函数获取重启原因。

示例代码是(如果不需要额外信息,可以省略 code, reason 后的任何变量:

code, reason, exccause, epc1, epc2, epc3, excvaddr, depc = node.bootreason()

此功能由 Espressif 在他们的 SDK 中实现:

int reason = ESP.getResetInfoPtr()->reason;


switch (reason) {
    case REASON_DEFAULT_RST:
        // Normal Power up
        break;
    case REASON_WDT_RST:
        break;
    case REASON_EXCEPTION_RST:
        break;
    case REASON_SOFT_WDT_RST:
        break;
    case REASON_SOFT_RESTART:
        break;
    case REASON_DEEP_SLEEP_AWAKE:
        break;
    case REASON_EXT_SYS_RST:
        break;

    default:
        break;
    }