#define BLYNK_TEMPLATE_ID "TMPL63PasRq3g"
#define BLYNK_TEMPLATE_NAME "Smart Home"
#define BLYNK_AUTH_TOKEN "qLfIBqz1aZroUonegtKGpIF3EIu4vQyK"
// Comment this out to disable prints and save space
#define BLYNK_PRINT Serial
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#define DHTPIN 26
#define DHTTYPE DHT22
DHT dht(DHTPIN,DHTTYPE);
char auth[] = BLYNK_AUTH_TOKEN;
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define buzzer 23
#define button_blue 15
#define button_red 4
#define button_fan 18
#define button_door 19
#define Lamp 25
#define LampM 5
#define Fan 2
#define Door 23
int blue_state = 0;
int red_state = 0;
int fan_state = 0;
int door_state = 0;
//Change the virtual pins according the rooms
#define button_vblue V0
#define button_vred V1
#define button_vfan V2
#define button_vdoor V3
BLYNK_CONNECTED(){
Blynk.syncVirtual(button_vblue);
Blynk.syncVirtual(button_vred);
Blynk.syncVirtual(button_vfan);
Blynk.syncVirtual(button_vdoor);
}
// This function is called every time the Virtual Pin state change
//i.e when web push switch from Blynk App or Web Dashboard
BLYNK_WRITE(button_vblue) {
blue_state = param.asInt();
digitalWrite(Lamp, blue_state);
}
BLYNK_WRITE(button_vred) {
red_state = param.asInt();
digitalWrite(LampM, red_state);
}
BLYNK_WRITE(button_vfan) {
fan_state = param.asInt();
digitalWrite(Fan, fan_state);
}
BLYNK_WRITE(button_vdoor) {
door_state = param.asInt();
digitalWrite(Door, door_state);
}
void setup() {
// Debug Console
Serial.begin(115200);
dht.begin();
timer.setInterval(2500L, sendSensor);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Connecting to ");
lcd.setCursor(0, 1);
lcd.print("WiFi . . . ");
pinMode(button_blue, INPUT_PULLUP);
pinMode(button_red, INPUT_PULLUP);
pinMode(button_fan, INPUT_PULLUP);
pinMode(button_door, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
pinMode(Lamp, OUTPUT);
pinMode(LampM, OUTPUT);
pinMode(Fan, OUTPUT);
pinMode(Door, OUTPUT);
//During Starting all Relays should TURN OFF
digitalWrite(buzzer, HIGH);
digitalWrite(Lamp, HIGH);
digitalWrite(LampM, HIGH);
digitalWrite(Fan, HIGH);
digitalWrite(Door, HIGH);
Blynk.begin(auth, ssid, pass);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(" WiFi ");
lcd.setCursor(0, 1);
lcd.print(" Connected");
delay(3000);
tone(buzzer, 20 );
delay(500);
noTone(buzzer);
lcd.clear();
}
void loop() {
Blynk.run();
timer.run();
listen_push_buttons();
}
void sendSensor(){
float t = dht.readTemperature();
if ((t >= 30)){
digitalWrite(Fan, HIGH);
}
else if ((t < 30) ){
digitalWrite(Fan, LOW);
}
lcd.setCursor(0,0);
lcd.print("Temperature");
lcd.setCursor(0,1);
lcd.print("= ");
lcd.print(t);
lcd.print (" *C");
delay(1000);
lcd.clear();
#define t V4
Blynk.syncVirtual(t);
}
void listen_push_buttons(){
if(digitalRead(button_blue) == LOW){
delay(200);
control_relay(1);
Blynk.virtualWrite(button_vblue, blue_state); //update button state
}
else if(digitalRead(button_red) == LOW){
delay(200);
control_relay(2);
Blynk.virtualWrite(button_vred, red_state); //update button state
}
else if(digitalRead(button_fan) == LOW){
delay(200);
control_relay(3);
Blynk.virtualWrite(button_vfan, fan_state); //update button state
}
else if(digitalRead(button_door) == LOW){
tone(buzzer, 30);
delay(1000);
noTone(buzzer);
delay(200);
control_relay(4);
Blynk.virtualWrite(button_vdoor, door_state); //update button state
}
}
void control_relay(int relay)
{
if(relay == 1){
lcd.clear();
blue_state = !blue_state;
digitalWrite(Lamp, blue_state);
//Serial.print("Kondisi = ");
//Serial.println(blue_state);
lcd.setCursor (0,0);
lcd.println (" FRIDGE");
lcd.setCursor(0, 1);
if(blue_state == HIGH){
lcd.println(" ON");
}
else if(blue_state == LOW){
lcd.println(" OFF");
}
delay(50);
}
else if(relay == 2){
lcd.clear();
red_state = !red_state;
digitalWrite(LampM, red_state);
//Serial.print("Kondisi = ");
//Serial.println(red_state);
lcd.setCursor (0,0);
lcd.println (" AIR CONDITIONER");
lcd.setCursor(0, 1);
if(red_state == HIGH){
lcd.println(" ON");
}
else if(red_state == LOW){
lcd.println(" OFF");
}
delay(50);
}
else if(relay == 3){
lcd.clear();
fan_state = !fan_state;
digitalWrite(Fan, fan_state);
//Serial.print("Kondisi = ");
//Serial.println(fan_state);
lcd.setCursor (0,0);
lcd.println (" OVEN");
lcd.setCursor(0, 1);
if(fan_state == HIGH){
lcd.println(" ON");
}
else if(fan_state == LOW){
lcd.println(" OFF");
}
delay(50);
}
else if(relay == 4){
lcd.clear();
door_state = !door_state;
digitalWrite(Door, door_state);
//Serial.print("Kondisi = ");
//Serial.println(door_state);
lcd.setCursor (0,0);
lcd.println (" WASHING MACHINE");
lcd.setCursor(0, 1);
if(door_state == HIGH){
lcd.println(" ON");
}
else if(door_state == LOW){
lcd.println(" OFF");
}
delay(50);
}
}