我在dsleep
模式的帮助下循环了代码。每次dsleep
结束时,init.lua
都会被加载,然后会重新进入睡眠状态。
现在我想在我的ESP8266上实现一个触发复位引脚的按钮。推送时,我的系统应进入“设置模式”,为AP做一些设置(代码部分正常)。
我的问题是:我怎么知道当前的init是手动触发(然后进入设置模式)还是dsleep
后正常重启?
我猜这应该有两种方法:
dsleep
... 有什么建议吗?
答案 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;
}