ESP, IoT ESP32 уходит в Rebooting при сканирование портов

BSW

✩✩✩✩✩✩✩
6 Фев 2024
5
0
Доброе время суток форумчанам!

Есть devkit: ESP32-WROOM-32U.
Среда разработки: WIn10x64 + Visual Studio Code (1.86.0) + PlatformIO (Core 6.1.13).
Framework: arduino

Про свой код и как вышел на эту проблему писать нет смысла.
Так как, создал проект с простым кодом
C++:
#include <Arduino.h>

#include <WiFi.h>
#include <WebServer.h>

const char* ssid = "ssid";
const char* password = "password";

WebServer wwwserver(80);
String content;

static void handleRoot(void)
{
    content = F("<!DOCTYPE HTML>\n<html>Hello world from ESP32");
    content += F("<p>");
    content += F("</html>");

    wwwserver.send(200, F("text/html"), content);
}

void setup() {
    Serial.begin(115200);

    // Connect to WiFi network
    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);
    Serial.println("");

    // Wait for connection
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("");
    Serial.print("Connected to ");
    Serial.println(ssid);
    Serial.print("IP address: ");
    Serial.println(WiFi.localIP());

    wwwserver.on("/", handleRoot);
    wwwserver.begin();
}

void loop() {
  // put your main code here, to run repeatedly:
}
В platformio.ini все по умолчанию, и только добавлена строка "monitor_filters = esp32_exception_decoder".

И собственно при попытке просканировать порты Advanced Port Scanner-ом (TCP 1-65535), получаю перезагрузку.
Код:
E (367051) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (367051) task_wdt:  - IDLE (CPU 0)
E (367051) task_wdt: Tasks currently running:
E (367051) task_wdt: CPU 0: WiFi
E (367051) task_wdt: CPU 1: loopTask
E (367051) task_wdt: Aborting.

abort() was called at PC 0x400e90e1 on core 0


Backtrace: 0x4008384d:0x3ffbef3c |<-CORRUPTED

  #0  0x4008384d:0x3ffbef3c in panic_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/panic.c:408
И это происходит рандомно.
Может перезагрузится аж два раза за проход порт сканера, а может и 5 сканирований в подряд пройти без проблем.
Ну и пинг к устройству просто падает.

На следующий день (ну может луна в другой фазе), добавил в код WiFi.setSleep(false) и сменил точку доступа (с TPLink AP на Microtik AP).
И проблема практически ушла, но пинг по прежнему просаживается при сканирование портов.
Пока только один раз поймал reboot уже на своем проекте (который до этого перегружался практически при каждом проходе).

Вот и вопрос, мне с кристаллом не повезло или я много хочу от ESP32?

Заранее спасибо!
 

BSW

✩✩✩✩✩✩✩
6 Фев 2024
5
0
@Сотнег,
Спасибо за ответ.
Вот сегодня после смены точки доступа (физически другая AP) в тестовом проекте я не ловил перезагрузку.
А в моем проекте FreeRTOS, вроде как секция loop() не используется. Да и один раз поймал reboot и возможно даже по другой причине.
Я уже подумываю, из-за плохой связи с предыдущей WiFi-AP.
Сканирование идет по TCP протоколу, а он подразумевает ответ от клиента. А Advanced Port Scanner, быстрей всего запускает несколько потоков.
И при плохой связи идет потеря, возможно ESP32 не может ответить. Ну х/з, переполнение стека в самом потоке WiFi (на ESP32) и вследствие перезагрузка...
 

BSW

✩✩✩✩✩✩✩
6 Фев 2024
5
0
@rkit,
А прочитать пост не судьба?
Ну есле так, то в индивидуальном порядке:

E (367051) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (367051) task_wdt: - IDLE (CPU 0)
E (367051) task_wdt: Tasks currently running:
E (367051) task_wdt: CPU 0: WiFi
E (367051) task_wdt: CPU 1: loopTask
E (367051) task_wdt: Aborting.

abort() was called at PC 0x400e90e1 on core 0


Backtrace: 0x4008384d:0x3ffbef3c |<-CORRUPTED

#0 0x4008384d:0x3ffbef3c in panic_abort at /Users/ficeto/Desktop/ESP32/ESP32S2/esp-idf-public/components/esp_system/panic.c:408
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,839
592
44
И собственно при попытке просканировать порты Advanced Port Scanner-ом (TCP 1-65535), получаю перезагрузку.
но пинг по прежнему просаживается при сканирование портов
Сканируете все порты без задержек? Т.е. фактически ддосите свой камень, вот он и реагирует соответственно, не выдерживает огромной нагрузки.
Он в обычном режиме нормально работает?
Если хотите более стабильной работы, то придется отказаться от всяких ардуиновских примочек и программировать его по-нормальному, через SDK ESP-IDF, и то в этом случае нет гарантий что он не будет перезагружаться при ддосе.
 

BSW

✩✩✩✩✩✩✩
6 Фев 2024
5
0
@Геннадий П,
Спасибо за ответ.

В штатном режиме работает без нареканий.
Спасибо Вам, что подтвердили мои предположения (что камень воспринимает это как ддос и ему становится тяжко).
Да и после смены WiFi точки проблема ушла, ну кроме просадки пинга по понятной теперь причине.

Просто напугал сам факт, что можно сканером портов уложить устройство.

P.S. И полностью согласен с Вами по поводу SDK ESP-IDF, но это разные уровни С и С++. И я понимаю, что framework arduino это обертка (даже FreeRTOS не полный). Но пока не дорос. Да и подделки мои не промышленные (впрочем и ESP не для этого).
 

BSW

✩✩✩✩✩✩✩
6 Фев 2024
5
0
Всем спасибо, тему можно закрыть.
 

Геннадий П

★★★★★★✩
14 Апр 2021
1,839
592
44
И я понимаю, что framework arduino это обертка (даже FreeRTOS не полный).
На самом деле, ардуиновский фреймворк с ESP использует SDK ESP-IDF, просто в одну из задач ставит цикл loop(). Но из-за довольно сильной кастрации это все довольно сложно контролировать.