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

时间:2015-10-06 11:21:52

标签: lua esp8266 nodemcu

我在dsleep模式的帮助下循环了代码。每次dsleep结束时,init.lua都会被加载,然后会重新进入睡眠状态。

现在我想在我的ESP8266上实现一个触发复位引脚的按钮。推送时,我的系统应进入“设置模式”,为AP做一些设置(代码部分正常)。

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

我猜这应该有两种方法:

  1. 以编程方式:以某种方式存储由dsleep ...
  2. 末尾的gpio15触发器更改的元全局变量
  3. 以电子方式:按下重置按钮
  4. 时修改一个引脚状态

    有什么建议吗?

3 个答案:

答案 0 :(得分:1)

我知道有一个事实,即使用ESP.getResetInfoPtr()的Arduino IDE可以(没有任何黑客攻击)。一个人用它here

我不认为它已在nodemcu固件中启用。

答案 1 :(得分:1)

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

示例代码是(如果您不需要其他信息,可以在code, reason之后省略任何变量:

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

答案 2 :(得分:0)

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;
    }