#include <WiFi.h>
#include <PubSubClient.h>
#include "DHT.h"
// Replace with your Wi-Fi credentials
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Replace with your MQTT broker's address
const char* mqtt_server = "broker.hivemq.com"; // Public broker for testing
WiFiClient espClient;
PubSubClient client(espClient);
// DHT22 setup
#define DHTPIN 5 // Pin for DHT22 sensor
#define DHTTYPE DHT22 // Define sensor type
DHT dht(DHTPIN, DHTTYPE);
// Sensor pins
#define LDR_PIN 34 // Photoresistor (LDR)
#define PIR_PIN 32 // Motion sensor (PIR)
#define GAS_PIN 33 // Gas sensor (MQ-2 or similar)
// Function to connect to Wi-Fi
void setup_wifi() {
delay(10);
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
}
// Function to connect to MQTT broker
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("ArduinoClient")) {
Serial.println("connected");
} else {
Serial.print("Failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
// Publish sensor data to MQTT
void sendSensorData() {
int lightLevel = analogRead(LDR_PIN); // Read LDR sensor value
int motion = digitalRead(PIR_PIN); // Read PIR sensor value
int gasLevel = analogRead(GAS_PIN); // Read gas sensor value
// Read temperature and humidity from DHT22
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
// Check if any reads failed
if (isnan(temperature) || isnan(humidity)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
// Convert sensor values to string and publish to MQTT topics
client.publish("home/sensors/light", String(lightLevel).c_str());
client.publish("home/sensors/motion", String(motion).c_str());
client.publish("home/sensors/gas", String(gasLevel).c_str());
client.publish("home/sensors/temperature", String(temperature).c_str());
client.publish("home/sensors/humidity", String(humidity).c_str());
// Print sensor data to Serial Monitor
Serial.println("Sensor data sent to MQTT:");
Serial.print("Light: "); Serial.println(lightLevel);
Serial.print("Motion: "); Serial.println(motion);
Serial.print("Gas: "); Serial.println(gasLevel);
Serial.print("Temperature: "); Serial.println(temperature);
Serial.print("Humidity: "); Serial.println(humidity);
}
void setup() {
Serial.begin(115200);
// Initialize DHT sensor
dht.begin();
// Initialize other sensor pins
pinMode(LDR_PIN, INPUT);
pinMode(PIR_PIN, INPUT);
pinMode(GAS_PIN, INPUT);
// Connect to Wi-Fi
setup_wifi();
// Set up MQTT broker
client.setServer(mqtt_server, 1883);
}
void loop() {
// Reconnect to MQTT broker if disconnected
if (!client.connected()) {
reconnect();
}
client.loop();
// Send sensor data every 2 seconds
sendSensorData();
delay(2000);
}