#include <WiFi.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 20, 4);
const char* ssid = "Wokwi-GUEST";
const char* password = "";
String payload;
String channel = "ESP32MM";
const char* topic1 = "ESP32MM/led";
const char* topic2 = "ESP32MM/Temperature";
const char* topic3 = "ESP32MM/humidity";
const char* server = "";
const char* username = "";
const char* pw = "";
char ClientID[] = "ds-wokwi";
const int port = 1883;
WiFiClient client;
PubSubClient clientmqtt(server, 1883, client);
// Handle a received message
void callback(char* topic, byte* payload, unsigned int length) {
LCD.setCursor(0, 0);
LCD.println("Callback executed");
Serial.println("MQTT callback executed");
Serial.print("topic:");
Serial.println(topic);
char message[length + 1];
for (int i = 0; i < length; i++)
message[i] = (char)payload[i];
Serial.print("received Json:");
Serial.println(message);
StaticJsonDocument<1024> doc;
deserializeJson(doc, message);
if (strcmp(topic, "ESP32MM/led") == 0) {
boolean parsedPayload = doc["data"];
digitalWrite(32, parsedPayload);
LCD.setCursor(0, 1);
LCD.println("Led State is: ");
LCD.println(parsedPayload);
} else if (strcmp(topic, "ESP32MM/Temperature") == 0) {
float parsedPayload1 = doc["data"];
LCD.setCursor(0, 2);
LCD.println("Temp= ");
LCD.println(parsedPayload1);
} else if (strcmp(topic, "ESP32MM/humidity") == 0) {
float parsedPayload2 = doc["data"];
LCD.setCursor(0, 3);
LCD.println("Hum = ");
LCD.println(parsedPayload2);
}
}
void setup() {
LCD.init();
pinMode(32, OUTPUT);
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
clientmqtt.setServer(server, port);
Serial.println("Server ready");
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("System Online");
}
void loop() {
if (!clientmqtt.connected()) {
Serial.println("MQTT not connected");
if (clientmqtt.connect(ClientID, username, pw)) {
Serial.println("MQTT Connected");
clientmqtt.subscribe(topic1);
clientmqtt.subscribe(topic2);
clientmqtt.subscribe(topic3);
clientmqtt.setCallback(callback);
}
}
else {
clientmqtt.loop();
}
}