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, и внезапно перестал работать.

Может быть поврежден загрузчик? Потому что он также не запускает предыдущий скетч.

, 👍0

Обсуждение

Если у вас возникли проблемы с загрузкой (что, по-видимому, означает, что вы можете _что-то_ скомпилировать), естественно сначала решить эту проблему. «не удается загрузить заголовок» звучит как проблема компиляции; поэтому я предполагаю, что вы не можете скомпилировать то, что вам конкретно нужно. И тогда у вас есть проблема со сбросом сторожевого таймера. Вы не можете работать над проблемой WDT, если не можете скомпилировать свой код, а компиляция вашего кода бесполезна, если вы не можете его загрузить. Возможно сделать ваш вопрос только о загрузке. Если можно, удалите эту часть. Убедитесь, что вы выбрали правильную плату. Re: "загрузчик поврежден": практически нет, @timemage

@timemage Я решил обе проблемы: загрузчик не работает с подключенным OLED-дисплеем, не знаю почему, раньше он работал нормально. Я исправил ошибку WDT, очистив WDT, добавив ESP.wdtFeed(); инструкция. Похоже, одна из библиотек активирует его, и его нужно вызывать чаще, но теперь он работает нормально., @E_Blue