#define BLYNK_TEMPLATE_ID "TMPL2d3ZrXCB0"//get it from both app and web
#define BLYNK_TEMPLATE_NAME "smart home"
#define BLYNK_AUTH_TOKEN "sZqpz8MSt4uXr9kfJHtzpcZ5bSawDONU"//get only from web
#define BLYNK_PRINT Serial //all defines must be before including BLYNK LIBRARY
#define LIVINGLIGHT 5
#define BEDROOMLIGHT 15
#define TRIALS 3
#define EEPROM_SIZE 4
#define PASS_LEN 4
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <EEPROM.h>
//include libraries for temperature sensor
#include <OneWire.h>
#include <DallasTemperature.h>
#include <ESP32Servo.h>
#define TEMPBUS 2
//create bus instance
OneWire oneWire(TEMPBUS);
//CREATE TEMPERATURE SENSOR INSTANCE
DallasTemperature tempSensor(&oneWire);
//create servo instance
Servo curtains;
Servo door;
int pos=0;
//esp wifi connection
char ssid[]="Wokwi-GUEST";
char pass[]="";
String password="1234";
char firstTime=1;
char secure=0;
const char address=0;
static char tried;
unsigned char id;
//when you get respone from dashboard(from blynk dash board)
BLYNK_WRITE(V0)
{ if(secure)
{
int val= param.asInt();
digitalWrite(LIVINGLIGHT,val);
}
}
BLYNK_WRITE(V1)//WIFI CONFIG
{ if(secure)
{
id=1;
char n = WiFi.scanNetworks();
for(char i=0;i<n;i++)
{
Blynk.virtualWrite(V7,String(i+1)+"."+String(WiFi.SSID(i))+"\t"+String(WiFi.RSSI(i))+"\t"+String((WiFi.encryptionType(i) == WIFI_AUTH_OPEN) ? "not-secured" : "secured"));
}
}
}
BLYNK_WRITE(V2)//CHANGE PASSWORD
{ if(secure)
{
Blynk.virtualWrite(V7,"Enter your current password first: ");
id=2;
Blynk.virtualWrite(V7,"CHOOSE THE NETWORK.");
}
}
BLYNK_WRITE(V3)
{ if(secure)
{
int val= param.asInt();
digitalWrite(BEDROOMLIGHT,val);
}
}
BLYNK_WRITE(V5)
{ if(secure)
{
int input=(int)param.asInt();
input=map(input,0,100,0,180);
if(pos<input)
{
for(pos=pos;pos<=input;pos++)
{
curtains.write(pos);
delay(15);
}
}
else if(pos>input)
{
for(pos=pos;pos>=input;pos--)
{
curtains.write(pos);
delay(15);
}
}
}
}
BLYNK_WRITE(V7)//TERMINAL
{ //enter password default password=1234
String input=param.asStr();
if((!secure)&&(tried>0))
{
Serial.print("PASSWORD ENTERED : ");
Serial.println(input);
if(input==EEPROM.readString(address))
{
secure=1;
Serial.println("the password is correct");
Blynk.virtualWrite(V7,"WELCOME HOME SIR!");
Blynk.virtualWrite(V4,255);//turn on the led
for(int i=180;i>=0;i++)//open the door
{
door.write(pos);
delay(10);
}
}
else if(input!=EEPROM.readString(address))
{
tried--;
Serial.println("the password is wrong");
Serial.print("trials left: ");
Serial.println(String(tried));
Blynk.virtualWrite(V7,"WRONG PASSWORD");
if(tried!=0)
{ String msg=("TRIALS LEFT: " + String(tried));
Blynk.virtualWrite(V7,msg);
}
else
{
Blynk.virtualWrite(V7,"Home will no longer recieve any response");
}
}
}
else if(secure)
{ static char c=0;
switch(id){
case 1:
//input password check
if(!c)
{ char index=input[0];
(String)ssid=WiFi.SSID(index);
if(WiFi.encryptionType(index)!=WIFI_AUTH_OPEN)//secured
{
Blynk.virtualWrite(V7,"Enter Network Password: ");
c=1;
break;
}
else
{
(String)pass="";
Blynk.virtualWrite(V7,"Network Password: ");
}
}
else if(c)
{
(String)pass=input;
c=0;
}
Blynk.begin(BLYNK_AUTH_TOKEN,ssid,pass,"blynk.cloud",8080);
Serial.println(ssid);
Serial.println(pass);
break;
case 2: //change password
//c=0;//current password check
if(!c)
{ password=EEPROM.readString(address);
if(input==EEPROM.readString(address))
{
Blynk.virtualWrite(V7,"Enter your NEW password: ");
c=1;
}
else
{
Blynk.virtualWrite(V7,"Wrong Password");
}
break;
}
else if(c==1)//new password
{
password=input;
Blynk.virtualWrite(V7,"Re-enter your new password");
c=2;
}
else if(c==2)
{
if(input==password)
{
EEPROM.writeString(address,input);
EEPROM.commit();
Blynk.virtualWrite(V7,"your password is updated");
Serial.print("New password is :");
Serial.println(EEPROM.readString(address));
Blynk.virtualWrite(V2,0);
c=0;
}
else
{
password=EEPROM.readString(address);
Blynk.virtualWrite(V7,"WRONG MATCH");
c=0;
Blynk.virtualWrite(V2,0);
}
}
}
}
}
//when you are connected to blynk cloud
BLYNK_CONNECTED()
{
Blynk.virtualWrite(V7,"Please Enter The Password: ");
secure=0;
for(int i=0;i<=180;i++)//close the door
{
door.write(pos);
delay(10);
}
Blynk.virtualWrite(V4,0);//turn off open led
tried=3;
}
void setup()
{ //wifi mode station
WiFi.mode(WIFI_STA);
//initiate serial baud rate
Serial.begin(115200);
//living room lightenning configuration
pinMode(LIVINGLIGHT, OUTPUT);
//bedroom ligtening config
pinMode(BEDROOMLIGHT, OUTPUT);
//initialize the tempreture sensor pin
pinMode(TEMPBUS, OUTPUT);
//connect to blynk platform
Blynk.begin(BLYNK_AUTH_TOKEN,ssid,pass,"blynk.cloud",8080);
//initiate the NV EEPROM
EEPROM.begin(EEPROM_SIZE);
//store system password in EEPROM
EEPROM.writeString(address,"1234");//default password
EEPROM.commit();
//display stored password
Serial.println(EEPROM.readString(address));
tempSensor.begin();
curtains.attach(13);
door.attach(4);
}
void loop()
{
//listen to blynk platform
Blynk.run();
bool connect = Blynk.connected();
if(connect != true)
{
Serial.println("YOU'RE DISCONNECTED");
delay(2000);
//FUTURE IMPROVEMENT send MQTT MSG to user
}
else
{ tempSensor.requestTemperatures(); // Send the command to get temperatures
float tempC=tempSensor.getTempCByIndex(0);
//DISPLAY TEMPERATURE
Serial.println(tempC);
Blynk.virtualWrite(V8,String(tempC)+"°C");
if(tempC == DEVICE_DISCONNECTED_C)
{
Serial.println("TEMPERATURE SENSOR IS DISCONNECTED");
delay(2000);
}
}}