Я получаю сброс сторожевого таймера в NodeMCU. Как навсегда отключить или остановить это?

Я использую NodeMCU для своего проекта. Сначала он работает нормально, но через несколько дней он часто сбрасывается из-за таймера сторожевого пса. Я также использовал метод Esp.wdtfeed (). Но это не работает. Не могли бы вы, пожалуйста, сказать мне, в чем именно проблема или какое-либо решение? Вот мой код:

void setup(void) {
  ESP.wdtDisable();
  ESP.wdtEnable(WDTO_8S);
  Serial.begin(9600);
  int n = WiFi.scanNetworks();
  Serial.println("");
  if (n == 0)
    Serial.println("no networks found");
  else {
    for(int i=0;i<n;i++) {
      if(WiFi.SSID(i)==ssid1) {
        WiFi.begin(ssid1,password1);
        ssid=ssid1;
      } else if(WiFi.SSID(i)==ssid2) {
        WiFi.begin(ssid2,password2);
        ssid=ssid2;
      } else if(WiFi.SSID(i)==ssid3) {
        WiFi.begin(ssid3,password3);
        ssid=ssid3;
      }
    }
  }
  display.init();
  display.flipScreenVertically();
  display.setFont(ArialMT_Plain_16);
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.drawStringMaxWidth(15,15, 128,"Display started");
  display.display();
  // Wait for connection
  display.clear();  
  int j=0;
  while(j<10) {
    display.drawStringMaxWidth(15,15, 128,"connected to");
    display.drawStringMaxWidth(15,32, 128,ssid);
    display.display();
    display.clear();
    delay(1000);
    j++;
  }
  display.drawStringMaxWidth(15,32, 128,"");
  display.display();
  Serial.print("Connected to ");
  display.clear();
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  if (mdns.begin("esp8266WebForm", WiFi.localIP())) {
    Serial.println("MDNS responder started");
  }
  server.onNotFound(handleNotFound);
  server.begin();
  Serial.print("Connect to http://esp8266WebForm.local or http://");
  Serial.println(WiFi.localIP());
  server.on("/", getvalues);
  pinMode(buzzPin,OUTPUT);
  pinMode(but,INPUT);
}

void loop(void) {
  ESP.wdtFeed();
  if((WiFi.status()== WL_DISCONNECTED)||(WiFi.status()==WL_CONNECTION_LOST)) { 
    display.drawStringMaxWidth(15,15, 128,"disconnected");
    display.display();
    int n = WiFi.scanNetworks();
    Serial.println("");
    if (n == 0)
      Serial.println("no networks found");
    else {
      for(int i=0;i<n;i++) {
        if(WiFi.SSID(i)==ssid1) {
          WiFi.begin(ssid1,password1);
          ssid=ssid1;
        } else if(WiFi.SSID(i)==ssid2) {
          WiFi.begin(ssid2,password2);
          ssid=ssid2;
        } else if(WiFi.SSID(i)==ssid3) {
          WiFi.begin(ssid3,password3);
          ssid=ssid3;
        }
      }
      int j=0;
      display.clear();
      while(j<10) {
        display.drawStringMaxWidth(15,15, 128,"connected to");
        display.drawStringMaxWidth(15,32, 128,ssid);
        display.display();
        display.clear();
        delay(1000);
        j++;
      }
      display.clear();
      display.drawStringMaxWidth(15,32, 128,"");
      display.display();
    }
  }
  getvalues();
  delay(20000);
}

, 👍0

Обсуждение

Скорее всего, вы получите некоторые комментарии по плечевой кости (например, работаете ли вы в определенной автомобильной компании). Серьезно, похоже, что сторожевой пес обнаружил проблему с вашим кодом или оборудованием. Вместо того, чтобы побеждать сторожевую собаку, большинство людей здесь предложат вам найти причину (почему ваш код не смог "пнуть собаку")., @st2000

Не могли бы вы опубликовать вывод об ошибке с консоли?, @MatsK


2 ответа


2

вот мой способ сначала найти ошибку 1.прокомментируйте сторожевого пса из кода. 2.отладьте поток кода и найдите, что он поражен. Отладка в том смысле, что поместите "Serial.print()" между вашим кодом, где вы чувствуете себя застрявшим, но здесь не отключайте своего сторожевого пса.

,

1

Спустя долгое время я увидел этот вопрос и подумал о том, чтобы ответить, так как я обнаружил проблему в то время, но не опубликовал ее здесь.

После долгой отладки я узнал, что есть строка, которую я инициализирую данными, полученными с сайта, который был переполнен за пределами памяти NodeMCU. из-за чего он выдал исключение сторожевого пса, поэтому, пожалуйста, правильно управляйте памятью, так как NodeMCU не может выполнять обработку данных и все такое.

,