Как узнать, был ли ESP8266 сброшен вручную?

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

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

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

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

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

Любой совет?


person bixente57    schedule 06.10.2015    source источник
comment
Пожалуйста, выберите правильный ответ.   -  person Marcel Stör    schedule 29.02.2016


Ответы (3)


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

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

code, reason, exccause, epc1, epc2, epc3, excvaddr, depc = node.bootreason()
person Adam B    schedule 30.01.2016
comment
Есть ли определение exccause? Я мог найти код и резон, но не последний. - person dda; 30.03.2016

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

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

person seblucas    schedule 14.11.2015
comment
NodeMCU имеет это, как указано в другом ответе, node.bootreason. - person Marcel Stör; 29.02.2016

Эта функциональность реализована 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;
    }
person Ali80    schedule 05.12.2019