#define BLYNK_TEMPLATE_ID "TMPL5G25FqI7N"
#define BLYNK_TEMPLATE_NAME "Lumino-Blinds"
#define BLYNK_AUTH_TOKEN "_D9jCIW87qt82yJ2VhpHWDM6pAvXMvMt"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include<ESP32Servo.h>
//int ldr = 15;
//int relay = D1; //connect with lamp
int servoPin = 5;
//int motorDir = D4;
int led = 27;
int ledGreen = 14;
int ldrValue;
int selectMode = 0; //default auto mode
Servo servo;
#define LIGHT_SENSOR_PIN 15
BlynkTimer timer;
WidgetLCD lcd(V5);
char auth [] = BLYNK_AUTH_TOKEN;
char ssid [] = "Wokwi-GUEST";
char pass [] = "";
BLYNK_CONNECTED ()
{
Blynk.syncVirtual(V0);
Blynk.syncVirtual(V1);
Blynk.syncVirtual(V2);
Blynk.syncVirtual(V3);
}
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
Blynk.begin(auth,ssid,pass);
pinMode(led, OUTPUT);
pinMode(ledGreen, OUTPUT);
servo.attach(servoPin, 500, 2400);
timer.setInterval(5000L, readLDR);
lcd.clear();
lcd.print(0, 0, "Lumino-Blinds");
lcd.print(0, 1, "Initializing...");
}
BLYNK_WRITE (V0) // mode selection
{
selectMode = param.asInt();
Serial.print("Mode selected: ");
Serial.println(selectMode);
if (selectMode == 0) // auto mode
{
Serial.println("Auto MODE IS ACTIVATED!");
lcd.print(3,0, " ");
lcd.print(4,0, "AUTO MODE");
lcd.print(4,1, "ACTIVATED");
}
else if (selectMode == 1) // manual mode
{
Serial.println("MANUAL MODE IS ACTIVATED!");
lcd.print(3,0, " ");
lcd.print(3,0, "MANUAL MODE");
lcd.print(4,1, "ACTIVATED");
digitalWrite(led, LOW);
digitalWrite(ledGreen, LOW);
}
}
BLYNK_WRITE (V1) // curtains open half
{
int buttonState = param.asInt ();
if (buttonState == 1)
{
Serial.println("Curtains open till half!");
curtainClose();
lcd.print(2,1, " ");
lcd.print(5,1, "Half open");
}
else if (buttonState == 0)
{
Serial.println("Close the curtains!");
curtainStop();
lcd.print(5,1, "Close curtains");
}
}
BLYNK_WRITE (V2) // lamp
{
int buttonState = param.asInt ();
if (buttonState == 1)
{
Serial.println("Living Room Lights is ON!");
digitalWrite(led, HIGH);
lcd.print(2,1, " ");
lcd.print(5,1, "LAMP ON");
}
else if (buttonState == 0)
{
Serial.println("Living Room Lights is OFF!");
digitalWrite(led, LOW);
lcd.print(5,1, "LAMP OFF");
}
}
BLYNK_WRITE (V3) //curtain open
{
int buttonState = param.asInt ();
if (buttonState == 1)
{
Serial.println("Opening the curtain!");
lcd.print(2,1, " ");
lcd.print(2,1, "CURTAIN OPEN");
curtainOpen();
}
else if (buttonState == 0)
{
Serial.println("Stop opening the curtain!");
lcd.print(2,1, " ");
lcd.print(2,1, "CURTAIN STOP");
curtainStop();
}
}
BLYNK_WRITE (V4) //bedroom lights
{
int buttonState = param.asInt ();
if (buttonState == 1)
{
digitalWrite(ledGreen, HIGH);
Serial.println("Bedroom Lights on!");
lcd.print(2,1, " ");
lcd.print(2,1, "bedroom lights on");
//curtainClose();
}
else if (buttonState == 0)
{
digitalWrite(ledGreen, LOW);
Serial.println("Bedroom lights off!");
lcd.print(2,1, " ");
lcd.print(2,1, "Bedroom Light off");
//curtainStop();
}
}
void readLDR ()
{
int analogValue = analogRead(LIGHT_SENSOR_PIN);
Serial.print("Analog Value = ");
Serial.print(analogValue);
//ldrValue = analogRead(ldr);
//Serial.print("LDR Value: ");
//Serial.println(ldrValue);
// Approximate LUX calculation (this will vary based on your specific LDR)
// Here we use a simple conversion. A more accurate conversion requires specific calibration.
//float voltage = ldrValue * (3.3 / 4095.0); // Assuming 3.3V reference and 12-bit ADC
//int lux = (int)(500 / voltage); // Simple approximation, should be calibrated for your sensor
//Serial.print("Approximate Lux: ");
//Serial.println(lux);
if (selectMode == 0) // Auto mode
{
if (ldrValue < 400) // increase the value if the sensor is too sensitive
{
digitalWrite(led, HIGH);
digitalWrite(ledGreen, HIGH);
servo.write(180);
Serial.println("It's dark, closing curtains and turning on lights.");
}
else
{
digitalWrite(led, LOW);
digitalWrite(ledGreen, LOW);
servo.write(0);
Serial.println("It's bright, opening curtains and turning off lights.");
}
}
}
void curtainOpen ()
{
servo.write(180);
}
void curtainClose ()
{
servo.write(70);
}
void curtainStop ()
{
servo.write(0);
}
void loop() {
Blynk.run();
timer.run();
}