• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Программная перезагрузка ESP8266

S_007

New member
перезагружаю модуль таким набором методов:

Код:
Serial.flush();
SPIFFS.end();
delay(1000);
ESP.restart();
модуль может пepeзaгpyзитьcя несколько раз нормально, на третий раз срабатывает wdt и модуль зависает.

В чем может быть проблема?
Существует ли решение со 100% повторяемостью?
Поделитесь опытом и если можно примером.
 

enjoynering

Well-known member
вот что вы вызываете
Код:
void EspClass::restart(void)
{
    system_restart();
    esp_yield();
}
находится тут

предположу что не хватает esp_yield(). пробуйте так

Код:
Serial.flush();
SPIFFS.end();
WiFi.persistent(false); //disable saving wifi config into SDK flash area
WiFi.forceSleepBegin(); //disable AP & station by calling "WiFi.mode(WIFI_OFF)" & put modem to sleep
delay(1000);
ESP.restart();
 

S_007

New member
попробовал ваш вариант, к сожалению сразу
Код:
ets jan 8 2013, rst cause:4, boot mode:(1,6)

ets jan 8 2013, rst cause:4, boot mode:(1,6)

wdt reset

после этого esp вешается
 

enjoynering

Well-known member
rst cause:4 = watchdog reset. что не успевает завершится.

судя потому как мы передвинули delay(1000), предположу проблема в SPIFFS. проверьте все циклы while вручную или используйте tool для нахождения таких проблем - My ESP crashes running some code. How to troubleshoot it?
 

nikolz

Well-known member
перезагружаю модуль таким набором методов:

Код:
Serial.flush();
SPIFFS.end();
delay(1000);
ESP.restart();
модуль может пepeзaгpyзитьcя несколько раз нормально, на третий раз срабатывает wdt и модуль зависает.

В чем может быть проблема?
Существует ли решение со 100% повторяемостью?
Поделитесь опытом и если можно примером.
если вас не смущает задержка на 200 мс, то можно перезагружать через deep-sleep будет работать железно.
либо можете сделать тоже самое но через pin
 

S_007

New member
enjoynering, Спасибо огромное за полезную ссылку!

если вас не смущает задержка на 200 мс, то можно перезагружать через deep-sleep будет работать железно.
либо можете сделать тоже самое но через pin
задержка в 200 мс, абсолютно не смющает, даже пусть будет хоть 5 сек.
Идея такая чтоб после внесения настроек на веб странице, по нажатию кнопки модуль перезагрузился с новыми настройками, чтоб не нажимать кнопку ресет на самом модуле, если он расположен в труднодоступном месте и не вытаскивать с розетки чтоб он правильно загрузился.

Если у вас есть код реализации с deep-sleep, поделитесь если возможно.
Через pin для меня вообще не понятно
 

nikolz

Well-known member
enjoynering, Спасибо огромное за полезную ссылку!



задержка в 200 мс, абсолютно не смющает, даже пусть будет хоть 5 сек.
Идея такая чтоб после внесения настроек на веб странице, по нажатию кнопки модуль перезагрузился с новыми настройками, чтоб не нажимать кнопку ресет на самом модуле, если он расположен в труднодоступном месте и не вытаскивать с розетки чтоб он правильно загрузился.

Если у вас есть код реализации с deep-sleep, поделитесь если возможно.
Через pin для меня вообще не понятно
это делается очень просто
рассказывают как.
-----------------------
вариант 1
вы должны соединить GPIO16 c RST
в этом случае можно использовать режим deep-sleep (на дурине не пишу поэтому могу лишь на си написать) но в инете полно примеров кода задайте в поисковике ESP8266 deep-sleep
-----------------------
вариант 2
вместо deep-sleep подаете на пин (можно на тот же GPIO16) ноль
но этот вариант более сложный так как надо сформировать из потенциала на пине импульс т е использовать RC цепочку
при этом пин тоже соединяем с RST
===============================
соединять GPIO16 с RST надо через резистор, но лучше (я так делаю) через диод шоттки
 

nikolz

Well-known member
и еще возможно Вам не нужна перезагрузка а нужно просто переустановить соединение по wifi.?
это и быстрее и лучше, чем перезагружать
 

S_007

New member
и еще возможно Вам не нужна перезагрузка а нужно просто переустановить соединение по wifi.?
Мне приходила такая мысль, но сомневался что такое сработает,
но поскольку и Вы написали, то это точно должно работать
именно так и сделаю, это самый простой для меня вариант!
Безразмерное Спасибо Вам за Ваши ответы!
 
Сверху Снизу