#define BLYNK_TEMPLATE_ID "TMPL6PDYGqvne"
#define BLYNK_TEMPLATE_NAME "Home Automation"
#define BLYNK_AUTH_TOKEN "l_CulhBVO9HTzsEV925TmqkZVuaZMoid"
#include <Adafruit_NeoPixel.h>
#include <ESP32Servo.h>
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// NeoPixel settings for three strips
#define OUTDOOR_LED_PIN 19 // Pin for Outdoor NeoPixel data
#define INDOOR1_LED_PIN 26 // Pin for Indoor1 NeoPixel data
#define INDOOR2_LED_PIN 27 // Pin for Indoor2 NeoPixel data
#define NUMPIXELS 4 // Number of NeoPixels in each strip (adjust as needed)
#define PIRLed 21
// Create NeoPixel objects for each location
Adafruit_NeoPixel outdoorPixels(NUMPIXELS, OUTDOOR_LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel indoor1Pixels(NUMPIXELS, INDOOR1_LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel indoor2Pixels(NUMPIXELS, INDOOR2_LED_PIN, NEO_GRB + NEO_KHZ800);
Adafruit_NeoPixel PirPixels(NUMPIXELS, PIRLed, NEO_GRB + NEO_KHZ800);
// Servo Motor Pins
const int servoPin = 14;
const int PIR_SENSOR_PIN = 13;
const int IN1_Motor1 = 23; // IN1 connected to digital pin for Motor 1
const int IN2_Motor1 = 18;
const int ENA_Motor1 = 19; // PWM pin for Motor 1
// Buzzer pin
const int buzzerPin = 25;
bool isLocked = true;
// Wi-Fi credentials
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
char auth[] = BLYNK_AUTH_TOKEN;
// Servo object
Servo myServo;
// PWM Setup for fan motor (PWM channel 0, 1kHz frequency, 8-bit resolution)
const int pwmChannel = 0;
const int pwmFreq = 1000;
const int pwmResolution = 8;
void setup() {
// Attach servo
myServo.attach(servoPin);
pinMode(IN1_Motor1, OUTPUT);
pinMode(IN2_Motor1, OUTPUT);
// Initially lock doors
myServo.write(90);
// Initialize Blynk connection
Blynk.begin(auth, ssid, pass);
// Initialize buzzer, PIR sensor
pinMode(PIR_SENSOR_PIN, INPUT);
pinMode(buzzerPin, OUTPUT);
// Initialize NeoPixel strips
outdoorPixels.begin();
indoor1Pixels.begin();
indoor2Pixels.begin();
PirPixels.begin();
// Turn off all LEDs at startup
setPixels(outdoorPixels, 0, 0, 0);
setPixels(indoor1Pixels, 0, 0, 0);
setPixels(indoor2Pixels, 0, 0, 0);
setPixels(PirPixels, 0, 0, 0);
// Start serial communication
Serial.begin(115200);
Serial.println("System Initialized");
}
void loop() {
Blynk.run(); // Run Blynk
int motionDetected = digitalRead(PIR_SENSOR_PIN);
if (motionDetected == HIGH) {
Serial.println("Motion detected!");
digitalWrite(buzzerPin, HIGH); // Activate buzzer
setPixels(PirPixels, 255, 0, 0); // Set PIR NeoPixel to red
Serial.println("Buzzer ON, PIR NeoPixel Red");
Blynk.logEvent("motion_detected", "Motion Detected!");
delay(5000);
digitalWrite(buzzerPin, LOW); // Activate buzzer
} else {
Serial.println("No motion detected");
digitalWrite(buzzerPin, LOW); // Deactivate buzzer
setPixels(PirPixels, 0, 255, 0); // Set PIR NeoPixel to green
Serial.println("Buzzer OFF, PIR NeoPixel Green");
}
}
// General function for controlling NeoPixel colors
void setPixels(Adafruit_NeoPixel &strip, int red, int green, int blue) {
for (int i = 0; i < strip.numPixels(); i++) {
strip.setPixelColor(i, strip.Color(red, green, blue));
}
strip.show();
}
// Blynk function to control Outdoor NeoPixel via virtual pin V0
BLYNK_WRITE(V0) {
int pinValue = param.asInt();
if (pinValue == 1) {
setPixels(outdoorPixels, 255, 255, 255); // Set Outdoor NeoPixel to white
Serial.println("Outdoor NeoPixel White");
} else {
setPixels(outdoorPixels, 0, 0, 0); // Turn off Outdoor NeoPixel
Serial.println("Outdoor NeoPixel Off");
}
}
// Blynk function to control Indoor1 NeoPixel via virtual pin V1
BLYNK_WRITE(V1) {
int pinValue = param.asInt();
if (pinValue == 1) {
setPixels(indoor1Pixels, 255, 255, 0); // Set Indoor1 NeoPixel to yellow
Serial.println("Indoor1 NeoPixel yellow");
} else {
setPixels(indoor1Pixels, 0, 0, 0); // Turn off Indoor1 NeoPixel
Serial.println("Indoor1 NeoPixel Off");
}
}
// Blynk function to control Indoor2 NeoPixel via virtual pin V2
BLYNK_WRITE(V2) {
int pinValue = param.asInt();
if (pinValue == 1) {
setPixels(indoor2Pixels, 0, 0, 255); // Set Indoor2 NeoPixel to blue
Serial.println("Indoor2 NeoPixel blue");
} else {
setPixels(indoor2Pixels, 0, 0, 0); // Turn off Indoor2 NeoPixel
Serial.println("Indoor2 NeoPixel Off");
}
}
// Blynk function to control Servo via virtual pin V3
BLYNK_WRITE(V3) {
int pinValue = param.asInt();
if (pinValue == 1) {
myServo.write(0); // Open door
Serial.println("Door Open");
} else {
myServo.write(90); // Close door
Serial.println("Door Closed");
}
}
// Blynk function to control fan motor via virtual pin V4
BLYNK_WRITE(V4) {
int pinValue = param.asInt();
if (pinValue == 1) {
digitalWrite(IN1_Motor1, HIGH);
digitalWrite(IN2_Motor1, LOW);
analogWrite(ENA_Motor1, 255); // Set speed (0-255)
Serial.println("Fan On");
} else {
digitalWrite(IN1_Motor1, LOW);
digitalWrite(IN2_Motor1, LOW);
analogWrite(ENA_Motor1, 0); // Set speed (0-255)
Serial.println("Fan Off");
}
}