Получение сброса wdt + перезагрузка каждые 5 секунд с помощью простого кода кнопки/реле
У меня есть код для Arduino, который я адаптировал из простого кода с двумя кнопками и двумя реле, который я нашел в Интернете. Я просто умножил все, чтобы у меня было 5 кнопок/5 реле. Для этого я использую NodeMCU (ESP-12E).
Я ничего не менял, и теперь пытаюсь загрузить его на другие платы, и на ту же существующую плату, которую я использовал раньше. Каждый раз одни и те же результаты.
Я убедился, что Arduino обновлен, ссылка на диспетчер платы актуальна, и проверил код. Драйвера переустанавливал. Я пробовал использовать разные платы, такие как nodemcu 0.9, универсальный модуль esp8266 и т. д. Код проверен, сообщений об ошибках при загрузке нет.
Но каждый раз, когда я снова и снова получаю эту ошибку в последовательном мониторе:
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
А вот код, который я использую: (Но имейте в виду, что это РАБОТАЕТ и работало раньше)
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 1392, room 16
tail 0
chksum 0xd0
csum 0xd0
v3d128e5c
~ld
Если я погуглю эту ошибку, то получу множество результатов, которые до сих пор мне не помогли. Любая помощь или понимание того, как я могу лучше понять эту ошибку, с чего начать и что мне нужно сделать, чтобы этот «простой» скетч заработал, были бы потрясающими. Я в замешательстве, и все, что мне нужно, это простая рабочая панель освещения.
@Coltography, 👍0
Обсуждение3 ответа
Лучший ответ:
Для тех, у кого есть похожая проблема, я разобрался. GPIO 9 нельзя было использовать для реле/выхода по какой-либо причине. Хотел бы я знать, почему. Переключил на GPIO2 (D4) и перезагрузки прекратились.
Контакты 6–11 на большинстве NodeMCU используются для подключения встроенной флэш-памяти SPI и не рекомендуются для использования в качестве общих контактов ввода-вывода., @StarCat
@starcat Я понимаю это, но я просто нахожу странным, что пин 9 работал в прошлом, ничего не изменилось, а теперь волшебным образом не работает., @Coltography
@Coltography Нашел виновника. GPIO9 и GPIO10 нельзя использовать на платах, использующих доступ Quad-IO Flash SPI (для которого требуется 4 линии данных вместо 2 на Dual-IO Flash). Кажется, что некоторые платы NodeMCU действительно используют DIO, некоторые другие используют QIO — и на этих платах QIO возня с контактами Flash SPI, похоже, запускает сторожевой таймер, который затем перезагружает чип. Вот схемы с комментариями по GPIO9: https://www.esp8266.com/wiki/lib/exe/fetch.php?media=schematic_esp-12e.png — и вот проблема в ядре Arduino ESP8266: https:/ /github.com/esp8266/Arduino/issues/1446, @orithena
Первое, что вам нужно понять, это то, что установленный извне статус трех контактов GPIO определяют режим загрузки для ESP8266, используемого на вашем NodeMCU. Поэтому вы должны позаботиться о том, чтобы ваша внешняя проводка не мешала режиму загрузки:
- GPIO15/D8 при загрузке должен иметь НИЗКИЙ уровень (т. е. нельзя подключать внешние подтягивающие резисторы между D8 и 3,3 В)
- GPIO2/D4 должен быть ВЫСОКИМ при загрузке (т. е. между D4 и GND нельзя подключать внешние подтягивающие резисторы)
- GPIO0/D3 не должен иметь подтягивающих/понижающих резисторов, чтобы чип USB-to-serial мог переключаться между режимами RUN и FLASH.
Кроме того, длительное удержание GPIO16/D0 в НИЗКОМ состоянии во время работы может привести к нежелательным побочным эффектам, например срабатыванию сторожевого таймера, особенно если производитель платы решил добавить резистор пробуждения глубокого сна между D0 и RST (скорее всего, у вас есть клон NodeMCU, так что это действительно возможно).
Поэтому вполне может быть, что вам нужно изменить логику кнопки на GPIO15/D8 (т.е. подключить кнопку между D8 и 3,3 В). Также может быть, что нумерация контактов на вашем NodeMCU сбивает с толку; лучше использовать константы D0-D10.
В зависимости от типа ваших реле они могут работать и как подтягивающий/понижающий резистор, что еще больше усугубляет путаницу.
Я бы попробовал этот скетч без каких-либо подключений (без кнопок, без реле), и когда он заработает, я бы добавил кнопки и реле одну за другой, пока вы не найдете виновника. Иногда может быть достаточно поменять местами реле и кнопку, иногда нужно поменять местами логику кнопки.
Я бы сказал, что использование любого ESP8266 с таким количеством линий ввода/вывода требует очень тщательного рассмотрения того, куда что подключать. Выводы GPIO на Arduino Nano не задействованы ни в режиме загрузки, ни в сторожевом таймере, так что, по крайней мере, здесь вы не получите никаких помех.
Здравствуйте, спасибо за подробный ответ. У меня ничего не подключено к nodemcu, так что, к сожалению, исключаются какие-либо проблемы с gpio. Чего я не понимаю, так это того, как этот точный код находится на другом nodemcu без проблем, но я загрузил его на 3+ другие платы и теперь получил этот постоянный цикл сбоя / загрузки., @Coltography
Согласно
Я собирался предложить добавить сон (1). великие умы думают одинаково..., @dandavis
AFAIK yield() подразумевается при каждом повторении цикла(), @StarCat
Но почему это должно работать на другом nodemcu без этого? И куда бы я поместил часть кода delay()?, @Coltography
- Причина сброса wdt: 4, режим загрузки: (3,6)
- Как заставить 5-вольтовое реле работать с NodeMCU
- ESP8266 не подключается к Wi-Fi
- Разница между этими двумя платами NodeMCU?
- NodeMCU - использовать кнопку flash в качестве входного сигнала в loop()
- Как определить размер Flash?
- Как изменить имя модуля ESP8266-12E по умолчанию
- Простой запрос GET с ESP8266HTTPClient
это выглядит как сообщение о состоянии, а не сообщение об ошибке, @jsotola
Но при этом он перезагружается снова и снова и каждый раз показывает сообщение., @Coltography
это не означает, что это сообщение об ошибке .... это могут быть сообщения о статусе загрузки ... похоже, что чип находится в неправильном состоянии ... может быть что-то не так с вашей макетной платой, если вы ее используете ... , или сторожевой таймер установлен неправильно, @jsotola
Я думаю, что это коричневый, @Juraj
С 5 реле работало?, @orithena
@orithena да, это так. я изменил gpio9 на gpio2 и теперь он перестал перезагружаться каждые 10 секунд., @Coltography
io 9 используется QIO для флэш-памяти, @Juraj