#include <Arduino.h>
#include <WiFi.h>
#include <WiFiClientSecure.h>
//#include <WebSocketsClient.h>
#include <WebSocketsClient_Generic.h>
WebSocketsClient webSocket;
// Replace with your network credentials
const char* ssid = "";
const char* password = "";
bool alreadyConnected = false;
/*
void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
String request;
String path;
switch(type) {
case WStype_DISCONNECTED:
Serial.printf("[WSc] Disconnected!\n");
break;
case WStype_CONNECTED:
Serial.printf("[WSc] Connected to url: %s\n", payload);
case WStype_BIN:
Serial.printf("[WSc] get binary length: %u\n", length);
// parse HTTP body
request = String((char*)payload);
path = request.substring(request.indexOf("GET") + 4, request.indexOf("HTTP") - 1);
if (path.equals("/owo")) {
webSocket.sendTXT("HTTP/1.1 200 OK\r\nServer: ESP32\r\nX-Powered-By: ESP32Proxy\r\nConnection: close\r\nContent-Type: text/plain\r\n\r\nuwu");
break;
}
webSocket.sendTXT("HTTP/1.1 200 OK\r\nServer: ESP32\r\nX-Powered-By: ESP32Proxy\r\nConnection: close\r\nContent-Type: text/html\r\n\r\nHello ESP");
break;
case WStype_ERROR:
case WStype_FRAGMENT_TEXT_START:
case WStype_FRAGMENT_BIN_START:
case WStype_FRAGMENT:
case WStype_TEXT:
case WStype_FRAGMENT_FIN:
break;
}
}
*/
void sendTXTMessage()
{
static uint64_t sendTXTMessage_timeout = 0;
uint64_t now = millis();
//KH
#define SEND_INTERVAL 30000L
// sendTXTMessage every SEND_INTERVAL (30) seconds.
if (now > sendTXTMessage_timeout)
{
String output = "vabene";
// Send event
webSocket.sendTXT(output);
// Print JSON for debugging
Serial.println(output);
sendTXTMessage_timeout = millis() + SEND_INTERVAL;
}
}
void webSocketEvent(const WStype_t& type, uint8_t * payload, const size_t& length)
{
switch (type)
{
case WStype_DISCONNECTED:
if (alreadyConnected)
{
Serial.println("[WSc] Disconnected!");
alreadyConnected = false;
}
break;
case WStype_CONNECTED:
{
alreadyConnected = true;
Serial.print("[WSc] Connected to url: ");
Serial.println((char *) payload);
// send message to server when Connected
webSocket.sendTXT("Connected");
}
break;
case WStype_TEXT:
Serial.printf("[WSc] get text: %s\n", payload);
// send message to server
//sendTXTMessage();
break;
case WStype_BIN:
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
Serial.printf("[WSc] get ping\n");
break;
case WStype_PONG:
// answer to a ping we send
Serial.printf("[WSc] get pong\n");
break;
case WStype_ERROR:
case WStype_FRAGMENT_TEXT_START:
case WStype_FRAGMENT_BIN_START:
case WStype_FRAGMENT:
case WStype_FRAGMENT_FIN:
break;
default:
break;
}
}
void setup(){
Serial.begin(115200);
// Connect to Wi-Fi
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to Wifi, Connecting to server.");
// server address, port and URL
//webSocket.begin("HOSTNAME", 80, "/proxy");
webSocket.beginSSL("echo.websocket.org", 443, "/proxy"); // WSS
// configure WS
webSocket.onEvent(webSocketEvent);
webSocket.setReconnectInterval(5000);
webSocket.enableHeartbeat(15000, 3000, 2);
// webSocket.setExtraHeaders("Token:TOKEN HERE"); // add token here
webSocket.setReconnectInterval(5000);
}
void loop() {
webSocket.loop();
sendTXTMessage();
}