ESP8266 12E Node MCU Сброс WDT
watchdog
esp8266webserver
Здравствуйте, я пытаюсь управлять светодиодом с помощью ESP8266 12E Node MCU, скетч работает нормально в течение нескольких секунд, затем я сбрасываю WDT с этим журналом на последовательном порту.
ets Jan 8 2013,rst cause:4, boot mode:(3,6)
wdt reset
load 0x4010f000, len 3460, room 16
tail 4
chksum 0xcc
load 0x3fff20b8, len 40, room 4
tail 4
chksum 0xc9
csum 0xc9
v000453b0
~ld
Это мой код.
#include <ESP8266WiFi.h>
const char* ssid = "SSID1";
const char* password = "DummyPass";
WiFiServer server(80);
int PinLED = 2;//16;
int estado = LOW;
//****************** OLED *******************
#include <OLED_I2C.h>
OLED myOLED(D2, D1); // Не забудьте добавить контакт RESET, если он требуется вашему дисплею...
extern uint8_t SmallFont[];
extern uint8_t MediumNumbers[];
extern uint8_t BigNumbers[];
extern uint8_t TinyFont[];
uint16_t Counter=0;
unsigned long previousMillis;
const unsigned long TIME_INTERVAL = 1000;
char OledBuffer[128];
//****************** OLED *******************
void setup()
{
boolean DotStatus;
//****************** OLED *******************
previousMillis = millis();
if(!myOLED.begin(SSD1306_128X64))
while(1); // В случае, если библиотека не смогла выделить достаточно оперативной памяти для буфера дисплея...
myOLED.setBrightness(100);
myOLED.setFont(SmallFont);
myOLED.print("Sin IP asignada", CENTER, 0);
myOLED.update();
//****************** OLED *******************
pinMode(PinLED, OUTPUT);
digitalWrite(PinLED, LOW);
WiFi.begin(ssid, password);
sprintf(OledBuffer,"Conectando a la red: %s", WiFi.SSID().c_str());
myOLED.setFont(SmallFont);
myOLED.print(OledBuffer,LEFT,20);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
if(DotStatus)//Punto parpadea mientras busca señal
{
myOLED.print(" ",RIGHT,20);
}
else
{
myOLED.print(".",RIGHT,20);
}
myOLED.update();
}
sprintf(OledBuffer,"WiFi conectado a %s", WiFi.SSID().c_str());
myOLED.setFont(SmallFont);
myOLED.print(OledBuffer,LEFT,20);
myOLED.update();
server.begin();
myOLED.setFont(SmallFont);
myOLED.print("Servidor inicializado",LEFT,40);
myOLED.update();
sprintf(OledBuffer,"IP Asignada: %s", WiFi.localIP().toString().c_str());
myOLED.setFont(SmallFont);
myOLED.print(OledBuffer,LEFT,0);
}
void loop()
{
WiFiClient client = server.available();
if (client)
{
//Serial.println("новый клиент");
while(!client.available())
{
delay(1);
}
String peticion = client.readStringUntil('\r');
//Serial.println(петиция);
client.flush();
if (peticion.indexOf('/LED=ON') != -1)
{estado = LOW;}
if (peticion.indexOf('/LED=OFF') != -1)
{estado = HIGH;}
digitalWrite(PinLED, estado);
client.println("HTTP/1.1 200 OK");
client.println("");
client.println("");
client.println("");
client.println("");
client.print("<h1 align=center>CONTROL LED ");
if(estado == HIGH)
{client.print("<input type='image' src='https://i.imgur.com/00i0BdB.jpg' style='display:block; margin:auto' width='30%' onClick =location.href='/LED=ON'>");}
else
{client.print("<input type='image' src='https://i.imgur.com/uQxhFE5.jpg' style='display:block; margin:auto' width='30%' onClick =location.href='/LED=OFF'>");}
client.println("</html>");
delay(1);
//Serial.println("Завершение петиции"); // Se finaliza la petición al cliente. Se inicializa ла espera де уна nueva petición.
//Serial.println("");
}
delay(1);
}
Я понятия не имею, что я делаю неправильно, и теперь NodeMCU отказывается загружать код, COM-порт в порядке, и синий светодиод мигает, когда ПК пытается подключиться, но я получил фатальную ошибку в Журнал ПК, потому что не может загрузить заголовок. NodeMCU нормально загружал все скетчи, даже не нажимая кнопку FLASH, и внезапно перестал работать.
Может быть поврежден загрузчик? Потому что он также не запускает предыдущий скетч.
@E_Blue, 👍0
Обсуждение0
Смотрите также:
- WatchDog на Arduino Nano — не восстанавливается
- AsyncWebServer дает сброс wdt
- Сброс Arduino с помощью ПО (каждый день)
- Программный сброс AVR без ватчдога
- Я получаю сброс сторожевого таймера в NodeMCU. Как навсегда отключить или остановить это?
- Получение сброса wdt + перезагрузка каждые 5 секунд с помощью простого кода кнопки/реле
- Причина сброса wdt: 4, режим загрузки: (3,6)
- Серводвигатель и драйвер двигателя l298n не работают вместе с esp32
Если у вас возникли проблемы с загрузкой (что, по-видимому, означает, что вы можете _что-то_ скомпилировать), естественно сначала решить эту проблему. «не удается загрузить заголовок» звучит как проблема компиляции; поэтому я предполагаю, что вы не можете скомпилировать то, что вам конкретно нужно. И тогда у вас есть проблема со сбросом сторожевого таймера. Вы не можете работать над проблемой WDT, если не можете скомпилировать свой код, а компиляция вашего кода бесполезна, если вы не можете его загрузить. Возможно сделать ваш вопрос только о загрузке. Если можно, удалите эту часть. Убедитесь, что вы выбрали правильную плату. Re: "загрузчик поврежден": практически нет, @timemage
@timemage Я решил обе проблемы: загрузчик не работает с подключенным OLED-дисплеем, не знаю почему, раньше он работал нормально. Я исправил ошибку WDT, очистив WDT, добавив ESP.wdtFeed(); инструкция. Похоже, одна из библиотек активирует его, и его нужно вызывать чаще, но теперь он работает нормально., @E_Blue