ESP8266 получение мягкого сброса WDT

esp8266 error

Я пытаюсь получить некоторые данные с сайта на ESP8266, но когда я снизил скорость передачи данных (потому что был шум при общении с другими устройствами) Я продолжаю получать эту ошибку

13:09:41.550 -> --------------- CUT HERE FOR EXCEPTION DECODER ---------------
13:09:42.109 -> 
13:09:42.109 -> Soft WDT reset
13:09:42.109 -> 
13:09:42.109 -> >>>stack>>>
13:09:42.388 -> 
13:09:42.388 -> ctx: cont
13:09:42.388 -> sp: 3ffffc00 end: 3fffffc0 offset: 01a0
13:09:42.621 -> 3ffffda0:  3fff03bc 00000001 3ffffe20 3fffff68  
13:09:43.179 -> 3ffffdb0:  3fff7527 00000000 32202c35 4020a95d  
13:09:43.689 -> 3ffffdc0:  3fff7334 00000001 3ffffe20 40206a60  
13:09:43.972 -> 3ffffdd0:  00f42400 5b5b92c4 3ffffe00 3fffff68  
13:09:44.484 -> 3ffffde0:  000000c8 3ffef158 3ffef158 40208080  
13:09:44.764 -> 3ffffdf0:  000000c8 3ffef158 3ffffeac 402084c1  
13:09:45.321 -> 3ffffe00:  000000c8 3ffef158 3ffffeac 40208⸮⸮⸮⸮

В середине распечатки некоторые значения

Вот мой код, я попробовал функцию yield (), но она ничего не сделала.

#include <ArduinoJson.h>
#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClientSecureBearSSL.h>
#ifndef PSTR
 #define PSTR // Make Arduino Due happy
#endif

#define PIN 12
StaticJsonDocument<2500> response;

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, 16, PIN,
  NEO_MATRIX_TOP     + NEO_MATRIX_RIGHT +
  NEO_MATRIX_ROWS + NEO_MATRIX_ZIGZAG,
  NEO_GRB            + NEO_KHZ800);
String str;


void setup(){
  matrix.begin();
  matrix.setBrightness(1);

  Serial.begin(1200);
  Serial.setTimeout(30000);
  Serial.println(F("Connecting to WIFI!"));
  WiFi.mode(WIFI_STA);
  WiFi.begin("", "");

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println(F("\n\rWiFi connected!"));

  delay(2000);
}

String getData() {
  std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure);
  client->setInsecure();
  HTTPClient https;

  if (https.begin(*client, "https://api..cz/")) {  // HTTPS
    Serial.println("[HTTPS] GET...");
    int httpCode = https.GET();

    // httpCode will be negative on error
    if (httpCode > 0) {
      // HTTP header has been send and Server response header has been handled
      Serial.printf("[HTTPS] GET... code: %d\n", httpCode);
      // file found at server?
      if (httpCode == HTTP_CODE_OK) {
        String payload = https.getString();
        yield();
        Serial.println(payload);
        
        return payload;
      }
    } else {
      Serial.printf("[HTTPS] GET... failed, error: %s\n\r", https.errorToString(httpCode).c_str());
    }

    https.end();
  } else {
    Serial.printf("[HTTPS] Unable to connect\n\r");
  }
}

void loop()
{

      const auto deser_err = deserializeJson(response, getData());
      if (deser_err) {
          Serial.print(F("Failed to deserialize, reason: \""));
          Serial.print(deser_err.c_str());
          Serial.println('"');
      } else  {
          Serial.print(F("Recevied valid json document with "));
          Serial.print(response.size());
          Serial.println(F(" elements."));
          Serial.println(F("Pretty printed back at you:"));
          serializeJsonPretty(response, Serial);
          Serial.println();
      }
      matrix.fillScreen(0);
      for (JsonObject elem : response.as<JsonArray>()) {
        int x = elem["x"]; // 2, 2, 2
        int y = elem["y"]; // 2, 2, 2
        JsonArray rgb = elem["rgb"];
        
        int rgb_0 = rgb[0]; // 255, 255, 255
        int rgb_1 = rgb[1]; // 255, 255, 255
        int rgb_2 = rgb[2]; // 255, 255, 255
        
        matrix.drawPixel(x, y, matrix.Color(rgb_0, rgb_1, rgb_2));
        Serial.println(y);
       
      }
      matrix.show();
  
  delay(10000);
}

, 👍0

Обсуждение

*Где* вы пробовали использовать функцию yield?, @Majenko

В каждой части кода которая может выполняться дольше нескольких миллисекунд, @krystof18

Почему вы используете такую низкую скорость передачи данных в бодах при последовательном соединении (Serial.begin(1200);)?, @Gerben

Потому что, когда я использовал более высокую скорость передачи данных в бодах, шум от Wi-Fi-соединения повреждал данные, отправляемые на светодиодную матрицу, @krystof18

Я уже пользовался WDT раньше, но не вижу, чтобы он активировался вашим кодом... кроме того, у меня никогда не было проблем с шумом последовательного порта на более высоких скоростях... Вы уверены, что это проблема?, @Eugenio Pace

Что ж, снижение скорости передачи данных также привело к исчезновению моих проблем с шумом, так что я думаю, что это было из-за него, @krystof18