Нет сервера веб-сокетов для Arduino mkr1010?

Я видел несколько интересных объяснений по использованию связи через веб-сокет на mkr 1010, но он всегда обрабатывает mkr 1010 как клиент, а сервер всегда является компьютером или каким-либо другим сервером «не-arduino». Я работаю над системой с несколькими mkr 1010 в настройке master/slave и bidi comms, т.е. я хочу использовать один из mkr в качестве сервера (выполняет расчеты и т. д.), а другой в качестве клиентов (получает результат от вычислений и ответов). отправить информацию обратного датчика). Я не нашел библиотеки или примера сервера веб-сокетов для mkr1010. Я нашел его для систем ESP. Пожалуйста, помогите, так как я пробовал свои двунаправленные сообщения с веб-клиентом и веб-сервером, используя http, но недостаточно хорошо для моего приложения (не совсем биди). большое спасибо !

, 👍0


1 ответ


1

Большинство библиотек веб-сокетов работают через клиент. Клиент является базовым классом для всех классов EthernetClient и WiFiClient.

Но почему вы хотите использовать Websocket для связи двух MCU в одной локальной сети? Веб-сокеты предназначены для связи через инфраструктуру HTTP (брандмауэры, прокси) с веб-сервером в Интернете или из браузера на веб-сервер.

Используйте базовый сокет TCP через клиент Arduino.

Объект WiFiClient является оболочкой для сокета TCP. Обычный сокет TCP подключен к IP-адресу и порту. WiFiServer запускает прослушивающий сокет на порту. Если к серверу в сокете для прослушивания обращается удаленный клиентский сокет, он создает локальный сокет, связанный с удаленным клиентским сокетом на свободном порту, и возвращает объект WiFiClient, обертывающий сокет. Все, что вы пишете или печатаете в WiFiClient, отправляется на этот удаленный сокет.

Если одна из ваших клиентских плат создает WiFiClient и подключает его к IP-адресу и порту WiFiServer на вашей «серверной» плате, вы получаете там WiFiClient из server. available(), и эти два объекта WiFiClient связаны. То, что вы пишете/печатаете на одной стороне, вы читаете только из объекта WiFiClient на другой стороне.

клиентский сокет

if (client.connect(serverIP, PORT)) {
  client.print("request\n");
  String response = client.readStringUntil('\n');
  Serial.println(response);
  client.stop();
}

на стороне сервера

WiFiClient client = server.available();
if (client && client.connected()) {
  String request = client.readStringUntil('\n');
  Serial.println(request);
  client.print("response\n");
  client.stop();
}
,

большое спасибо ! Я также использовал пример с чат-сервером, чтобы понять это!, @Majid