#include<WiFi.h>
#include<PubSubClient.h>

//WiFi declaration
const char* ssid = "Wokwi-GUEST";
const char* pass = "";
WiFiClient espClient;

//PubSub declaration
const char* mqtt_Server = "broker.hivemq.com";
int value = 0;
PubSubClient client(espClient);

void setup() {
  Serial.begin(115200);
  //Wifi setup
  WiFi.mode(WIFI_STA);
  wifiSetup();
  //pubsub setup
  client.setServer(mqtt_Server,1883);
  client.setCallback(callback);
}

void callback(char* topic,byte* payload,unsigned long int length)
{
  Serial.print("Message Received:["+String(topic)+"]:");
  for(int i=0;i<length;i++)
  {
    Serial.print((char)payload[i]);
  }
  Serial.println();
}

void wifiSetup(){
  Serial.print("Attempting Wifi connection");
  while(WiFi.status()!=WL_CONNECTED){
    WiFi.begin(ssid,pass);
    Serial.print(".");
    delay(5000);
  }
  Serial.println();
  Serial.println("Wifi Connected");
}

void loop() {
  if(!client.connected())
  {
    reconnect();
  }
  client.loop();
  delay(2000);
    ++value;
    Serial.println("Publish message:"+String("Training"));
    client.publish("Fdp","Training");
}

void reconnect()
{
  while(!client.connected())
  {
    Serial.println("Attempting to MQTT connection");
    String clientId = "Esp8266Client-";
    clientId+=String(random(0xffff),HEX);
    if(client.connect(clientId.c_str()))
    {
      Serial.println("Connected");
      client.publish("Fdp","Connected");
      client.subscribe("Fdp1");
    }
    else{
      Serial.println("Not connected");
      delay(5000);
    }
  }

}