ESP8266 — Отправка команды сброса программного обеспечения

У меня есть ESP8266, на котором запущен код Arduino для управления устройством с двойным реле (вверх, вниз, выключение), как с помощью физического переключателя, так и с помощью команд MQTT. После установки устройства на место у меня нет доступа в случае необходимости перезагрузки (просто в целях предосторожности).

Мой обходной путь:

1) условие: функция, которая при 4 обнаружении 4 повторных нажатий кнопки ВВЕРХ - должна отправить сигнал перезагрузки.

2) сигнал перезагрузки:

void sendReset() {
  Serial.println("Sending Reset command");
  Serial.println(1/0);
}
Функция

sendReset фактически перезагружает устройство, и загрузка происходит по мере необходимости, НО - является ли этот способ правильным решением? действительно ли процесс загрузки загружает все службы и освобождает/память или что-то еще.... КАК НЕОБХОДИМО?

Парень

, 👍2


1 ответ


Лучший ответ:

5

1/0 — исключение (деление на ноль). Ядро Arduino esp8266 имеет программный сброс: ESP.reset(). Вызвав эту функцию, вы получите действительный сброс.

Примечание относительно программного сброса. В esp8266 есть ошибка. Если программный сброс (или исключение) выполняется в программе, запущенной сразу после перепрошивки, плата возвращается в режим перепрошивки, поскольку мигающий флаг все еще активен. Возможно вы заметили, что после прошивки загрузчик не перезагружает плату, а выполняет прошитый код.

,

Привет! Да, я знаю, что это исключение, но оно вызывает сброс. Имеет ли плата Arduino функцию сброса?, @Guy . D

прочитай ответ, пожалуйста, @Juraj

Я прочитал ваш ответ до того, как он был отредактирован (только 1-й абзац). Спасибо за дополнительную информацию. Мой вопрос в комментарии был обобщенным вопросом относительно плат Arduino (например, Nano), у которых также есть команда «сброс»., @Guy . D

Нано? вы пишете код для esp8266. да, для AVR тоже есть решение для сброса. со сторожевым псом, @Juraj

Да ! мой код предназначен для esp8266, и для этого кода предназначена команда сброса, но я хотел знать, существует ли такая команда для плат Arduino. Спасибо, @Guy . D

ни одного генерала. разные ядра Arduino имеют разные решения для сброса. SAMD имеет NVIC_SystemReset(), @Juraj

В случае последовательной загрузки вам необходимо выключить и снова включить порт, чтобы снова выполнить sendReset для работы по мере необходимости. Каков обходной путь в случаях, когда OTA не позволяет выключить питание?, @Guy . D

OTA создает ESP.reset(). это хорошо. (не работает только при первом сбросе после последовательной загрузки), @Juraj