#include "WiFi.h"
#include "LiquidCrystal_I2C.h"
#include "PubSubClient.h"

LiquidCrystal_I2C lcd (0x27, 16,2);
char clientId[50];

WiFiClient espClient;
PubSubClient client(espClient);

String name;
String sys_name;
String processor;

void setup() 
{
  Serial.begin(115200);
  
  lcd.init ();
  lcd.backlight ();
  WiFi.mode(WIFI_STA);
  WiFi.begin("Wokwi-GUEST", "");
  
  client.setServer("broker.emqx.io", 1883);
  client.setCallback(callback); 
}

void mqttReconnect() 
{
  while (!client.connected()) 
  {
    Serial.print("Connecting..");
    if (client.connect(clientId)) 
    {
      Serial.println(" connected");
      client.subscribe("topicName/weather");
    } else 
    {
      Serial.print("failed, rc=");
      Serial.println("reconnecting in 5 seconds");
      delay(5000);
    }
  }
}

void callback(char* topic, byte* message, unsigned int length) 
{
  String stMessage;
  for (int i = 0; i < length; i++) 
  {
    stMessage += (char)message[i];
  }
  Serial.println(stMessage);
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print(stMessage);
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print(stMessage);
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print(stMessage);
}

void loop() 
{
  if (!client.connected())
  {
    mqttReconnect();
  }
  client.loop();
}