#define BLYNK_TEMPLATE_ID "TMPL6A7CbT9Iy"
#define BLYNK_TEMPLATE_NAME "Led"
#define BLYNK_AUTH_TOKEN "az34nrITzoOUA2rDS5hLkHcKtIlXP5EU"
// Thiết lập kết nối với Blynk
#define BLYNK_PRINT Serial // In ra các thông báo gỡ lỗi thông qua cổng nối tiếp
#include <WiFi.h>
#include <WiFiClient.h>
#include<BlynkSimpleEsp32.h>
// Khởi tạo các thư viện để kết nối ESP32 với Wifi, Blynk, quản lí kết nối TCP/IP
char ssid []= "Wokwi-GUEST";
char pass []= "";
// Lưu trữ kết nối Wifi: Tên wifi muốn kết nối, mật khẩu
const int led = 2; // Gắn led vào chân GPIO2
const int button = 15; //Gắn button vào chân GPIO15
BlynkTimer timer;// Quản lí các sự kiện định thời (sự kiện lặp đi lặp lại). Hàm này được sử dụng để thay thể hàm delay()
void checkbutton(); //Khởi tạo hàm checkbutton
int ledstate= LOW;
int buttonstate= HIGH;
//Khởi tạo trạng thái của led và button
BLYNK_CONNECTED(){
Blynk.syncVirtual(V0);
} //Yêu cầu Blynk Server gửi giá trị hiện tại của widget đến ESP32 thông qua chân ảo V0
BLYNK_WRITE(V0){
ledstate= param.asInt();// chuyển đổi giá trị của param (từ Blynk) sang dạng int (0,1) để cập nhật vào ESP32
digitalWrite(led, ledstate); // cập nhật trạng thái mới nhất của led
}
void checkbutton(){
if(digitalRead(button)== LOW){
if (ledstate==HIGH){
ledstate= !ledstate; //Đảo trạng thái của led
digitalWrite(led, ledstate); //cập nhật trạng thái của led
Blynk.virtualWrite(V2,ledstate);// gửi giá trị mới của led đến Blynk qua chân ảo V2
buttonstate=LOW;// cập nhật trạng thái của button
}
}
else{
buttonstate= HIGH;// tắt đèn led
}
}
void setup(){
Serial.begin (115200);// Thiết lập giao tiếp giữa ESP32 và máy tính với tốc độ 115200 bit/s
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);// thiết lập kết nối giữa esp32 với Blynk thông qua Wifi
pinMode(led, OUTPUT);// thiết lập chế độ hoạt động (OUTPUT) cho led
pinMode(button, INPUT_PULLUP); // thiết lập chế độ hoạt động (INPUT) cho button
digitalWrite(led, ledstate);
timer.setInterval(100L, checkbutton);// thiết lập hẹn giờ định kì (100mili giây) để gọi hàm checkbutton
}
void loop(){
Blynk.run();// Giữ kết nối liên tục giữa esp32 và Blynk
timer.run();// xử lí các bộ hẹn giờ đã được thiết lập
}