#include <DHT.h>
#include <ArduinoJson.h>
#include <PubSubClient.h>
#include "WiFi.h"
byte motion = 12;
byte light = 14;
byte relay_buzzer = 19;
byte relay_led = 16;
byte temperature = 27;
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(temperature, DHT22);
DynamicJsonDocument doc1(1024);
String msg_recieved = "";
float temp;
String brightness;
String movement;
String jsonOutput;
String JsonData;
void setup()
{
Serial.begin(115200);
Serial.println("Hello, ESP32!");
dht.begin();
pinMode(motion, INPUT);
pinMode(light, INPUT);
pinMode(relay_buzzer, OUTPUT);
pinMode(relay_led, OUTPUT);
Serial.print("Connecting to ");
Serial.println(ssid);
wifiConnect();
client.setServer(mqttServer, port);
client.setCallback(callback);
delay(1000);
}
void loop()
{
delay(10);
if (digitalRead(light) == LOW && digitalRead(motion) == 1)
{
brightness = "LOW";
movement = "YES";
}
else if (digitalRead(light) == HIGH && digitalRead(motion) == 0)
{
movement = "NO";
brightness = "HIGH";
}
temp = dht.readTemperature();
doc["Motion"] = movement;
doc["Brightness"] = brightness;
doc["Temperature"] = temp;
serializeJson(doc, JsonData);
Serial.println(JsonData);
if (!client.connected())
{
mqttReconnect();
}
else
{
client.publish("Final", JsonData.c_str());//topic,data
//variable.c_str() -->str to const char
}
client.loop();
delay(2000);
}
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("Reply");
} 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 on topic : ");
Serial.println(topic);
Serial.print("Message is : ");
String stmsg;
for (int i = 0; i < length; i++)
{
Serial.print((char)message[i]);
stmsg += (char)message[i];
}
Serial.println(stmsg);
DeserializationError error = deserializeJson(doc1, stmsg);
if (error)
{
Serial.print("Parsing failed: ");
Serial.println(error.c_str());
return;
}
float Temperature = doc1["Temperature"];
String Bright = doc1["Brightness"].as<String>();
String Move = doc1["Motion"].as<String>();
Serial.println();
if(Move=="YES" && Bright=="LOW")
digitalWrite(relay_led, HIGH);
else
digitalWrite(relay_led, LOW);
if(Temperature>15.0)
digitalWrite(relay_buzzer, HIGH);
else
digitalWrite(relay_buzzer,LOW);
}