#define BLYNK_TEMPLATE_ID "TMPLGPQ7WQGV"
#define BLYNK_TEMPLATE_NAME "IoT Project"
#define BLYNK_AUTH_TOKEN "UqYjzXMux1QpSOm6SiPA6O1F9lQjgR3z"
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#include <uri/UriBraces.h>
#include <HTTPClient.h>
#include <Wire.h>
#include "DHT.h"
#include <LiquidCrystal_I2C.h>
#include <BlynkSimpleEsp32.h>
#include <ESP32Servo.h>
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
// Defining the WiFi channel speeds up the connection:
#define WIFI_CHANNEL 6
#define DHT_PIN 33
#define LED_PIN 21
#define LSR_PIN 26
#define SRV_PIN 17
#define OFF_BTN_PIN 35
#define ON_BTN_PIN 32
DHT dhtSensor(DHT_PIN, DHT22);
Servo servo;
BlynkTimer timer;
float temperature;
float humidity;
bool lastFoldStatus = false;
void connectWifi(void) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD, WIFI_CHANNEL);
Serial.print("Connecting to WiFi ");
Serial.print(WIFI_SSID);
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void sendDryingStatus(bool status) {
if (status == true) {
Blynk.virtualWrite(V1, 1);
} else {
Blynk.virtualWrite(V1, 0);
}
}
void toggleDrying(bool status) {
if (status == true) {
servo.write(0);
digitalWrite(LED_PIN, HIGH);
} else {
servo.write(90);
digitalWrite(LED_PIN, LOW);
}
}
void readButtons(void) {
if (digitalRead(OFF_BTN_PIN) == HIGH && lastFoldStatus == true) {
Serial.println("[Manual] Received Fold OFF");
toggleDrying(false);
sendDryingStatus(false);
lastFoldStatus = false;
}
if (digitalRead(ON_BTN_PIN) == HIGH && lastFoldStatus == false) {
Serial.println("[Manual] Received Fold ON");
toggleDrying(true);
sendDryingStatus(true);
lastFoldStatus = true;
}
}
void readData(void) {
temperature = dhtSensor.readTemperature();
humidity = dhtSensor.readHumidity();
Serial.print("Temperature: ");
Serial.println(temperature);
Serial.print("Humidity: ");
Serial.println(humidity);
}
void sendDataToBlynk() {
Blynk.virtualWrite(V6, temperature);
Blynk.virtualWrite(V4, humidity);
}
BLYNK_WRITE(V1) {
if (param.asInt() == 1) {
toggleDrying(true);
Serial.println("[Blynk] Received Fold ON");
} else {
toggleDrying(false);
Serial.println("[Blynk] Received Fold OFF");
}
}
void setup(void) {
Serial.begin(115200);
pinMode(LED_PIN, OUTPUT);
connectWifi();
Blynk.begin(BLYNK_AUTH_TOKEN, WIFI_SSID, WIFI_PASSWORD);
dhtSensor.begin();
pinMode(DHT_PIN, INPUT);
servo.attach(SRV_PIN, 500, 2400);
timer.setInterval(1000, readData);
timer.setInterval(2000, sendDataToBlynk);
}
void loop(void) {
readButtons();
timer.run();
}