ESP, IoT О том как я ESP шил [ГАЙД]

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
13
0
Где-то год назад мне на озоне пришёл NodeMCU v3 с вайфаем. Попытался я его прошить, а он в последовательный порт выводит:
мусор какойто:
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

ets Jan 8 2013,rst cause:4, boot mode:(3,6)

wdt reset
load 0x4010f000, len 3424, room 16
tail 0
chksum 0x2e
load 0x3fff20b8, len 40, room 8
tail 0
chksum 0x2b
csum 0x2b
v0004a600
~ld
текст в выделенной строке, кстати, главная зараза
Обшарил этот форум, но ничего так и не нашёл.
Спустя год, когда у меня появился компьютер (до этого пользовался ноутбуком), решил вернуться к этой теме. В итоге выяснил, что этот wdt reset это сброс из-за так называемого WatchDogTimer, вшитого в само ядро ESP-шки. Работает он как-то так: раз в 5 секунд программа должна передать управление платой ядру, которое автоматически происходит после каждой итерации loop(). А если код управление ядру передать не успевает, то срабатывает WDT который сбрасывает плату, ибо думает что она зависла (а она к Wi-Fi подключается или что-то подобное). Я нашёл кучу решений, но самое оптимальное - просто увеличить WDT до большого значения. Вот так:
Кусок кода:
void setup(){
    ESP.wdtEnable(20000) //включаем wdt с задержкой 20000 мс (20 секунд), можно увеличивать
    //код
}
Или выключить его вовсе:
Кусок кода:
void setup(){
    ESP.wdtDisable() //выключаем wdt
    //код
}
Кстати, в большинстве готовых скетчей даже банального yield(); в цикле нету (а он в большинстве случаев помогает), ни то что этих нагромождений
 

SlavaZagaynov

★✩✩✩✩✩✩
27 Ноя 2019
190
36
www.youtube.com
О какой есп речь? 8266? Ну по факту она устарела давным давно и нет смысла тратить на неё время и силы. А также при долгом лупе нужно использовать многопоточность (таски) rtos, чтобы был быстрый loop для быстрых действий и уж как получится медленный таск для долгих действий. Например в лупе проверяем изменение уровней gpio, а в таске сканируем вайфай сети в течении 15 секунд и/или медленно работаем с gsm модулем.
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,614
1,560
Цифра 4 в сообщении - это аппаратный таймер вочдога.
Вы его не сможете отключить или увеличить время.

Функции типа ESP.wdtEnable и ESP.wdtDisable() управляют бесполезным программным вочдогом, у которого цифра 2.

Аппаратный всё равно через 8 секунд подвисания кода или платы перезагрузит ESP8266.



И, я так понял, прошить плату у вас всё-таки получалось?
Не работал именно прошитый код, раз вы эти строчки куда-то смогли вставить.

Вероятно, у вас была плата из партии с бракованной памятью.
Им обычно помогает добавить в код цикла loop() строчку типа delay(10);
 
Изменено:

NovinTutor

✩✩✩✩✩✩✩
19 Июл 2025
13
0
Функции типа ESP.wdtEnable и ESP.wdtDisable() управляют бесполезным программным вочдогом, у которого цифра 2.

Аппаратный всё равно через 8 секунд подвисания кода или платы перезагрузит ESP8266.
не знаю, но у меня увеличивалось (wdt не срабатывал)
И, я так понял, прошить плату у вас всё-таки получалось?
Да, прошить получилось