#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoWebsockets.h>
#include "esp_websocket_client.h"
using namespace websockets;
//*******************************************************
TaskHandle_t TaskHandle = NULL;
void taskOne( void * parameter );
bool SendData(String msg);
unsigned long oldmillis = 0;byte wifi_rc=0;
WiFiClient tcp_client;
String host = "hub.yahyatnt.ir";
const char* websockets_server_host = "esp.yahyatnt.ir"; //Enter server adress
const uint16_t websockets_server_port = 80; // Enter server port
WebsocketsClient client;
const char* ssid = "Wokwi-GUEST";
const char* password = "";
//*********************************
void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
switch (event_id) {
case WEBSOCKET_EVENT_CONNECTED:
ESP_LOGI(TAG, "WEBSOCKET_EVENT_CONNECTED");
Serial.println("WEBSOCKET_EVENT_CONNECTED");
break;
case WEBSOCKET_EVENT_DISCONNECTED:
ESP_LOGI(TAG, "WEBSOCKET_EVENT_DISCONNECTED");
Serial.println("WEBSOCKET_EVENT_DISCONNECTED");
break;
case WEBSOCKET_EVENT_DATA:
ESP_LOGI(TAG, "WEBSOCKET_EVENT_DATA");
Serial.println("WEBSOCKET_EVENT_DATA");
ESP_LOGI(TAG, "Received opcode=%d", data->op_code);
Serial.printf("Received opcode=%d", data->op_code);
ESP_LOGW(TAG, "Received=%.*s", data->data_len, (char *)data->data_ptr);
Serial.printf("Received=%.*s", data->data_len, (char *)data->data_ptr);
ESP_LOGW(TAG, "Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len, data->payload_offset);
Serial.printf("Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len, data->payload_offset);
break;
case WEBSOCKET_EVENT_ERROR:
ESP_LOGI(TAG, "WEBSOCKET_EVENT_ERROR");
Serial.println("WEBSOCKET_EVENT_ERROR");
break;
}
}
void onMessageCallback(WebsocketsMessage message)
{
Serial.print("Got Message: ");
Serial.println(message.data());
}
void onEventsCallback(WebsocketsEvent event, String data)
{
if(event == WebsocketsEvent::ConnectionOpened) {
Serial.println("Connnection Opened");
} else if(event == WebsocketsEvent::ConnectionClosed) {
Serial.println("Connnection Closed");
} else if(event == WebsocketsEvent::GotPing) {
Serial.println("Got a Ping!");
} else if(event == WebsocketsEvent::GotPong) {
Serial.println("Got a Pong!");
}
}
void setup()
{
Serial.println("--------------------------------------------");
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH); delay(500) ;delay(2000);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
xTaskCreate(
taskOne, /* Task function. */
"TaskOne", /* String with name of task. */
98304, //12KB /* Stack size in bytes. */
NULL, /* Parameter passed as input of the task */
1, /* Priority of the task. */
&TaskHandle);
digitalWrite(LED_BUILTIN, LOW);
// client.onMessage(onMessageCallback);
// client.onEvent(onEventsCallback);
// client.connect(websockets_server_host, websockets_server_port, "/");
// client.send("Hello Server");
// //client.ping();
}
void loop()
{
//client.poll();
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
vTaskDelay(500/portTICK_RATE_MS);
if (millis() > oldmillis)
{
// Serial.print("sending msg .... ");
// Serial.print(millis());
// if (SendData("hi"))
// { Serial.print(" success "); }
// else { Serial.print(" faild "); }
// Serial.println(millis());
if (WiFi.getMode() == WIFI_MODE_STA && WiFi.status() != WL_CONNECTED)
{
digitalWrite(LED_BUILTIN, HIGH); delay(100);
digitalWrite(LED_BUILTIN, LOW); delay(100);
wifi_rc++;
if(wifi_rc>3) {WiFi.reconnect();wifi_rc=0;}
} oldmillis = millis() + 1000 * 5;
}
}
void taskOne( void * parameter )
{
vTaskDelay(1000/portTICK_RATE_MS);
while (true)
{
esp_websocket_client_config_t websocket_cfg = {.uri = "ws://esp.hub1.ir",};
esp_websocket_client_handle_t client = esp_websocket_client_init(&websocket_cfg);
esp_websocket_register_events(client, WEBSOCKET_EVENT_ANY, websocket_event_handler, (void *)client);
esp_websocket_client_start(client);
char data[32];
int i = 0;
while (i < 10)
{
if (esp_websocket_client_is_connected(client)) {
int len = sprintf(data, "hello %04d", i++);
ESP_LOGI(TAG, "Sending %s", data);
esp_websocket_client_send_text(client, data, len, portMAX_DELAY);
}
vTaskDelay(1000 / portTICK_RATE_MS);
}
esp_websocket_client_stop(client);
ESP_LOGI(TAG, "Websocket Stopped");
esp_websocket_client_destroy(client);
// if (!tcp_client.connected())
// {
// Serial.println(" Connecting: ");Serial.print(millis());
// tcp_client.connect(host.c_str(), 3232, 3000);
// if(tcp_client.connected())
// {Serial.print (" Success : ");Serial.println(millis());}
// else {Serial.print (" Faild : " );Serial.println(millis());}
// }
// else
// {
// //vTaskDelay(1000/portTICK_RATE_MS);
// //tcp_client.stop();
// //Serial.print ("Connected: ");Serial.println(millis());
// }
vTaskDelay(5000/portTICK_RATE_MS);
//Serial.println();
}
}
bool SendData(String msg)
{
if (tcp_client.connected())
{
if ( tcp_client.println(msg)>0)
{return true; }
return false;
}
return false;
}