//Dinh nghia template Blynk
#define BLYNK_TEMPLATE_ID "TMPL6aVbnzbQZ"
#define BLYNK_TEMPLATE_NAME "SmartHome"
#define BLYNK_AUTH_TOKEN "_hldC1VeLhyKhbDSK9q8pu_EWfibl2ep"
//Khai bao cac thu vien
#include <WiFi.h>
#include <WiFiClient.h> // tạo một máy để có thể kết nối với một địa IP đã được định nghĩa 
#include <BlynkSimpleEsp32.h>
#include <DHT.h>

#define BLYNK_PRINT Serial 
#define PIN_TRIG 14
#define PIN_ECHO 27
const int Lounge = 23;
const int Dining = 22;
const int Bedroom = 21;
const int Warning=13;
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
#define DHTPIN 12
DHT dht(DHTPIN, DHTTYPE);
float temp,humi ;
int mode;
char auth[] = "_hldC1VeLhyKhbDSK9q8pu_EWfibl2ep";
char ssid[] = "Wokwi-GUEST";
char pass[] = "";

void setup() {
  Serial.begin (115200);
  dht.begin();
  pinMode(Lounge, OUTPUT);
  pinMode(PIN_TRIG, OUTPUT);
  pinMode(PIN_ECHO, INPUT);
  pinMode(Dining, OUTPUT);
  pinMode(Bedroom, OUTPUT);
  pinMode(Warning, OUTPUT);
  Blynk.begin (auth,ssid,pass);
}
// đo nhiệt độ độ ẩm trong nha
void DHT22Read(){
  float temp = dht.readTemperature();
  float humi = dht.readHumidity();
  Serial.println("Temp: " + String(temp) + "°C");
  Serial.println("Humidity: " + String(humi) + "%");
  Serial.println("---");
  Blynk.virtualWrite(V4, temp);
  Blynk.virtualWrite(V5, humi);
}
//giám sát lượng nước và bơm tự động
void DistanceRead(){
  // Start a new measurement:
  digitalWrite(PIN_TRIG, HIGH);
  delayMicroseconds(10);
  digitalWrite(PIN_TRIG, LOW);
  // Read the result:
  long duration = pulseIn(PIN_ECHO, HIGH);
  float h = (duration*0.034)/2;
  Serial.println("Distance: " + String(h) + "cm");
  Serial.println("---");
  if(h < 5){
    digitalWrite(Warning, HIGH);
  }
  else {
    digitalWrite(Warning, LOW);
  } 
}
// Check status
void status(int x,int y){
  int status = digitalRead(x);
  Blynk.virtualWrite(y, status);
}
void loop() {
  status(Lounge,V7);
  status(Dining,V8);
  status(Bedroom,V9);
  status(Warning,V6);
  Blynk.run(); //sử dụng để duy trì kết nối, gửi và nhận dữ liệu
  DHT22Read();
  DistanceRead();
}
BLYNK_WRITE(V0) {
int p = param.asInt();
digitalWrite(Lounge, p);
}
BLYNK_WRITE(V1) {
int s = param.asInt();
digitalWrite(Dining, s);
}
BLYNK_WRITE(V2) {
int r = param.asInt();
digitalWrite(Bedroom, r);
}
$abcdeabcde151015202530354045505560fghijfghij
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module