Почему "убивает" WebSocket?
- Войдите на сайт для отправки комментариев
Пт, 18/03/2016 - 12:07
Привет, для удаленного управления ардуиной хочу использовать веб сокеты.
Для отладки, играюсь с RGB лентой. Все работает прикрасно, но есть одно но, - если мы шлем данные потоком (не с задержкой в 500 и более мс.) то сервер (ардуино) разрывают соединение. Еще проблема, или баг, но он мне не нравиться. Если в цикле loop() не отправлять данные клиенту (хоть пустую строку, см 73-75 строку), то сервер так же разрывает соединние. Подскажите, как поправить эти две проблемы?
Библиотека https://github.com/ejeklint/ArduinoWebsocketServer
Вот весь скетч:
#include <SPI.h>
#include <Ethernet.h>
#define MAX_FRAME_LENGTH 64
#define PIN_R 3
#define PIN_G 5
#define PIN_B 6
#include <WebSocket.h>
#include <ArduinoJson.h>
byte mac[] = { 0x52, 0x4F, 0x43, 0x4B, 0x45, 0x54 };
byte ip[] = { 192, 168, 0 , 202 };
// Create a Websocket server
WebSocketServer wsServer;
void onConnect(WebSocket &socket) {
Serial.println("onConnect called");
}
void onData(WebSocket &socket, char* dataString, byte frameLength) {
socket.send(dataString, strlen(dataString));
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.parseObject(dataString);
if (!root.success()) {
Serial.println("parseObject() failed");
return;
}
int r = root["r"];
int g = root["g"];
int b = root["b"];
analogWrite(PIN_R, r);
analogWrite(PIN_G, g);
analogWrite(PIN_B, b);
}
void onDisconnect(WebSocket &socket) {
Serial.println("onDisconnect called");
}
void setup() {
Serial.begin(9600);
while (!Serial) {
; // wait serial port initialization
}
pinMode(PIN_R, OUTPUT);
pinMode(PIN_G, OUTPUT);
pinMode(PIN_B, OUTPUT);
Ethernet.begin(mac, ip);
wsServer.registerConnectCallback(&onConnect);
wsServer.registerDataCallback(&onData);
wsServer.registerDisconnectCallback(&onDisconnect);
wsServer.begin();
delay(100);
}
void loop() {
// Should be called for each loop.
wsServer.listen();
if (wsServer.connectionCount() > 0) {
wsServer.send("", 0);
}
delay(100);
}