Рвется связь ESP32 по Websocket

Здравствуйте! Пытаюсь связать ESP32 по вебсокету с сервером, написанном на C#. ESP32 рвет связь с сервером каждую минуту. Все очень тестовое, ибо с этой-то проблемой никак не разберусь.
Сервер написан на C# с помощью библиотеки WebSocketSharp.

Код сервера
using System;
using WebSocketSharp;
using WebSocketSharp.Server;

namespace ESP32_websocket_server
{
    class Server
    {
        static WebSocketServer server;
        public class Echo : WebSocketBehavior
        {
            public Echo()
            {
                Protocol = "arduino";
                IgnoreExtensions = true;
            }

            protected override void OnMessage(MessageEventArgs e)
            {
                if (string.IsNullOrEmpty(e.Data)) return;

                Console.WriteLine("[" + DateTime.Now.ToString() + "] Получено от клиента: " + e.Data);
                Send(e.Data);
            }
        }

        static void Main(string[] args)
        {
            string address = "ws://192.168.*.*:*";

            server = new WebSocketServer(address);
            server.Start();
            server.AddWebSocketService<Echo>("/");
            
            Console.WriteLine("Сервер запущен на " + address + "/");

            Console.ReadKey();
            server.Stop();
        }
    }
}
Код клиента на ESP32
#include <WiFi.h>
#include <WebServer.h>
#include <WebSocketsClient.h>

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

WebSocketsClient webSocket;

void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {

  switch (type)
  {
    case WStype_DISCONNECTED:
      Serial.println("Socket Disconnected!");
      delay(2000);
      break;
    case WStype_CONNECTED:
      Serial.println("[WSc] Connected to webSocket");
      webSocket.sendTXT("Connected");
      delay(2000);
      break;
    case WStype_TEXT:
      Serial.print("[WSc] get text: ");
      Serial.println("Event");
      webSocket.sendTXT("Event");
      delay(2000);
      break;
    case WStype_BIN:
    case WStype_ERROR:
    case WStype_FRAGMENT_TEXT_START:
    case WStype_FRAGMENT_BIN_START:
    case WStype_FRAGMENT:
    case WStype_FRAGMENT_FIN:
      break;
  }
}

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

  //Подключаемся к WiFi
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED)
  {
    Serial.println('.');
    delay(1000);
  }
  Serial.println("WiFi Connected!!!");
  Serial.println(WiFi.localIP());

  //Подключаемся к сокету
  webSocket.begin("192.168.*.*", *, "/");
  webSocket.onEvent(webSocketEvent);
  webSocket.setReconnectInterval(1000);
}

void loop() {
  webSocket.loop();
  Serial.println("Loop");
  webSocket.sendTXT("Loop");
}

При обмене данными происходит разрыв с сервером ровно через 1 минуту. Я немного обезопасилась, чтобы не нервничать, видя как сервер падает в ошибку, и в библиотеке WebSocketSharp в файле Ext.cs в функции ReadBytesAsync временно добавила строку

if (!stream.CanRead) return;

потому что при разрыве соединения поток существует, но в нем ничего нет.

Вывод при обмене данными
Сервер запущен на ws://192.168.*.*:*/
[15.03.2023 15:14:36] Получено от клиента: Connected
[15.03.2023 15:14:38] Получено от клиента: Loop
[15.03.2023 15:14:38] Получено от клиента: Event
[15.03.2023 15:14:40] Получено от клиента: Loop
[15.03.2023 15:14:40] Получено от клиента: Event
[15.03.2023 15:14:42] Получено от клиента: Loop
[15.03.2023 15:14:42] Получено от клиента: Event
[15.03.2023 15:14:44] Получено от клиента: Loop
[15.03.2023 15:14:44] Получено от клиента: Event
[15.03.2023 15:14:46] Получено от клиента: Loop
[15.03.2023 15:14:46] Получено от клиента: Event
[15.03.2023 15:14:48] Получено от клиента: Loop
[15.03.2023 15:14:48] Получено от клиента: Event
[15.03.2023 15:14:50] Получено от клиента: Loop
[15.03.2023 15:14:50] Получено от клиента: Event
[15.03.2023 15:14:52] Получено от клиента: Loop
[15.03.2023 15:14:52] Получено от клиента: Event
[15.03.2023 15:14:54] Получено от клиента: Loop
[15.03.2023 15:14:54] Получено от клиента: Event
[15.03.2023 15:14:56] Получено от клиента: Loop
[15.03.2023 15:14:56] Получено от клиента: Event
[15.03.2023 15:14:58] Получено от клиента: Loop
[15.03.2023 15:14:58] Получено от клиента: Event
[15.03.2023 15:15:00] Получено от клиента: Loop
[15.03.2023 15:15:00] Получено от клиента: Event
[15.03.2023 15:15:02] Получено от клиента: Loop
[15.03.2023 15:15:02] Получено от клиента: Event
[15.03.2023 15:15:04] Получено от клиента: Loop
[15.03.2023 15:15:04] Получено от клиента: Event
[15.03.2023 15:15:06] Получено от клиента: Loop
[15.03.2023 15:15:06] Получено от клиента: Event
[15.03.2023 15:15:08] Получено от клиента: Loop
[15.03.2023 15:15:08] Получено от клиента: Event
[15.03.2023 15:15:10] Получено от клиента: Loop
[15.03.2023 15:15:10] Получено от клиента: Event
[15.03.2023 15:15:12] Получено от клиента: Loop
[15.03.2023 15:15:12] Получено от клиента: Event
[15.03.2023 15:15:14] Получено от клиента: Loop
[15.03.2023 15:15:14] Получено от клиента: Event
[15.03.2023 15:15:16] Получено от клиента: Loop
[15.03.2023 15:15:16] Получено от клиента: Event
[15.03.2023 15:15:18] Получено от клиента: Loop
[15.03.2023 15:15:18] Получено от клиента: Event
[15.03.2023 15:15:20] Получено от клиента: Loop
[15.03.2023 15:15:20] Получено от клиента: Event
[15.03.2023 15:15:22] Получено от клиента: Loop
[15.03.2023 15:15:22] Получено от клиента: Event
[15.03.2023 15:15:24] Получено от клиента: Loop
[15.03.2023 15:15:24] Получено от клиента: Event
[15.03.2023 15:15:26] Получено от клиента: Loop
[15.03.2023 15:15:26] Получено от клиента: Event
[15.03.2023 15:15:28] Получено от клиента: Loop
[15.03.2023 15:15:28] Получено от клиента: Event
[15.03.2023 15:15:30] Получено от клиента: Loop
[15.03.2023 15:15:30] Получено от клиента: Event
[15.03.2023 15:15:32] Получено от клиента: Loop
[15.03.2023 15:15:32] Получено от клиента: Event
[15.03.2023 15:15:34] Получено от клиента: Loop
[15.03.2023 15:15:34] Получено от клиента: Event
[15.03.2023 15:15:36] Получено от клиента: Loop
[15.03.2023 15:15:36] Получено от клиента: Event
[15.03.2023 15:15:42] Получено от клиента: Connected
[15.03.2023 15:15:44] Получено от клиента: Loop
[15.03.2023 15:15:44] Получено от клиента: Event
[15.03.2023 15:15:46] Получено от клиента: Loop
[15.03.2023 15:15:46] Получено от клиента: Event
[15.03.2023 15:15:48] Получено от клиента: Loop
[15.03.2023 15:15:48] Получено от клиента: Event
[15.03.2023 15:15:50] Получено от клиента: Loop
[15.03.2023 15:15:50] Получено от клиента: Event
[15.03.2023 15:15:52] Получено от клиента: Loop
[15.03.2023 15:15:52] Получено от клиента: Event
[15.03.2023 15:15:54] Получено от клиента: Loop
[15.03.2023 15:15:54] Получено от клиента: Event
[15.03.2023 15:15:56] Получено от клиента: Loop

В выводе выше, на 62-й строке разрывается связь и ESP32 подключается снова.
Подскажите, что я делаю не так, в чем моя ошибка? Может что-то проверить еще нужно? Могут быть с сетью какие-то проблемы?

Если ты кормишь ЕСП не от батарейки, то напиши такую команду для своего вифи:
после скобки в 51 строке …или еще где нибудь.

WiFi.setSleep(false);

Спасибо! Кормлю от USB. Не помогло. Были мысли что возможно она пытается энергию сохранить и в сон уходит…

это ты и отключила полностью, если написала мою команду. Теперь вифи не засыпает больше. Дальше уже - разбирайся.

Да, я уже почитала про энергопотребление. Почему-то не сработала. Еще раз попробую перепрошить. Может что-то не сработало…

К сожалению, так и не помогло… Уже не знаю где и искать решение.
Я обратила внимание, именно не WiFi в слип уходит, он-то продолжает работать. А поток сообщений на сервер приходит пустой и нет возможности его считать. Вот тут какое-то тонкое место…

вы случаем не Nginx используете как прокси?

Прокси не использую.

вкупе со стабильным временем обрыва - 1 минута - все это очень напоминает отключение по таймауту где “посередине” между клиентом и сервером. Поэтому и спросил про прокси.

Подумайте на эту тему, может что в голову придет.

Может роутер?

а если и клиент на С# - рвётся соединение?

Точно не сервер рвет. В исключение падает на строке 741 в библиотеке в файле Ext.cs. Поток, который приходит от ESP32, существует, но считать из него невозможно. Почему ESP32 может пустой поток прислать? И почему именно 1 минутой это ограничего? Прямо загадка для меня. Уже весь инет перекопала, ничего подобного не нашла.

А, в случае, когда оба на C# - все работает прекрасно. Как раз и такая задача тоже была для других целей.

Мошт пореже лупить в сеть? Все же ESP не пулемет.

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

Убрала отправку сообщений из лупа, поставила задержку в 5 секунд в событии. Все тоже самое…

может всё таки сетевые проблемы?

А как узнать? Что проверить? Где искать?

В идеале - чтобы кто-то другой на своей сети запустил. На ESP ваш исходник можно залить, а вот что с куском на Cишарп делать - я не знаю. Ставить еще какую-то IDE что-то не очень хочется. Есть вариант с более простым вариантом ответной части?

смотреть логи роутера видимо, что там девайс

Да я вот думаю может на другой сети попробовать. Надо только где-то ее найти…