#define BLYNK_TEMPLATE_ID "TMPL6xZhFSWgN"
#define BLYNK_TEMPLATE_NAME "Smart Home Essentials Prototype"
#define BLYNK_AUTH_TOKEN "keKUxlgVeMyiUCqIC0qnUUiHz_6PhgIe"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <LiquidCrystal_I2C.h>
// LCD Pins
LiquidCrystal_I2C lcd(0x27, 16, 2);
/*----------------Relay Pin Section------------------------*/
// RELAY Pin
#define MOTION_RELAY_PIN 23
// SENSOR Pin
#define MOTION_SENSOR_PIN 33
// SENSOR Pin Switch
#define OUTLET_RELAY_PIN 17
// Ultrasonic Sensor Pin
#define ULTRASONIC_TRIG_PIN 32
#define ULTRASONIC_ECHO_PIN 27
long echoDuration;
float distanceCm;
// TOUCH LED PIN
#define T_LED_PIN 25
#define TACTILE_SWITCH 26
bool ledState = false;
/*----------------------------------------------------------*/
/*----------------Wifi Credentials--------------------------*/
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST"; // Wifi Name
char pass[] = ""; // Wifi Password
/*----------------------------------------------------------*/
/*----------------SYNC BLYNK--------------------------------*/
BLYNK_CONNECTED() {
Blynk.syncVirtual(V2);
Blynk.syncVirtual(V4);
}
/*----------------------------------------------------------*/
/*----------------OUTLET BLYNK Control----------------------*/
// Outlet Status
String outlet_stat = "";
BLYNK_WRITE(V2){
if(param.asInt() == 1) {
digitalWrite(OUTLET_RELAY_PIN, HIGH);
outlet_stat = "OUTLET: ON";
} else {
digitalWrite(OUTLET_RELAY_PIN, LOW);
outlet_stat = "OUTLET: OFF";
}
}
/*----------------------------------------------------------*/
/*-----------------Motion Control---------------------------*/
// Motion Status
String motion_stat = "";
void motion_control() {
if(digitalRead(MOTION_SENSOR_PIN) == HIGH) {
digitalWrite(MOTION_RELAY_PIN, HIGH);
WidgetLED LED(V3);
LED.on();
motion_stat = "LED: ON";
} else {
digitalWrite(MOTION_RELAY_PIN, LOW);
WidgetLED LED(V3);
LED.off();
motion_stat = "LED: OFF";
}
}
/*----------------------------------------------------------*/
/*-----------------Ultrasonic Control-----------------------*/
void ultrasonic_control() {
// Clears the trigPin
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
delayMicroseconds(2);
digitalWrite(ULTRASONIC_TRIG_PIN, HIGH);
delayMicroseconds(10);
digitalWrite(ULTRASONIC_TRIG_PIN, LOW);
echoDuration = pulseIn(ULTRASONIC_ECHO_PIN, HIGH);
// Calculate the distance in Centimeter
distanceCm = echoDuration * 0.034 / 2;
// Display the value in BLYNK Dashboard
Blynk.virtualWrite(V4, distanceCm);
}
/*----------------------------------------------------------*/
/*----------------tactile_switch_control--------------------*/
void tactile_switch_control() {
bool currentState = digitalRead(TACTILE_SWITCH);
if (currentState) {
ledState = !ledState;
digitalWrite(T_LED_PIN, ledState);
delay(50);
}
}
/*----------------------------------------------------------*/
void setup() {
Serial.begin(9600);
// LCD Initialize
lcd.init();
lcd.clear();
lcd.backlight();
// Show loading
lcd.setCursor(0, 0);
lcd.print("Initializing...");
// Initialize BLYNK (connect to internet)
Blynk.begin(auth, ssid, pass);
// Show that it is connected
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("Connected!");
delay(2000);
// RELAY pinMode
pinMode(MOTION_RELAY_PIN, OUTPUT);
// SENSOR pinMode
pinMode(MOTION_SENSOR_PIN, INPUT);
// SENSOR switch
pinMode(OUTLET_RELAY_PIN, OUTPUT);
// Ultrasonic pinMode
pinMode(ULTRASONIC_TRIG_PIN, OUTPUT);
pinMode(ULTRASONIC_ECHO_PIN, INPUT);
// TACTILE SWITCH AND LED
pinMode(TACTILE_SWITCH, INPUT);
pinMode(T_LED_PIN, OUTPUT);
}
void loop() {
lcd.clear();
motion_control();
ultrasonic_control();
tactile_switch_control();
Blynk.run();
// Display LED status
lcd.setCursor(0, 0);
lcd.print(motion_stat);
// Display OUTLET status
lcd.setCursor(0, 1);
lcd.print(outlet_stat);
delay(1000);
}Loading
esp32-devkit-c-v4
esp32-devkit-c-v4