Andrey L
Member
В соседнем топике мне рассказали о ESP.getResetReason();
Гугл мне рассказал что эта функция выводит причину последней перезагрузки в человекочитабельном виде, но не сказал какие там есть ответы и в каких случаях.
Код
Результаты опытов
Причины перезагрузки модуля, а так же ответы, которые выдаёт ESP.getResetReason():
Можно ещё другие ответы от ESP.getResetReason() получить или как-нибудь ещё по-нормальному модуль перезагрузить?
Гугл мне рассказал что эта функция выводит причину последней перезагрузки в человекочитабельном виде, но не сказал какие там есть ответы и в каких случаях.
Код
Код:
// Время в микросекундах, на которое мы отправляем наш модуль "спать".
#define sleepTime 10*1e6
// Время в милисекундах, которое модуль ждёт действий пользователя
#define wakefulnessTime 30*1e3
// Пины для тестов, которые мы будем перемыкать с GND
#define resetPin D1
#define restartPin D2
void setup() {
pinMode(resetPin, INPUT_PULLUP);
pinMode(restartPin, INPUT_PULLUP);
// Без "большого серийного брата" во время тестов никак нельзя.
Serial.begin(115200);
Serial.println(""); // Первая строчка вывода - абра-кадабра
Serial.print("Причина перезагрузки: ");
Serial.println(ESP.getResetReason()); // Слушем и верим каждому его слову...
Serial.println("");
Serial.println("Ждём...");
while (millis() < wakefulnessTime) {
// Здесь может быть какой-то код, а мы просто ждём.
delay(1); // Запихнул delay(), а то без него модуль перезагружался с "Soft WDT reset" -> "Software Watchdog"
}
Serial.println("...ожидание закончилось.");
Serial.println("");
if (digitalRead(resetPin) == 0) {
ESP.reset(); // Software/System restart
} else if (digitalRead(restartPin) == 0) {
ESP.restart(); // Лучше этим перезагружать // Software/System restart
} else {
ESP.deepSleep(sleepTime); // Идём "спать" // Deep-Sleep Wake
}
}
void loop() {
// loop() остаётся пустым
}
Результаты опытов
Причины перезагрузки модуля, а так же ответы, которые выдаёт ESP.getResetReason():
- "External System" - прервалось обычное выполнение программы, но тут может быть несколько причин:
- перепрошивка модуля,
- выключение и подача питания на модуль,
- встроенная в модуль кнопка "RST",
- замыкание пина "RST" с "GND",
- так же ещё если "выключить" модуль, связав пины "EN" с "GND", потом отключить питание, отсоединить "EN" от "GND" и вновь подать питание на модуль.
- "Deep-Sleep Wake" - модуль вышел из режима "глубокого сна", но вновь нет различия каким образом он был выведен: перепрошивка модуля, выключение и подача питания на модуль, встроенная в модуль кнопка "RST", замыкание пина "RST" с "GND".
- "Power on" - выключение и включение при помощи "EN_PIN" (на NodeMCU пин "EN").
- "Software/System restart" - перезагрузка модуля при помощи команд ESP.reset() или ESP.restart().
- "Software Watchdog" - когда я заставил модуль исполнять пустой цикл.
Можно ещё другие ответы от ESP.getResetReason() получить или как-нибудь ещё по-нормальному модуль перезагрузить?