ESP8266 — Отправка команды сброса программного обеспечения
У меня есть ESP8266, на котором запущен код Arduino для управления устройством с двойным реле (вверх, вниз, выключение), как с помощью физического переключателя, так и с помощью команд MQTT. После установки устройства на место у меня нет доступа в случае необходимости перезагрузки (просто в целях предосторожности).
Мой обходной путь:
1) условие: функция, которая при 4 обнаружении 4 повторных нажатий кнопки ВВЕРХ - должна отправить сигнал перезагрузки.
2) сигнал перезагрузки:
void sendReset() {
Serial.println("Sending Reset command");
Serial.println(1/0);
}
Функция sendReset
фактически перезагружает устройство, и загрузка происходит по мере необходимости, НО - является ли этот способ правильным решением? действительно ли процесс загрузки загружает все службы и освобождает/память или что-то еще.... КАК НЕОБХОДИМО?
Парень
@Guy . D, 👍2
1 ответ
Лучший ответ:
1/0 — исключение (деление на ноль). Ядро Arduino esp8266 имеет программный сброс: ESP.reset()
. Вызвав эту функцию, вы получите действительный сброс.
Примечание относительно программного сброса. В esp8266 есть ошибка. Если программный сброс (или исключение) выполняется в программе, запущенной сразу после перепрошивки, плата возвращается в режим перепрошивки, поскольку мигающий флаг все еще активен. Возможно вы заметили, что после прошивки загрузчик не перезагружает плату, а выполняет прошитый код.
- Nodemcu 1.0 и режим загрузки (1,6) после мягкого сброса
- D1 mini не возобновляет работу, как ожидалось, после глубокого сна
- Трассировка стека сброса ESP12E Soft WDT ведет к библиотекам
- ESP8266 сброшен из-за подключения реле / переменного тока
- Сброс глубокого сна с датчиком удара
- ESP8266 всегда сбрасывается после 65 секунд работы
- ESP8266-01 Сброс при работе двигателя постоянного тока
- Strip.clear() не очищает/отключает полосу NeoPixel после сброса 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