#define BLYNK_TEMPLATE_ID "TMPL6hriOzg6I"
#define BLYNK_TEMPLATE_NAME "Fire protection system"
#define BLYNK_AUTH_TOKEN "Xd-JxsKbobBmtAJhOimKX9vj5ZD4RkFQ"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <DHT.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
#define DHTPIN 27 // Mention the digital pin where you connected
#define DHTTYPE DHT22 // DHT 22
DHT dht(DHTPIN, DHTTYPE);
int led1=15, led2=4, led3=16, led4=22;
int relay1=17, relay2=18, relay3=19, relay4=21;
int PIN_TRIG = 25;
int PIN_ECHO = 33;
int const LDR = 26;
int ldrsensor;
int duration;
int celsius;
const float BETA = 3950;
#define BUTTON_PIN 12
boolean bt1_state=HIGH;
const int pinVirtual1 = V0;
const int pinVirtual2 = V1;
const int pinVirtual3 = V2;
void setup()
{
Serial.begin(115200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
pinMode(26,INPUT);
pinMode(27,INPUT);
pinMode(PIN_TRIG, OUTPUT);
pinMode(PIN_ECHO, INPUT);
analogReadResolution(10);
dht.begin();
Blynk.begin(auth, ssid, pass);
}
void loop()
{
// Đọc giá trị nhiệt độ NTC
float t = dht.readTemperature();
Serial.print("Nhiet do: ");
Serial.print(t);
Serial.print(" ℃");
// Đọc giá trị nhiệt độ LDR
int ldrsensor = analogRead(LDR);
Serial.print(" - Do sang: ");
Serial.print(ldrsensor);
// Đọc giá trị nhiệt độ Ultra
digitalWrite(PIN_TRIG, HIGH);
delayMicroseconds(10);
digitalWrite(PIN_TRIG, LOW);
int duration = pulseIn(PIN_ECHO, HIGH);
long khoangcach = duration/58;
Serial.print(" - Khoang canh: ");
Serial.print(khoangcach);
Serial.println(" cm");
if (t < 40 || khoangcach > 300 || ldrsensor < 500)
{
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(relay1, LOW);
digitalWrite(relay2, LOW);
digitalWrite(relay3, LOW);
digitalWrite(relay4, LOW);
}
if (t >= 40)
{
digitalWrite(led1, HIGH);
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, HIGH);
digitalWrite(relay4, LOW);
Blynk.logEvent("temp_alert","Canh bao nhiet do cao");
}
if (khoangcach > 0 && khoangcach < 300)
{
digitalWrite(led2, HIGH);
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, HIGH);
digitalWrite(relay4, LOW);
Blynk.logEvent("distance_alert","Canh bao khoang cach");
}
if (ldrsensor >= 500)
{
digitalWrite(led3, HIGH);
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, HIGH);
digitalWrite(relay4, LOW);
}
if (t > 60 && khoangcach < 40)
{
digitalWrite(led1, HIGH);
digitalWrite(led2, HIGH);
digitalWrite(relay1, HIGH);
digitalWrite(relay2, HIGH);
digitalWrite(relay3, HIGH);
digitalWrite(relay4, HIGH);
Blynk.logEvent("water_pump","Bom chua chay");
}
Blynk.run();
check_button();
// Đọc trạng thái của các LED (giả sử các LED đã được điều khiển bằng một cách nào đó)
int state1 = digitalRead(led1);
int state2 = digitalRead(led2);
int state3 = digitalRead(led3);
// Gửi trạng thái lên Blynk
Blynk.virtualWrite(pinVirtual1, state1);
Blynk.virtualWrite(pinVirtual2, state2);
Blynk.virtualWrite(pinVirtual3, state3);
}
BLYNK_WRITE(V3){
int p = param.asInt();
digitalWrite(led4, p);
delay(10);
}
void check_button()
{
if(digitalRead(BUTTON_PIN)==LOW){
if(bt1_state==HIGH){
digitalWrite(led4,!digitalRead(led4));
Blynk.virtualWrite(V3,digitalRead(led4));
bt1_state=LOW;
delay(10);
}
}else{
bt1_state=HIGH;
}
}