#define BLYNK_TEMPLATE_ID "blynk_id"
#define BLYNK_TEMPLATE_NAME "blynk_name"
#define BLYNK_AUTH_TOKEN "auth_token"
// #define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <string.h>
#include <DHT.h>
// define DHT library catch temporary
#define DHT_TYPE DHT22
#define DHT_PIN 14
DHT dht(DHT_PIN, DHT_TYPE);
// define LED
#define LED_LIV 27 // Chân LED cho phòng khách
#define LED_KIT 12 // Chân LED cho phòng ăn
// define PIR
#define PIR 19 // Chân đọc tín hiệu từ cảm biến chuyển động hồng ngoại (PIR)
// define servo
#include <ESP32Servo.h>
#define SERVO 23 // Chân kết nối với Servo Motor
Servo servo;
// define buzzer
#define BUZZER 15 // Chân kết nối với Buzzer
int button, pos = 0; // trạng thái nút và góc của servo motor
String report; //trạng thái thông báo
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "wifi_test";
char pass[] = "123456";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
Blynk.config(auth);
Blynk.begin(auth, ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print("Đang kết nối WiFi");
}
Serial.println("Đã kết nối!");
dht.begin();
pinMode(LED_LIV, OUTPUT);
pinMode(PIR, INPUT);
pinMode(BUZZER, OUTPUT);
pinMode(LED_KIT, OUTPUT);
servo.attach(SERVO);
servo.write(0);
}
BLYNK_WRITE(V3) {
button = param.asInt();
if (button == 1) {
digitalWrite(LED_LIV, HIGH);
} else {
digitalWrite(LED_LIV, LOW);
}
}
BLYNK_WRITE(V4) {
pos = param.asInt();
servo.write(pos);
delay(30);
}
void loop() {
Blynk.run();
float temperature = dht.readTemperature();
const int IP = digitalRead(PIR);
Serial.println(IP);
delay(100);
if (isnan(temperature)) {
delay(500);
Serial.println("Lỗi khi đọc từ cảm biến DHT!");
return;
}
if (temperature > 70) {
report = "có cháy!";
analogWrite(BUZZER, 255);
delay(1000);
pos = 180;
servo.write(180);
} else {
analogWrite(BUZZER, 0);
report = "BÌNH THƯỜNG";
}
if (IP == 1) {
digitalWrite(LED_KIT, HIGH);
delay(1000);
} else {
digitalWrite(LED_KIT, LOW);
delay(1000);
}
// Gửi giá trị lên Blynk
Blynk.virtualWrite(V0, temperature); // Gửi giá trị nhiệt độ lên Blynk
Blynk.virtualWrite(V2, report); // Gửi trạng thái báo cáo lên Blynk
Blynk.virtualWrite(V3, button); // Gửi trạng thái nút điều khiển LED lên Blynk
Blynk.virtualWrite(V4, pos); // Gửi trạng thái góc của Servo Motor lên Blynk
// In giá trị ra Serial Monitor
Serial.print("Nhiệt độ ");
Serial.print(temperature);
delay(2000);
}