#define BLYNK_TEMPLATE_ID "TMPL6uGTmBWwS"
#define BLYNK_TEMPLATE_NAME "4 RELAY"
#define BLYNK_AUTH_TOKEN "pWNopgaKA2lonAWTrulkKlOuoozJ8_5_"
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include "DHT.h"
#define DHTTYPE DHT22 // DHT 11
#define DHTPIN 2
DHT dht(DHTPIN, DHTTYPE);
uint8_t time_delay = 0;
bool update_state1 = 0, update_state2 = 0, update_state3 = 0, update_state4 = 0, update_state5 = 0, update_state6 = 0 ;
#define user_wifi "Wokwi-GUEST" // tên wifi
#define pass_wifi "" // mật khẩu wifi
#define N1 17 // định nghĩa Nút nhấn 1 tương ứng với chan gpio
#define N2 5
#define N3 18
#define N4 19
#define N5 21
#define N6 3
#define R1 13
#define R2 12
#define R3 14
#define R4 27
#define R5 26
#define R6 25
void setup() {
Serial.begin(9600);
pinMode(N1, INPUT);
pinMode(N2, INPUT);
pinMode(N3, INPUT);
pinMode(N4, INPUT);
pinMode(N5, INPUT);
pinMode(N6, INPUT);
pinMode(R1, OUTPUT);
pinMode(R2, OUTPUT);
pinMode(R3, OUTPUT);
pinMode(R4, OUTPUT);
pinMode(R5, OUTPUT);
pinMode(R6, OUTPUT);
attachInterrupt(N1, handleInterrup1, FALLING);// su dung ngat
attachInterrupt(N2, handleInterrup2, FALLING);
attachInterrupt(N3, handleInterrup3, FALLING);
attachInterrupt(N4, handleInterrup4, FALLING);
attachInterrupt(N5, handleInterrup5, FALLING);
attachInterrupt(N6, handleInterrup6, FALLING);
Blynk.begin(BLYNK_AUTH_TOKEN, user_wifi, pass_wifi);
}
BLYNK_WRITE(V0) {
int p = param.asInt(); // convert value to interger
digitalWrite(R1, p);
update_state1 = 1;
}
BLYNK_WRITE(V1) {
int p = param.asInt(); // convert value to interger
digitalWrite(R2, p);
}
BLYNK_WRITE(V2) {
int p = param.asInt(); // convert value to interger
digitalWrite(R3, p);
}
BLYNK_WRITE(V3) {
int p = param.asInt(); // convert value to interger
digitalWrite(R4, p);
}
BLYNK_WRITE(V4) {
int p = param.asInt(); // convert value to interger
digitalWrite(R5, p);
}
BLYNK_WRITE(V7) {
int p = param.asInt(); // convert value to interger
digitalWrite(R6, p);
}
void loop() {
Blynk.run();
// Read Temp
float t = dht.readTemperature();
// Read Humi
float h = dht.readHumidity();
// Check isRead ?
if (isnan(h) || isnan(t)) {
delay(500);
Serial.println("Failed to read from DHT sensor!\n");
return;
}
Blynk.virtualWrite(V6, t);
Blynk.virtualWrite(V5, h);
Serial.print("\n");
Serial.print("Humidity: " + String(h) + "%");
Serial.print("\t");
Serial.print("Temperature:" + String(t) + " C");
delay(5000);
if (update_state1) {
int state1 = digitalRead(R1); // đọc lại trạng thái hiện tại của thiết bị
Blynk.virtualWrite(V0, state1); // gửi trạng thái thiết bị lên blynk thông qua pin ảo
update_state1 = 0;
}
if (update_state2) {
int state2 = digitalRead(R2);
Blynk.virtualWrite(V1, state2);
update_state2 = 0;
}
if (update_state3) {
int state3 = digitalRead(R3);
Blynk.virtualWrite(V2, state3);
update_state3 = 0;
}
if (update_state4) {
int state4 = digitalRead(R4);
Blynk.virtualWrite(V3, state4);
update_state4 = 0;
}
if (update_state5) {
int state5 = digitalRead(R5);
Blynk.virtualWrite(V4, state5);
update_state5 = 0;
}
if (update_state6) {
int state6 = digitalRead(R6);
Blynk.virtualWrite(V7, state6);
update_state6 = 0;
}
}
ICACHE_RAM_ATTR void handleInterrup1() {
if (millis() - time_delay > 200) { // nút nhấn phải được thao tác trong tgian tối thiểu 200ms
digitalWrite(R1, !digitalRead(R1));// dao trang thai R1
update_state1 = 1;
time_delay = millis();//gan ve gia tri bang timer
}
}
ICACHE_RAM_ATTR void handleInterrup2() {
if (millis() - time_delay > 200) {
digitalWrite(R2, !digitalRead(R2));
update_state2 = 1;
time_delay = millis();
}
}
ICACHE_RAM_ATTR void handleInterrup3() {
if (millis() - time_delay > 200) {
digitalWrite(R3, !digitalRead(R3));
update_state3 = 1;
time_delay = millis();
}
}
ICACHE_RAM_ATTR void handleInterrup4() {
if (millis() - time_delay > 200) {
digitalWrite(R4, !digitalRead(R4));
update_state4 = 1;
time_delay = millis();
}
}
ICACHE_RAM_ATTR void handleInterrup5() {
if (millis() - time_delay > 200) {
digitalWrite(R5, !digitalRead(R5));
update_state5 = 1;
time_delay = millis();
}
}
ICACHE_RAM_ATTR void handleInterrup6() {
if (millis() - time_delay > 200) {
digitalWrite(R6, !digitalRead(R6));
update_state6 = 1;
time_delay = millis();
}
}