#include <PubSubClient.h>
#include <WiFi.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>
// WiFi settings
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqtt_server = "io.adafruit.com";
// MQTT settings
const char* mqtt_user = "mhemanthkmr143";
const char* mqtt_password = "aio_wYxf47Lv4K7KDok4e3zleKf9NekW";
const char* temperature_topic = "home/temperature";
const char* humidity_topic = "home/humidity";
// LCD settings
LiquidCrystal_I2C lcd(0x27, 16, 2); // Set the LCD address and dimensions
// DHT sensor settings
#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Relay pins
const int relayPins[] = {3, 4, 5, 6, 7};
// Initialize MQTT client
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
// Initialize Serial Monitor
Serial.begin(115200);
// Initialize WiFi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to WiFi");
// Initialize MQTT
client.setServer(mqtt_server, 1883);
while (!client.connected()) {
Serial.println("Connecting to MQTT...");
if (client.connect("arduinoClient", mqtt_user, mqtt_password)) {
Serial.println("Connected to MQTT");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" Retrying in 5 seconds");
delay(5000);
}
}
// Initialize LCD
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Temp: C");
lcd.setCursor(0, 1);
lcd.print("Humidity: %");
// Initialize DHT sensor
dht.begin();
// Initialize relay pins
for (int i = 0; i < 5; i++) {
pinMode(relayPins[i], OUTPUT);
digitalWrite(relayPins[i], LOW); // Initially turn off relays
}
}
void loop() {
// Read temperature and humidity
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Update LCD
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.setCursor(10, 1);
lcd.print(humidity);
// Update MQTT
if (client.connected()) {
client.publish(temperature_topic, String(temperature).c_str());
client.publish(humidity_topic, String(humidity).c_str());
}
// Control relays based on temperature and humidity
if (temperature > 25) {
digitalWrite(relayPins[0], HIGH); // Turn on relay 1
} else {
digitalWrite(relayPins[0], LOW); // Turn off relay 1
}
if (humidity > 60) {
digitalWrite(relayPins[1], HIGH); // Turn on relay 2
} else {
digitalWrite(relayPins[1], LOW); // Turn off relay 2
}
// Other relay control logic can be added here
delay(5000); // Update every 5 seconds
}