#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define MQTT_SERVER "broker.hivemq.com"
#define MQTT_PORT 1883
#define MQTT_TOPIC "testing"
#define DHT_PIN 15
#define LED_PIN 32
#include "DHTesp.h"
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <PubSubClient.h> // MQTT library
#include <ArduinoJson.h>
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 20, 4);
WiFiClient espClient;
PubSubClient client(espClient);
float lastTemp = -100.0;
float lastHumid = -100.0;
const char* username = "test";
const char* password = "";
void mqttCallback(char* topic, byte* payload, unsigned int length) {
char msg[50];
memcpy(msg, payload, length);
Serial.println(msg);
msg[length] = '\0';
JsonDocument doc;
deserializeJson(doc, msg);
Serial.println("Temp and humid");
int temp = doc["Temp"];
int humid = doc["Humid"];
Serial.println(temp);
Serial.println(humid);
if (temp < 30.0) {
digitalWrite(LED_PIN, HIGH);
Serial.println("LED turned ON (Temperature < 30°C)");
} else {
digitalWrite(LED_PIN, LOW);
Serial.println("LED turned OFF (Temperature >= 30°C)");
}
}
void setup() {
Serial.begin(9600);
Serial.println("ESP32 collecting sensor data");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, 7);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi!");
client.setServer(MQTT_SERVER, MQTT_PORT);
client.setCallback(mqttCallback);
reconnect();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(LED_PIN, OUTPUT);
digitalWrite(LED_PIN, LOW);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("ESP32 collecting data...");
delay(500);
}
void reconnect() {
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("a4b40540-2fab-4da8-a1f3-6f3d04287205", username, password)) {
Serial.println("Connected to MQTT broker");
client.subscribe(MQTT_TOPIC);
} else {
Serial.print("Failed to connect, retrying in 5 seconds...");
delay(500);
}
}
}
void loop() {
delay(1000);
if (!client.connected()) {
reconnect();
}
client.loop();
client.setCallback(mqttCallback);
TempAndHumidity data = dhtSensor.getTempAndHumidity();
float temp = data.temperature;
float humid = data.humidity;
if (isnan(temp) || isnan(humid)) {
Serial.println("Failed to read from DHT sensor!");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sensor error!");
delay(200);
return;
}
String stemp = String(temp, 1) + "C";
String shumid = String(humid, 1) + "%";
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: " + stemp);
lcd.setCursor(0, 1);
lcd.print("Humidity: " + shumid);
}