#define LDR_PIN 2
#include <DHT.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include "WiFi.h"
byte relay1=4;
byte relay2=16;
byte sensorpin=14;
const int dhtPin = 27;
String abc;
const char* mqttServer = "broker.hivemq.com";
int port = 1883;
char clientId[50];
const char* ssid = "Wokwi-GUEST";
int channel = 6;
const char* password = "";
WiFiClient espClient;
PubSubClient client(espClient);
DynamicJsonDocument doc(1024);
DHT dht(dhtPin, DHT22);
String Motion;
String Bright;
float Temperature;
void setup()
{
pinMode(LDR_PIN, INPUT);
pinMode(sensorpin, INPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
dht.begin();
Serial.begin(115200);
Serial.println("Hello, ESP32!");
Serial.print("Connecting to ");
Serial.println(ssid);
wifiConnect();
client.setServer(mqttServer, port);
client.setCallback(callback);
}
void loop()
{
if (!client.connected())
{
mqttReconnect();
}
else
{
String JsonData;
float temperature = dht.readTemperature();
int sensorvalue = digitalRead(sensorpin);
if(sensorvalue==HIGH)
{
doc["Motion"]="Motion Detected";
}
if(sensorvalue==LOW)
{
doc["Motion"]="Motion not Detected";
}
if(digitalRead(LDR_PIN) == LOW)
{
doc["Bright"]="Light ";
}
if(digitalRead(LDR_PIN) == HIGH)
{
doc["Bright"]="Dark";
}
doc["Temperature"]=temperature;
serializeJson(doc, JsonData);
client.publish("esp32-h",JsonData.c_str());
}
client.loop();
}
void wifiConnect() {
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
void mqttReconnect() {
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
long r = random(1000);
sprintf(clientId, "fcs-clientId-%ld", r);
if (client.connect(clientId)) {
Serial.print(clientId);
Serial.println("connected");
client.subscribe("esp32-H");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void callback(char* topic ,byte* message,unsigned int length)
{
Serial.print("Message arrived in topic");
Serial.print(topic);
Serial.print("Message:");
String stMessage;
for (int i=0;i<length;i++)
{
//Serial.print((char)message[i]);
stMessage+=(char)message[i];
}
DeserializationError error = deserializeJson(doc,stMessage);
if (error)
{
Serial.print("Parsing failed: ");
Serial.println(error.c_str());
return;
}
Motion=doc["Motion"].as<String>();
Bright=doc["Bright"].as<String>();
Temperature=doc["Temperature"];
Serial.print("Temperature : ");
Serial.println(Temperature);
Serial.print("Motion : ");
Serial.println(Motion);
Serial.print("Brightness : ");
Serial.println(Bright);
if((Motion=="Motion Detected") && (Bright == "Dark"))
{
digitalWrite(relay1,LOW);
}
else
{
digitalWrite(relay1,HIGH);
}
if(Temperature>=50.00)
{
digitalWrite(relay2,LOW);
}
else
{
digitalWrite(relay2,HIGH);
}
}