Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
ESP Websockets client
#1
is there an example for the ESP8266 to work as a VIRTUINO client (for data exchange between ESPs without the participation of the application)?
virtuino.blogspot.com
Reply
#2
Hi,
you can use a client example from the "WebSockets" library.

The app sends the data as a json object like {"tag":"value"}

I have modified an example, I can compile it but I don't have time to test it:
Code:
#include <Arduino.h>

#include <WiFi.h>
#include <WiFiMulti.h>

#include <WebSocketsClient.h>

WiFiMulti WiFiMulti;
WebSocketsClient webSocket;

#define USE_SERIAL Serial1

void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {

    switch(type) {
        case WStype_DISCONNECTED:
            USE_SERIAL.printf("[WSc] Disconnected!\n");
            break;
        case WStype_CONNECTED: {
            USE_SERIAL.printf("[WSc] Connected to url: %s\n", payload);

            // send message to server when Connected
            webSocket.sendTXT("Connected");
        }
            break;
        case WStype_TEXT:
            USE_SERIAL.printf("[WSc] get text: %s\n", payload);

            // send message to server
            // webSocket.sendTXT("message here");
            break;
        case WStype_BIN:
            USE_SERIAL.printf("[WSc] get binary length: %u\n", length);
            //hexdump(payload, length);

            // send data to server
            // webSocket.sendBIN(payload, length);
            break;
        case WStype_PING:
            // pong will be send automatically
            USE_SERIAL.printf("[WSc] get ping\n");
            break;
        case WStype_PONG:
            // answer to a ping we send
            USE_SERIAL.printf("[WSc] get pong\n");
            break;
    }

}

void setup() {
    // USE_SERIAL.begin(921600);
    USE_SERIAL.begin(115200);

    //Serial.setDebugOutput(true);
    USE_SERIAL.setDebugOutput(true);

    USE_SERIAL.println();
    USE_SERIAL.println();
    USE_SERIAL.println();

    for(uint8_t t = 4; t > 0; t--) {
        USE_SERIAL.printf("[SETUP] BOOT WAIT %d...\n", t);
        USE_SERIAL.flush();
        delay(1000);
    }

    WiFiMulti.addAP("SSID", "passpasspass");

    //WiFi.disconnect();
    while(WiFiMulti.run() != WL_CONNECTED) {
        delay(100);
    }

    // server address, port and URL
    webSocket.begin("192.168.0.123", 81, "/");

    // event handler
    webSocket.onEvent(webSocketEvent);

    // use HTTP Basic Authorization this is optional remove if not needed
    webSocket.setAuthorization("user", "Password");

    // try ever 5000 again if connection has failed
    webSocket.setReconnectInterval(5000);
 
  // start heartbeat (optional)
  // ping server every 15000 ms
  // expect pong from server within 3000 ms
  // consider connection disconnected if pong is not received 2 times
  webSocket.enableHeartbeat(15000, 3000, 2);

}

void loop() {
    webSocket.loop();

  //if (something happened) sendValue("myTag","Hello Virtuino");
}


//=========================================

bool sendValue(const char* tag, String value){
  String json = "{\"";
  json+=tag;
  json+="\":\"";
  json+=value;
  json+="\"}";
  Serial.println("Send: "+json);
  webSocket.sendTXT(json);
}


I think you have to replace the serial1 with the default serial if you want to see something in the terminal
Reply
#3
thank you i will try
virtuino.blogspot.com
Reply
#4
Hi. How many WebSosckets devices can the app connect to? Thanks!
Reply
#5
Hi, there is no limit. Just try it
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)