[Unformatted code removed by moderator]
@nhutan2003 Please edit your post, using the pencil icon at the bottom, and add triple backticks at the beginning and end of your code so that it displays correctly.
Triple backticks look like this:
```
Copy and paste these if you can’t find the correct symbol on your keyboard.
Pete.
Compilation error: stray ‘`’ in program
if you don’t edit your original post and add triple backticks at the beginning and end the unformatted code will be deleted.
If you have a compilation error message I suggest you post the full message, including the part which shows which bit of the code that the error message is pointing to. You also need to use triple backticks at the beginning and end of compiler error message, ot that will be deleted too.
Pete.
// Lấy mã TOKEN trong Blynk
#define BLYNK_TEMPLATE_ID "TMPL6D-GgvLNc"
#define BLYNK_TEMPLATE_NAME "DO AN VI DIEU KHIEN"
#define BLYNK_AUTH_TOKEN "iFeIkQ5cgLAbH47LcwVtXmCaKIUvWxbM"
// Thông tin kết nối Wifi
char ssid[] = "Thao Tram 2.4G"; // Tên Wifi
char pass[] = "0939117738"; // Mật khẩu Wifi
bool fetch_blynk_state = true; //true or false
// Mã Hex điều khiển từ xa IF
#define IR_Button_1 0x80BF49B6
#define IR_Button_2 0x80BFC936
#define IR_Button_3 0x80BF33CC
#define IR_Button_4 0x80BF718E
#define IR_All_Off 0x80BF3BC4
// Khai báo thư viện
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <DHT.h>
#include <IRremote.h>
#define DHTPIN D4 //D4 pin connected with DHT
#define IR_RECV_PIN D9 // SD2 (IR receiver pin)
//
#define DHTTYPE DHT11 // Xác nhận loại cảm biến
IRrecv irrecv(IR_RECV_PIN); // Thư viện dùng để nhận tính hiệu IF từ remote điều khiển
decode_results results; // Dùng để lưu trử tín hiệu IR sau khi giải mã
// define the GPIO connected with Relays and switches
#define RelayPin1 5 //D1
#define RelayPin2 4 //D2
#define RelayPin3 14 //D3
#define RelayPin4 12 //D4
#define SwitchPin1 10 //SD3
#define SwitchPin2 D3 //D3
#define SwitchPin3 13 //D7
#define SwitchPin4 3 //RX
#define wifiLed 16 // Tham chiếu với chân led trên ESP 8266 để bật/tắt led
//Change the virtual pins according the rooms
#define VPIN_BUTTON_1 V1 // cảm biến chạm pin 1 để mở relay
#define VPIN_BUTTON_2 V2 // cảm biến chạm pin 2 để mở relay
#define VPIN_BUTTON_3 V3 // cảm biến chạm pin 3 để mở relay
#define VPIN_BUTTON_4 V4 // cảm biến chạm pin 4 để mở relay
#define VPIN_BUTTON_C V5 // Taoh chân ảo để tắt cả các relay thông qua ứng dụng BLYNK
#define VPIN_TEMPERATURE V6 // Hiển thị nhiệt độ từ DHT qua giao diện Blynk
#define VPIN_HUMIDITY V7 // Hiển thị độ ẩm từ DHT qua giao diện Blynk
// Khối Relay
bool toggleState_1 = HIGH; // Trạng thái mặt định của
bool toggleState_2 = HIGH; // Trạng thái mặt định của
bool toggleState_3 = HIGH; // Trạng thái mặt định của
bool toggleState_4 = HIGH; // Trạng thái mặt định của
// Khối cảm biến
bool SwitchState_1 = LOW; // Trạng thái mặt định của
bool SwitchState_2 = LOW; // Trạng thái mặt định của
bool SwitchState_3 = LOW; // Trạng thái mặt định của
bool SwitchState_4 = LOW; // Trạng thái mặt định của
int wifiFlag = 0;
float temperature1 = 0; // Lưu giá trị nhiệt độ đọc từ cảm biến DHT11
float humidity1 = 0; // Lưu giá trị độ ẩm đọc từ cảm biến DHT11
char auth[] = BLYNK_AUTH_TOKEN; // Xác nhận kêt nói với Blynk
int smokeA0 = A0;
int data = 0;
int sensorThres = 100;// Đặt ngưỡng giá trị cho biếm biến để phát hiện khói hoặc khí gas
BlynkTimer timer; // Gọi hàm theo định kì
DHT dht(DHTPIN, DHTTYPE); // Khởi tạo cảm biến DHT với chân kết nói và cảm biến
// Khi nút nhấn chuyển trạng thái
BLYNK_WRITE(VPIN_BUTTON_1) {
toggleState_1 = param.asInt();
digitalWrite(RelayPin1, !toggleState_1);
}
BLYNK_WRITE(VPIN_BUTTON_2) {
toggleState_2 = param.asInt();
digitalWrite(RelayPin2, !toggleState_2);
}
BLYNK_WRITE(VPIN_BUTTON_3) {
toggleState_3 = param.asInt();
digitalWrite(RelayPin3, !toggleState_3);
}
BLYNK_WRITE(VPIN_BUTTON_4) {
toggleState_4 = param.asInt();
digitalWrite(RelayPin4, !toggleState_4);
}
BLYNK_WRITE(VPIN_BUTTON_C) {
all_SwitchOff(); // chuyển trạng hái tất cả
}
void all_SwitchOff(){ //Đặt tất cả các biến trạng thái relay thành 0
toggleState_1 = 0; digitalWrite(RelayPin1, LOW); Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); delay(100); // Tắt Relaypin1 và cập nhận trạng thái trong Blynk và thời gian đợi 100ms
toggleState_2 = 0; digitalWrite(RelayPin2, LOW); Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2); delay(100); // Tắt Relaypin2 và cập nhận trạng thái trong Blynk và thời gian đợi 100ms
toggleState_3 = 0; digitalWrite(RelayPin3, LOW); Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3); delay(100); // Tắt Relaypin3 và cập nhận trạng thái trong Blynk và thời gian đợi 100ms
toggleState_4 = 0; digitalWrite(RelayPin4, LOW); Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4); delay(100); // Tắt Relaypin4 và cập nhận trạng thái trong Blynk và thời gian đợi 100ms
Blynk.virtualWrite(VPIN_HUMIDITY, humidity1); // Cập nhật giá trị độ ẩm trong Blynk
Blynk.virtualWrite(VPIN_TEMPERATURE, temperature1); // Cập nhật giá trị nhiệt độ trong Blynk
}
void checkBlynkStatus() { // khiểm tra trạng thái kết nói
bool isconnected = Blynk.connected(); // Kiểm tra xem thiết bị có đang kết nói với Blynk
if (isconnected == false) { // Nếu không kết nói được
wifiFlag = 1; // Đặt widiFlag thành 1 để chỉ ra không có kết nối
Serial.println("Blynk Not Connected"); // In thông báo ra cổng Serial
digitalWrite(wifiLed, HIGH); // // Bật LED trạng thái WiFi để chỉ ra rằng không có kết nối
}
if (isconnected == true) { // Nếu có kết nói được
if (!fetch_blynk_state){ // Đặt widiFlag thành 0 để chỉ ra không có kết nối
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); // Cập nhật trạng thái của các nút trong Blynk với trạng thái hiện tại của các RelayPin1
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2); // Cập nhật trạng thái của các nút trong Blynk với trạng thái hiện tại của các RelayPin2
Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3); // Cập nhật trạng thái của các nút trong Blynk với trạng thái hiện tại của các RelayPin3
Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4); // Cập nhật trạng thái của các nút trong Blynk với trạng thái hiện tại của các RelayPin4
}
digitalWrite(wifiLed, LOW); //Tắt LED trạng thái WiFi để chỉ ra rằng có kết nối
Serial.println("Blynk Connected"); // In thồn báo ra cổng Serial
}
}
void readSensor(){
float h = dht.readHumidity();
float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
if (isnan(h) || isnan(t)) { //// Nếu đọc cảm biến DHT thất bại
Serial.println("Không đọc được từ cảm biến DHT!"); //In thông báo lỗi ra cổng Serial
Serial.print("Pin A0: ");
Serial.println(data); // In giá trị cảm biến khói ra cổng Serial
return; // Kết thúc hàm nếu có lỗi
}
else {
humidity1 = h; // Cập nhật biến độ ẩm
temperature1 = t; // Cập nhật biến độ ẩm
Serial.println(temperature1); //In ra cổng Serial
Serial.println(humidity1); //In ra cổng Serial
}
}
void sendSensor() // Hàm đọc giá trị cảm biến
{
readSensor();
Blynk.virtualWrite(VPIN_HUMIDITY, humidity1); // Gửi giá trị độ ẩm đến Blynk
Blynk.virtualWrite(VPIN_TEMPERATURE, temperature1); // Gửi giá trị nhiệt độ đến Blynk
int data = analogRead(smokeA0);
Blynk.virtualWrite(V0, data);
Serial.print("Pin A0: ");
Serial.println(data);
if(data > 399) // Change the Trashold value
{
Blynk.logEvent("BÁO ĐỘNG🔥🔥🔥🔥", "Phát Hiện Lửa !!!");
Blynk.logEvent("rain", "Water Detected!");
}
}
void ir_remote(){ // Hàm xử ký tín hiệu điều khiển từ xa IF
if (irrecv.decode(&results)) { // Nếu có tín hiệu IR được nhận và giải mã
switch(results.value){ // Kiểm tra giá trị của tín hiệu IR
case IR_Button_1:
digitalWrite(RelayPin1, toggleState_1); // Đổi trạng thái relay 1
toggleState_1 = !toggleState_1; // Cập nhật biến trạng thái
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1);// Gửi trạng thái mới đến Blynk
delay(100); // Đợi 100ms
break;
case IR_Button_2:
digitalWrite(RelayPin2, toggleState_2);
toggleState_2 = !toggleState_2;
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
delay(100);
break;
case IR_Button_3:
digitalWrite(RelayPin3, toggleState_3);
toggleState_3 = !toggleState_3;
Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3);
delay(100);
break;
case IR_Button_4:
digitalWrite(RelayPin4, toggleState_4);
toggleState_4 = !toggleState_4;
Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4);
delay(100);
break;
case IR_All_Off:
all_SwitchOff(); // Gọi hàm tắt tất cả relay
break;
default : break; // Nếu không khớp với bất kỳ trường hợp nào, không làm gì cả
}
Serial.println(results.value, HEX);
irrecv.resume(); // Chuẩn bị nhận tín hiệu IR tiếp theo
}
}
void manual_control() // Hàm kiểm tra và cập nhật trạng thái công tắc và Relay
{
if (digitalRead(SwitchPin1) == LOW && SwitchState_1 == LOW) {
digitalWrite(RelayPin1, LOW); // Bật Relay1
toggleState_1 = HIGH; // Cập nhật biến trạng thái
SwitchState_1 = HIGH; // // Cập nhật biến trạng thái công tắc
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); // Gửi trạng thái mới đến Blynk
Serial.println("Switch-1 on"); // In thông báo ra cổng Serial
}
if (digitalRead(SwitchPin1) == HIGH && SwitchState_1 == HIGH) {
digitalWrite(RelayPin1, HIGH);
toggleState_1 = LOW;
SwitchState_1 = LOW;
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1);
Serial.println("Switch-1 off");
}
if (digitalRead(SwitchPin2) == LOW && SwitchState_2 == LOW) {
digitalWrite(RelayPin2, LOW);
toggleState_2 = HIGH;
SwitchState_2 = HIGH;
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
Serial.println("Switch-2 on");
}
if (digitalRead(SwitchPin2) == HIGH && SwitchState_2 == HIGH) {
digitalWrite(RelayPin2, HIGH);
toggleState_2 = LOW;
SwitchState_2 = LOW;
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
Serial.println("Switch-2 off");
}
if (digitalRead(SwitchPin3) == LOW && SwitchState_3 == LOW) {
digitalWrite(RelayPin3, LOW);
toggleState_3 = HIGH;
SwitchState_3 = HIGH;
Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3);
Serial.println("Switch-3 on");
}
if (digitalRead(SwitchPin3) == HIGH && SwitchState_3 == HIGH) {
digitalWrite(RelayPin3, HIGH);
toggleState_3 = LOW;
SwitchState_3 = LOW;
Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3);
Serial.println("Switch-3 off");
}
if (digitalRead(SwitchPin4) == LOW && SwitchState_4 == LOW) {
digitalWrite(RelayPin4, LOW);
toggleState_4 = HIGH;
SwitchState_4 = HIGH;
Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4);
Serial.println("Switch-4 on");
}
if (digitalRead(SwitchPin4) == HIGH && SwitchState_4 == HIGH) {
digitalWrite(RelayPin4, HIGH);
toggleState_4 = LOW;
SwitchState_4 = LOW;
Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4);
Serial.println("Switch-4 off");
}
}
void setup()
{
Serial.begin(9600); // Khởi tạo cổng Serial 9600 baund
Blynk.begin(auth, ssid, pass); //Kết bói với Blynk
timer.setInterval(100L, sendSensor); //Thiết lập thời gian gửi dữ liệu đến cảm biến
pinMode(smokeA0, INPUT); //Khai báo chân đầu vào cảm biến khói
pinMode(RelayPin1, OUTPUT); //Khai báo chân đầu vào RelayPin1
pinMode(RelayPin2, OUTPUT); //Khai báo chân đầu vào RelayPin2
pinMode(RelayPin3, OUTPUT); //Khai báo chân đầu vào RelayPin3
pinMode(RelayPin4, OUTPUT); //Khai báo chân đầu vào RelayPin4
pinMode(wifiLed, OUTPUT); // Cài đặt chân LED WiFi là đầu ra
pinMode(SwitchPin1, INPUT_PULLUP); //Cài đặt chân công tắc là đầu vào với điện trở kéo lên
pinMode(SwitchPin2, INPUT_PULLUP);
pinMode(SwitchPin3, INPUT_PULLUP);
pinMode(SwitchPin4, INPUT_PULLUP);
// Khi khởi động, tất cả relay nên được TẮT
digitalWrite(RelayPin1, !toggleState_1);
digitalWrite(RelayPin2, !toggleState_2);
digitalWrite(RelayPin3, !toggleState_3);
digitalWrite(RelayPin4, !toggleState_4);
irrecv.enableIRIn(); // Kích hoạt cảm biến IR
dht.begin(); // Kích hoạt cảm biến DHT
digitalWrite(wifiLed, HIGH); // Bật LED WiFi
WiFi.begin(ssid, pass); //// Kết nối WiFi
timer.setInterval(100L, checkBlynkStatus); // Kiểm tra trạng thái Blynk mỗi
timer.setInterval(100L, sendSensor); // Kiểm tra cảm biến Blynk mỗi
Blynk.config(auth); // Cấu hình Blynk
delay(100); // Đợi 1 giây
if (!fetch_blynk_state){
Blynk.virtualWrite(VPIN_BUTTON_1, toggleState_1); // Cập nhật trạng thái ban đầu của các nút trong Blynk
Blynk.virtualWrite(VPIN_BUTTON_2, toggleState_2);
Blynk.virtualWrite(VPIN_BUTTON_3, toggleState_3);
Blynk.virtualWrite(VPIN_BUTTON_4, toggleState_4);
}
}
void loop() // Vòng lập
{
manual_control();// Kiểm soát bằng tay
ir_remote(); //Điều khiển từ xa hồng ngoại
Blynk.run(); // Điều khiển thông qua ứng dụng Blynk
timer.run(); //// Chạy các hàm theo định kỳ đã thiết lập bởi timer
}
[Unformatted compiler error message removed by moderator]
Compilation error: stray ‘`’ in program
As I said…
Pete.