// Wifi configuration
#include <WiFi.h>
#include <WiFiMulti.h>
#include <WiFiClientSecure.h>
WiFiMulti WiFiMulti;
WiFiClient client;
// SocketIO configuration
#include <WebSocketsClient.h>
#include <SocketIOclient.h>
char host[] = "192.168.8.100"; // SocketIO Server Address
int port =3000; // SocketIO Port Address
SocketIOclient socketIO;
#include <ArduinoJson.h>
unsigned long previousMillis = 0;
unsigned long currentMillis;
unsigned long interval=1000; //interval for sending data to the websocket server in ms
void setup() {
Serial.begin(9600);
Serial.setDebugOutput(true);
WiFiMulti.addAP("", "");
//WiFi.disconnect();
while(WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
String ip = WiFi.localIP().toString();
Serial.printf("[SETUP] WiFi Connected %s\n", ip.c_str());
// server address, port and URL
socketIO.begin(host, port);
// event handler
socketIO.onEvent(socketIOEvent);
}
void loop() {
socketIO.loop();
currentMillis=millis();
// Send data each second
if (abs((long)(currentMillis - previousMillis)) >= interval) {
previousMillis = currentMillis;
// 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("message");
// add payload (parameters) for the event
JsonObject param1 = array.createNestedObject();
// JSON to String (serializion)
String output;
serializeJson(doc, output);
// Send event
socketIO.sendEVENT(output);
// Print JSON for debugging
Serial.println("bdfhgdjhgjhgsdjfgjsd" + output);
}
}
void hexdump(const void mem, uint32_t len, uint8_t cols = 16) {
const uint8_t src = (const uint8_t*) mem;
Serial.printf("\n[HEXDUMP] Address: 0x%08X len: 0x%X (%d)", (ptrdiff_t)src, len, len);
for(uint32_t i = 0; i < len; i++) {
if(i % cols == 0) {
Serial.printf("\n[0x%08X] 0x%08X: ", (ptrdiff_t)src, i);
}
Serial.printf("%02X ", *src);
src++;
}
Serial.printf("\n");
}
void socketIOEvent(socketIOmessageType_t type, uint8_t * payload, size_t length) {
switch(type) {
case sIOtype_DISCONNECT:
//
Serial.printf("[IOc] Disconnected!\n");
break;
case sIOtype_CONNECT:
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:
Serial.printf("[IOc] get event: %s\n", payload);
break;
case sIOtype_ACK:
Serial.printf("[IOc] get ack: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_ERROR:
Serial.printf("[IOc] get error: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_EVENT:
Serial.printf("[IOc] get binary: %u\n", length);
hexdump(payload, length);
break;
case sIOtype_BINARY_ACK:
Serial.printf("[IOc] get binary ack: %u\n", length);
hexdump(payload, length);
break;
}
}