2015-10-06 4 views
1

У меня есть цикл кодирования кода с помощью режима dsleep. Каждый раз, когда dsleep заканчивается, загружается init.lua, что-то снова возвращается спать.Как узнать, был ли перезагружен ESP8266 вручную?

Теперь я хочу реализовать кнопку на моем ESP8266, которая вызовет сброс. При нажатии, моя система должна войти в «режим настройки», предоставляя AP для выполнения некоторой настройки (эта часть кода в порядке).

Моя проблема: Как узнать, была ли запущена текущая инициализация вручную (затем перейти в режим настройки) или обычной перезагрузкой после dsleep?

Я предполагаю, что там должно быть два способа сделать это:

  1. программно: как-то хранить мета-глобальная переменная изменила триггер gpio15 в конце dsleep ...
  2. в электронном: взломать что-то изменить один контактный состояние при нажатии кнопки сброса

Любые советы?

+0

пожалуйста, выберите правильный ответ –

ответ

1

Вы можете получить причину перезагрузки, используя функцию node.bootreason().

Пример кода (вы можете опустить все переменные после code, reason, если вам не нужна дополнительная информация:.

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

Есть ли определение' exccause'? Я мог найти код и резонанс, но а не последним. – dda

1

Я знаю, что это возможно (без хаков) с IDE Arduino с ESP.getResetInfoPtr(). Парень использовал его here

Я не думаю, что он был включен в прошивке nodemcu.

+0

NodeMCU действительно есть, что, как указано в другой ответ, ['node.bootreason'] (http://nodemcu.readthedocs.org/en/dev/en/modules/node/#nodebootreason). –