#define BLYNK_TEMPLATE_ID "TMPL6Q2ULC2Vv" //Id cua template tren blynk
#define BLYNK_TEMPLATE_NAME "smartHome" // ten cua template tren blynk
#define BLYNK_AUTH_TOKEN "xBFmGopuzHwtN2E7aJW4yRWJJ1KKa9Ak" // ma xac thuc(token) de ket noi voi blynk
//#include <WiFi.h>
#include <BlynkSimpleEsp32.h> // thu vien de ket noi voi blynk tren esp32
//----------------------------------
#include <Wire.h> //thu vien de ket noi I2c(ket noi voi LCD) ;giup giam chan cam
#include <LiquidCrystal_I2C.h> // thu vien ket noi man hinh dieu khien LCD
#include <ESP32Servo.h> // thu vien de dieu khien servo
#include <Keypad.h> // thu vien doc thong tin tu keypad
#define LCD_I2C_ADDR 0x27 // dia chi cua module lcd I2C
LiquidCrystal_I2C lcd(0x27, 16, 2); // khoi tao doi tuong LCD I2C voi kich thuoc man hinh cu the
Servo servo; // khai bao servo co ten la servo
const byte ROW_NUM = 4; // khai bao so hang cua keypad
const byte COL_NUM = 4; // khai bao so cot cua keypad
char keys[ROW_NUM][COL_NUM] = {
{ '1', '2', '3', 'A' },
{ '4', '5', '6', 'B' },
{ '7', '8', '9', 'C' },
{ '*', '0', '#', 'D' }
}; // khai bao mang 4x4 , voi cac gia tri la gia tri tren keypad tuong ung
byte pin_rows[ROW_NUM] = { 25, 26, 27, 14 }; // pin hang tu R1-4
byte pin_cols[COL_NUM] = { 5, 18, 32, 33 };// pin cot tu C1-4
Keypad keypad = Keypad(makeKeymap(keys), pin_rows, pin_cols, ROW_NUM,COL_NUM); // thiet lap keypad
String password = "1111"; // pass mac dinh la 1111
bool codeEntered = false; // trang thai pass da dung hay chua
String pwd = ""; // khai bao chuoi de luu pass nhap tu ban phim
int n = 0; // khai bao so gia tri duoc nhap vao tu ban phim
int resetPwd = 0; // khai bao gia tri so lan nhap pass
//-------------------------------------
char auth[] = "xBFmGopuzHwtN2E7aJW4yRWJJ1KKa9Ak"; // ma xac thuc(token) de ket noi voi Blynk
char ssid[] = "Wokwi-GUEST"; // ten mang wifi ket noi den(ao vi day la mo phong)
char pass[] = "";//mat khau mang wifi(nay cung co san)
#define purpleLed 4
#define purpleButton 0
#define redLed 16
#define redButton 2
#define whiteLed 17
#define whiteButton 15 // pin led, button tuong ung
int p1;// cac bien lay du lieu tu blynk
int buttonsauPurple; // bien luu gia tri khi nhan nut ButtonPurple
int p2;// cac bien lay du lieu tu blynk
int buttonsauRed;// bien luu gia tri khi nhan nut ButtonRed
int p3;// cac bien lay du lieu tu blynk
int buttonsauWhite; // bien luu gia tri khi nhan nut ButtonWhites
int p4;// cac bien lay du lieu tu blynk
void setup() {
// put your setup code here, to run once:
Serial.begin(9600); // thiet lap cong series de gui va nhan du lieu 9600 bit moi giay
// Blynk.begin(auth,ssid,pass);
//-------------
servo.attach(23); // chan servo duoc gan
servo.write(90); // trang thai ban dau cua servo( dong cua)
lcd.init(); // khoi tao lcd
lcd.backlight();// bat den nen lcd
introScreen(); // goi ham introScreen() de hien thi
delay(200); // tre 0,2s
// lcd.print("Hello");
//------------------
// khoi tao chan led, button o trang thai output,input tuong ung, va cac led dang tat
pinMode(purpleLed, OUTPUT);
pinMode(purpleButton, INPUT);
digitalWrite(purpleLed, LOW);
pinMode(redLed, OUTPUT);
pinMode(redButton, INPUT);
digitalWrite(purpleLed, LOW);
pinMode(whiteLed, OUTPUT);
pinMode(whiteButton, INPUT);
digitalWrite(purpleLed, LOW);
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // co gang ket noi voi blynk server theo cau hinh tuong ung
}
void loop() {
// Serial.println(digitalRead(button));
// }
//---------------------------------
// neu mat khau dung, thi goi ham grantAccess() con khong thi tiep tuc goi ham checkCode()
if (!codeEntered) {
checkCode();
}
else {
grantAccess();
}
//------------------
// doc lien tuc gia tri cua button , neu co thay doi, thay doi trang thai led
buttonsauPurple = digitalRead(purpleButton);
delay(70);
if (digitalRead(purpleButton) != buttonsauPurple) {
digitalWrite(purpleLed, !digitalRead(purpleLed)); // dao trang thai led hien tai
delay(50);
}
buttonsauRed = digitalRead(redButton);
delay(70);
if (digitalRead(redButton) != buttonsauRed) {
digitalWrite(redLed, !digitalRead(redLed)); // dao trang thai led hien tai
delay(50);
}
buttonsauWhite = digitalRead(whiteButton);
delay(70);
if (digitalRead(whiteButton) != buttonsauWhite) {
digitalWrite(whiteLed, !digitalRead(whiteLed)); // dao trang thai led hien tai
delay(50);
}
Blynk.run(); // lay gia tri tu blynk server
}
// lay gia tri tu blynk server va dat trang thai led tuong ung 0:tat, 1 : bat
BLYNK_WRITE(V0) {
p1 = param.asInt();
digitalWrite(purpleLed, p1);
delay(100);
}
// lay gia tri tu blynk server va dat trang thai led tuong ung 0:tat, 1 : bat
BLYNK_WRITE(V1) {
p2 = param.asInt();
digitalWrite(redLed, p2);
delay(100);
}
// lay gia tri tu blynk server va dat trang thai led tuong ung 0:tat, 1 : bat
BLYNK_WRITE(V2) {
p3 = param.asInt();
digitalWrite(whiteLed, p3);
delay(100);
}
//// lay gia tri tu blynk server va dat trang thai servo tuong ung 0:dong cua, 1 : mo cua
BLYNK_WRITE(V3) {
p4 = param.asInt();
if(p4 == 1) {
servo.write(180);
delay(500);
servo.write(90);
delay(500);
} else {
servo.write(90);
delay(500);
}
}
void checkCode() {
char key = keypad.getKey(); // lay gia tri nhap tu keypad
if (key != NO_KEY) { // neu la key
pwd += key; // noi key vao password
lcd.setCursor(n, 1); // set vi tri hien thi
lcd.print("*"); // hien thi dau * thay vi key
n++;
}
if (n == 4) { // neu du 4 gia tri thi check xem password == "1111" khong
if (pwd.equalsIgnoreCase(password)) {
codeEntered = true; // dung thi thi set tragn thai codeEntered = true de mo cua
} else {
lcd.setCursor(0, 0); // set vi tri de hien thi chu "Mat khau sai" h1c1
lcd.print("Mat khau sai"); // hien thi chu
resetPwd++; // so lan go mk tang len
if(resetPwd == 4){ // qua 4 lan go mk sai thi thong bao go sai, bat cho 10s de co the go tiep
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Thu lai sau 5s");
delay(7000); // cho 10s
resetPwd = 0;// dat so lan go sai password ve 0 de co the tiep tuc nhap
}
lcd.setCursor(0, 1);
lcd.print("Nhap lai mkhau"); // nhap lai mat khau
delay(500);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nhap mat khau"); // nhap mat khau
lcd.setCursor(0, 1);
pwd = ""; // pwd ve chuoi rong de nhap lai
}
n = 0; // set gia tri do dai mk ve 0 de nhap lai
}
}
void grantAccess() { // ham mo cua
lcd.setCursor(0, 0);
lcd.print("Mat khau dung");
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Wel come");
codeEntered = false; // setcodeEntered ve khong de nguoi khac co the mo
pwd = ""; // set pwd ve rong de nhap pass lai
delay(200);
servo.write(180); // mo cua
delay(500);
servo.write(90); // dong cua
delay(500);
}
void introScreen() { // hien thi nhung trang thai ban dau
lcd.clear();
lcd.setCursor(3, 0);
lcd.print("Smart Home");
lcd.setCursor(2, 1);
lcd.print("Welcome back");
delay(600);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Nhap mat khau");
lcd.setCursor(0, 1);
}