Почему "убивает" 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); }