| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | /* * WebSocketClientSocketIOack.ino * *  Created on: 20.07.2019 * */#include <Arduino.h>#include <WiFi.h>#include <WiFiMulti.h>#include <WiFiClientSecure.h>#include <ArduinoJson.h>#include <WebSocketsClient.h>#include <SocketIOclient.h>WiFiMulti WiFiMulti;SocketIOclient socketIO;#define USE_SERIAL Serialvoid socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) {    switch(type) {        case sIOtype_DISCONNECT:            USE_SERIAL.printf("[IOc] Disconnected!\n");            break;        case sIOtype_CONNECT:            USE_SERIAL.printf("[IOc] Connected to url: %s\n", payload);            // join default namespace (no auto join in Socket.IO V3)            socketIO.send(sIOtype_CONNECT, "/");            break;        case sIOtype_EVENT:        {            char * sptr = NULL;            int id = strtol((char *)payload, &sptr, 10);            USE_SERIAL.printf("[IOc] get event: %s id: %d\n", payload, id);            if(id) {                payload = (uint8_t *)sptr;            }            DynamicJsonDocument doc(1024);            DeserializationError error = deserializeJson(doc, payload, length);            if(error) {                USE_SERIAL.print(F("deserializeJson() failed: "));                USE_SERIAL.println(error.c_str());                return;            }            String eventName = doc[0];            USE_SERIAL.printf("[IOc] event name: %s\n", eventName.c_str());            // Message Includes a ID for a ACK (callback)            if(id) {                // creat JSON message for Socket.IO (ack)                DynamicJsonDocument docOut(1024);                JsonArray array = docOut.to<JsonArray>();                // add payload (parameters) for the ack (callback function)                JsonObject param1 = array.createNestedObject();                param1["now"] = millis();                // JSON to String (serializion)                String output;                output += id;                serializeJson(docOut, output);                // Send event                socketIO.send(sIOtype_ACK, output);            }        }            break;        case sIOtype_ACK:            USE_SERIAL.printf("[IOc] get ack: %u\n", length);            break;        case sIOtype_ERROR:            USE_SERIAL.printf("[IOc] get error: %u\n", length);            break;        case sIOtype_BINARY_EVENT:            USE_SERIAL.printf("[IOc] get binary: %u\n", length);            break;        case sIOtype_BINARY_ACK:            USE_SERIAL.printf("[IOc] get binary ack: %u\n", length);            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);    }    String ip = WiFi.localIP().toString();    USE_SERIAL.printf("[SETUP] WiFi Connected %s\n", ip.c_str());    // server address, port and URL    socketIO.begin("10.11.100.100", 8880, "/socket.io/?EIO=4");    // event handler    socketIO.onEvent(socketIOEvent);}unsigned long messageTimestamp = 0;void loop() {    socketIO.loop();    uint64_t now = millis();    if(now - messageTimestamp > 2000) {        messageTimestamp = now;        // creat JSON message for Socket.IO (event)        DynamicJsonDocument doc(1024);        JsonArray array = doc.to<JsonArray>();        // add evnet name        // Hint: socket.on('event_name', ....        array.add("event_name");        // add payload (parameters) for the event        JsonObject param1 = array.createNestedObject();        param1["now"] = (uint32_t) now;        // JSON to String (serializion)        String output;        serializeJson(doc, output);        // Send event        socketIO.sendEVENT(output);        // Print JSON for debugging        USE_SERIAL.println(output);    }}
 |