#include <WiFi.h>
#include <PubSubClient.h>
#include <LiquidCrystal.h>
#include "DHT.h"
LiquidCrystal lcd(17, 16, 4, 0, 2, 15);
#define DHTPIN 26
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
#define MQ2_PIN 32
#define BUZZER_PIN 22
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server ="test.mosquitto.org";
WiFiClient espClient;
PubSubClient client(espClient);
void setup_wifi() {
WiFi.begin(ssid, password);
lcd.clear();
lcd.print("Connecting WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
}
}
void reconnect() {
while (!client.connected()) {
if (client.connect("ESP32_Client")) {
// Connected
} else {
delay(5000);
}
}
}
void setup() {
Serial.begin(115200);
lcd.begin(16, 2);
lcd.print("LCD Ready!");
delay(2000);
dht.begin();
pinMode(BUZZER_PIN, OUTPUT);
digitalWrite(BUZZER_PIN, LOW);
lcd.clear();
lcd.print("WiFi Setup...");
setup_wifi();
lcd.clear();
lcd.print("WiFi Connected");
client.setServer(mqtt_server, 1883);
lcd.setCursor(0, 1);
lcd.print("MQTT Ready");
delay(1500);
}
void loop() {
if (!client.connected()) reconnect();
client.loop();
float temp = dht.readTemperature();
float hum = dht.readHumidity();
int gas_value = analogRead(MQ2_PIN);
if (isnan(temp) || isnan(hum)) {
lcd.clear();
lcd.print("DHT Error!");
delay(2000);
return;
}
char msg[150];
sprintf(msg,
"{\"temperature\": %.2f, \"humidity\": %.2f, \"gas\": %d}",
temp, hum, gas_value);
client.publish("show", msg);
Serial.print("Publishing: ");
Serial.println(msg);
client.publish("show", msg);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.print(temp);
lcd.print("C H:");
lcd.print(hum);
lcd.setCursor(0, 1);
lcd.print("Gas:");
lcd.print(gas_value);
if (gas_value > 2500 || temp > 35) {
tone(BUZZER_PIN, 100);
} else {
noTone(BUZZER_PIN);
}
delay(3000);
}