#include <WiFi.h>
#include <PubSubClient.h>
#include "DHTesp.h"
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <ESP32Servo.h>
#define DHT_PIN 15
#define BUZZER 12
#define LDR_1 32
#define LDR_2 33
Servo s;
int p = 0;
WiFiClient espClient;
PubSubClient mqttClient(espClient);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP);
char tempAr[6];
char LDRValue1[6];
char LDRValue2[6];
DHTesp dhtSensor;
bool isScheduledON = false;
unsigned long scheduledOnTime;
void setup();
void loop();
void buzzerOn(bool on);
void setupMqtt();
void receiveCallback(char* topic, byte* payload, unsigned int length);
void connectToBroker();
void updateTemperature();
void setupWifi();
void setup() {
Serial.begin(115200);
S.attach(4);
setupWifi();
setupMqtt();
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
timeClient.begin();
timeClient.setTimeOffset(5.5*3600);
pinMode(BUZZER, OUTPUT);
digitalWrite(BUZZER, LOW);
pinMode(LDR_1,INPUT);
pinMode(LDR_2,INPUT);
}
void loop(){
if (!mqttClient.connected()) {
connectToBroker();
}
mqttClient.loop();
updateTemperature();
Serial.println(tempAr);
mqttClient.publish("EE-ADMIN-TEMP", tempAr);
checkSchedule();
int a = analogRead(LDR_1);
int b = analogRead(LDR_2);
Serial.print("LDR 1 : ");
Serial.println(String(a));
Serial.print("LDR 2 : ");
Serial.println(String(b));
String(a).toCharArray(LDRValue1, 6);
mqttClient.publish("LDR-OUT-1", LDRValue1);
String(b).toCharArray(LDRValue2, 6);
mqttClient.publish("LDR-OUT-2", LDRValue2);
for (p=0;p<100;p++)
{
s.write(p);
}
delay(1000);
}
void buzzerOn(bool on){
if(on){
tone(BUZZER, 256);
}else{
noTone(BUZZER);
}
}
void setupMqtt(){
mqttClient.setServer("test.mosquitto.org", 1883);
mqttClient.setCallback(receiveCallback);
}
void receiveCallback(char* topic, byte* payload, unsigned int length) {
Serial.print("Message arrived [");
Serial.print(topic);
Serial.print("]");
char payloadCharAr[length];
for(int i = 0; i < length; i++){
Serial.print((char)payload[i]);
payloadCharAr[i] = (char)payload[i];
}
Serial.println();
if (strcmp(topic, "EE-ADMIN-MAIN-ON-OFF") == 0) {
buzzerOn(payloadCharAr[0] == '1');
}
else if(strcmp(topic, "EE-ADMIN-SCH-ON") == 0){
if (payloadCharAr[0] == 'N') {
isScheduledON = false;
}else{
isScheduledON = true;
scheduledOnTime = atol(payloadCharAr);
}
}
else if(strcmp(topic, "MIN-ANGLE") == 0){
int minAngleValue = atoi(payloadCharAr);
Serial.print("Min Angle Value: ");
Serial.println(minAngleValue);
}
else if(strcmp(topic, "CONTROL-FAC") == 0){
float controlFactor = atof(payloadCharAr);
Serial.print("Control Factor: ");
Serial.println(controlFactor);
}
}
void connectToBroker() {
while (!mqttClient.connected()) {
Serial.print("Attempting MQTT connection...");
if (mqttClient.connect("ESP32-2323232323")) {
Serial.print("connected");
mqttClient.subscribe("EE-ADMIN-MAIN-ON-OFF");
mqttClient.subscribe("EE-ADMIN-SCH-ON");
mqttClient.subscribe("MIN-ANGLE");
mqttClient.subscribe("CONTROL-FAC");
}
else{
Serial.print("failed");
Serial.print(mqttClient.state());
delay(5000);
}
}
}
void updateTemperature(){
TempAndHumidity data = dhtSensor.getTempAndHumidity();
String(data.temperature, 2).toCharArray(tempAr, 6);
}
void setupWifi() {
Serial.println();
Serial.println("Connecting to ");
Serial.println("Wokwi-GUEST");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
unsigned long getTime() {
timeClient.update();
return timeClient.getEpochTime();
}
void checkSchedule() {
if (isScheduledON) {
unsigned long currentTime = getTime();
if (currentTime > scheduledOnTime){
buzzerOn(true);
isScheduledON=false;
mqttClient.publish("EE-ADMIN-MAIN-ON-OFF-ESP", "1");
Serial.println("Scheduled ON");
}
}
}