У меня Arduino MKRNB 1500 (с возможностью сети LTE-M). Мой код использует веб-сокет для загрузки сообщений на сервер. Сообщения загружаются каждую секунду или около 800-1000 байт. Мой сервер веб-сокетов принимает эти сообщения (я пробовал с клиентом браузера). Но библиотека ArduinoHTTPClient WebSocketClient отказывается отправлять сообщения размером более 128 байт. Arduino просто висит с этого момента. Из-за задержки в сети это означает, что я не могу отправлять более 600 байт в секунду. Это ограничение кажется произвольным и не документировано, насколько я видел. Это может быть легко воспроизведено, используя следующий код. Более частая отправка небольших сообщений не возможна, поскольку задержка в сети LTE-M составляет около 150 мс.
Как я могу отправлять сообщения большего размера?
#include <ArduinoHttpClient.h>
#include <MKRNB.h> //For LTE-M or NB-IOT connections
#include "arduino_secrets.h"
// initialize the LTE-M library instance
NBClient nbClient;
GPRS gprs;
NB nbAccess;
char server[] = "echo.websocket.org"; // server address
const char PINNUMBER[] = "0000"; // = SIM SECRET_PINNUMBER;
int port = 80; // port 80 is the default for HTTP
WebSocketClient client = WebSocketClient(nbClient, server, port);
int count = 120;
void setup() {
Serial.begin(9600);
// LTE-M connection
Serial.println(F("Connecting to LTE-M network"));
boolean connected = false;
while (!connected) {
if ((nbAccess.begin(PINNUMBER) == NB_READY) &&
(gprs.attachGPRS() == GPRS_READY)) {
connected = true;
} else {
Serial.println("Not connected");
delay(1000);
}
}
}
void loop() {
Serial.println("starting WebSocket client");
client.begin();
while (client.connected() and count <= 1000) {
Serial.print("Sending hello ");
Serial.println(count);
// send a hello #
client.beginMessage(TYPE_TEXT);
client.print(count);
client.print(": ");
int i = 0;
while (i<= count){
client.print("X");
i++;
}
client.endMessage();
// increment count for next message
count++;
// check if a message is available to be received
int messageSize = client.parseMessage();
if (messageSize > 0) {
Serial.println("Received a message:");
Serial.println(client.readString());
}
delay(1000);
}
Serial.println("disconnected");
}