#include <DHT.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
// WiFi credentials
const char* ssid = "Airtel_77";
const char* password = "380565750";
// MQTT Broker settings
const char* mqtt_server = "192.168.1.6";
const int mqtt_port = 1883;
const char* mqtt_topic = "home/sensors";
// Pin Definitions
#define TRIG_PIN 5
#define ECHO_PIN 18
#define DHT_PIN 4
#define LED_PIN 2
#define BUTTON_PIN 15
#define DHTTYPE DHT22
// Initialize objects
DHT dht(DHT_PIN, DHTTYPE);
WiFiClient espClient;
PubSubClient client(espClient);
// Variables
float temperature;
float humidity;
long duration;
float distance;
bool alertMode = false;
unsigned long lastReadingTime = 0;
const int readingInterval = 2000;
void setup_wifi() {
delay(10);
Serial.println("Connecting to WiFi");
WiFi.begin(ssid, password);
int retries = 0;
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
retries++;
if (retries >= 10) {
Serial.println("\nWiFi connection failed. Retrying in 10 seconds.");
delay(10000);
retries = 0;
WiFi.begin(ssid, password);
}
}
Serial.println("\nWiFi connected");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
String clientId = "ESP32Client-";
clientId += String(random(0xffff), HEX);
if (client.connect(clientId.c_str())) {
Serial.println("connected");
client.subscribe("home/control"); // Subscribe to control messages
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" retrying in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic, byte* payload, unsigned int length) {
// Handle incoming MQTT messages
if (String(topic) == "home/control") {
DynamicJsonDocument doc(1024);
deserializeJson(doc, payload, length);
if (doc.containsKey("alertMode")) {
alertMode = doc["alertMode"].as<bool>();
}
}
}
void setup() {
Serial.begin(115200);
// Initialize sensors
dht.begin();
pinMode(TRIG_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
setup_wifi();
client.setServer(mqtt_server, mqtt_port);
client.setCallback(callback);
Serial.println("Smart Space Monitor Initialized!");
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
// Check button state for alert mode toggle
if (digitalRead(BUTTON_PIN) == LOW) {
alertMode = !alertMode;
// Publish alert mode change
DynamicJsonDocument doc(1024);
doc["alertMode"] = alertMode;
char buffer[256];
serializeJson(doc, buffer);
client.publish("home/status", buffer);
delay(500); // Debounce
}
// Read sensors every 2 seconds
if (millis() - lastReadingTime >= readingInterval) {
// Read DHT sensor
temperature = dht.readTemperature();
humidity = dht.readHumidity();
// Read Ultrasonic sensor
digitalWrite(TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(TRIG_PIN, LOW);
duration = pulseIn(ECHO_PIN, HIGH);
distance = duration * 0.034 / 2;
// Prepare JSON payload
DynamicJsonDocument doc(1024);
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["distance"] = distance;
doc["alertMode"] = alertMode;
char buffer[256];
serializeJson(doc, buffer);
client.publish(mqtt_topic, buffer);
// LED Logic
if (alertMode) {
if (distance < 50) {
digitalWrite(LED_PIN, HIGH);
delay(100);
digitalWrite(LED_PIN, LOW);
}
} else {
int brightness = map(temperature, 20, 40, 0, 255);
analogWrite(LED_PIN, brightness);
}
lastReadingTime = millis();
}
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4