如何知道ESP8266是否手动复位过?
How to know if the ESP8266 has been manually reset?
我有一个代码在 dsleep
模式的帮助下循环。每次 dsleep
结束时,init.lua
都会加载,然后返回睡眠状态。
现在我想在我的 ESP8266 上实现一个按钮来触发复位引脚。推送时,我的系统应该输入 "setup mode",提供 AP 进行一些设置(那部分代码没问题)。
我的问题是:我如何知道当前的 init 是手动触发的(然后进入设置模式)还是在 dsleep
后正常重启?
我猜应该有两种方法可以做到这一点:
- 以编程方式:以某种方式存储由 gpio15 触发器更改的元全局变量
dsleep
...
- 电子方式:破解一些东西以在按下重置按钮时改变一个引脚状态
有什么建议吗?
我知道一个事实,即使用 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;
}
我有一个代码在 dsleep
模式的帮助下循环。每次 dsleep
结束时,init.lua
都会加载,然后返回睡眠状态。
现在我想在我的 ESP8266 上实现一个按钮来触发复位引脚。推送时,我的系统应该输入 "setup mode",提供 AP 进行一些设置(那部分代码没问题)。
我的问题是:我如何知道当前的 init 是手动触发的(然后进入设置模式)还是在 dsleep
后正常重启?
我猜应该有两种方法可以做到这一点:
- 以编程方式:以某种方式存储由 gpio15 触发器更改的元全局变量
dsleep
... - 电子方式:破解一些东西以在按下重置按钮时改变一个引脚状态
有什么建议吗?
我知道一个事实,即使用 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;
}