Ограничение подключений EthernetClient
Я работаю над проектом, в котором мне нужно иметь несколько подключений EthernetClient к разным серверам. Все эти соединения должны поддерживаться одновременно, и я имею в виду, что я не могу остановить или закрыть один из этих клиентов перед запуском другого.
В настоящее время я могу одновременно поддерживать два успешных соединения EthernetClient. После этого ни один последующий клиент не сможет подключиться ни к одному серверу. Следующий код выполняется на ESP32-S3 с модулем Ethernet W5500.
#include <Arduino.h>
#include <EthernetLarge.h>
#include <SPI.h>
#define SPI_MOSI 35
#define SPI_MISO 37
#define SPI_SCK 36
#define ETHERNET_CS 38
SPIClass SPI_Ethernet;
EthernetClient ethCli1;
EthernetClient ethCli2;
EthernetClient ethCli3;
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
void setup()
{
Serial0.begin(115200);
SPI_Ethernet.begin(SPI_SCK, SPI_MISO, SPI_MOSI, ETHERNET_CS);
pinMode(39, OUTPUT);
pinMode(47, OUTPUT);
digitalWrite(47, HIGH);
digitalWrite(39, LOW);
delay(500);
digitalWrite(39, HIGH);
Ethernet.init(ETHERNET_CS);
Ethernet.begin(mac);
Serial0.println(Ethernet.localIP());
if( !(ethCli1.connect("httpbin.org", 80)) )
Serial0.println("connection > 1 < failed");
else
Serial0.println("connection > 1 < succeeded");
if( !(ethCli2.connect("httpbin.org", 80)) )
Serial0.println("connection > 2 < failed");
else
Serial0.println("connection > 2 < succeeded");
if( !(ethCli3.connect("httpbin.org", 80)) )
Serial0.println("connection > 3 < failed");
else
Serial0.println("connection > 3 < succeeded");
}
void loop()
{
}
Какие результаты:
connection > 1 < succeeded
connection > 2 < succeeded
connection > 3 < failed
В этом коде я использую библиотеку Ethernet OPEnSLab-OSU/EthernetLarge. Но я также попытался запустить его с помощью Ethernet.h с тем же результатом. В документации W5500 мне удалось найти информацию о том, что он может поддерживать до 8 открытых соединений, но мне не удалось выяснить, есть ли у ESP32 какие-либо ограничения, например максимальное количество одновременных подключений. Можно ли одновременно поддерживать более двух соединений?
Короче:
- Я использую ESP32-S3 с модулем Ethernet W5500.
- Я могу сохранить два одновременных подключения и закрыть предыдущие подключения перед открытием нового, но в моем проекте мне нужно сохранить как минимум три одновременных подключения.
- При переходе с библиотеки Ethernet OPEnSLab-OSU/EthernetLarge на Ethernet.h результат был тот же.
- Добавление задержки между подключениями не сработало.
- В коде примера все соединения устанавливаются с одним и тем же сервером, но в моем официальном проекте эти соединения устанавливаются с разными серверами. В любом случае результат будет одинаковым.
- В документации W5500 указано, что он может поддерживать до 8 одновременных подключений. Мне не удалось выяснить, есть ли в ESP32 какие-либо ограничения на количество одновременных подключений.
@Mazaetos, 👍2
1 ответ
Лучший ответ:
Библиотека OPEnSLab-OSU/EthernetLarge
по умолчанию определяет для MAX_SOCK_NUM
значение 2
. Увеличение этого значения позволило мне поддерживать больше одновременных подключений.
Что касается библиотеки Ethernet.h
, я также проверил ее, и она уже установила для MAX_SOCK_NUM
значение 8
. Повторное тестирование кода с его помощью также позволило мне поддерживать больше одновременных соединений. Почему мне не удавалось сохранить их раньше при использовании Ethernet.h
, для меня до сих пор загадка.
- Использование AysncUDPMessage для ESP32 для отправки строковых данных
- Есть ли библиотека Arduino, которая использует ARP для получения списка подключенных устройств в сети?
- Как использовать внешний кристалл 32 кГц для ESP32 S3 с Arduino IDE?
- Использование c_str() для String для IPAddress с NTPClient дает неправильные значения
- Можно ли свободно использовать UART0 при подключении ESP32 s3 через USB (D+, D-)?
- Почему Arduino IDE выдает неправильное имя платы для ESP32 S3
- Heltec WiFi LoRa 32 (V3) - кодирует/декодирует пакеты в двоичный код (сообщение становится короче)
- Сжатие изображения в оттенках серого с помощью ESP32-S3-WROOM Freenove