Skip to main content

Code mẫu SMS-CALL cảnh báo lửa và khí gas

Code mẫu ở đây dùng sản phẩm Kit phát triển 4G ESP32 LTE CAT 1 WIFI BLE TDM2401 Volte. 

Phần cảnh báo có thể dùng chung cho các sản phẩm khác, bạn cần điều chỉnh chân UART cho hợp lệ.

 


#include <HardwareSerial.h>

#define simSerial               Serial2
#define MCU_SIM_BAUDRATE        115200
#define MCU_SIM_TX_PIN          17
#define MCU_SIM_RX_PIN          16
#define MCU_SIM_EN_PIN          15

// Định nghĩa chân pin cảm biến lửa và MQ2
#define FLAME_PIN               18
#define MQ2_PIN                 32

// Ngưỡng giá trị cho cảm biến MQ2 và cảm biến lửa
#define MQ2_THRESHOLD           800
#define FLAME_THRESHOLD         LOW // Giả sử khi chân pin cảm biến lửa xuất hiện mức LOW là phát hiện lửa

#define PHONE_NUMBER            "0374766875"0..." //Điền số điện thoại của bạn

void sim_at_wait()
{
    delay(100);
    while (simSerial.available()) {
        Serial.write(simSerial.read());
    }
}

bool sim_at_cmd(String cmd) {
    simSerial.println(cmd);
    sim_at_wait();
    return true;
}


bool sim_at_send(char c){
    simSerial.write(c);
    return true;
}

void sent_sms(String message) {
    sim_at_cmd("AT+CMGF=1"); // Chế độ văn bản
    String temp = "AT+CMGS=\"";
    temp += PHONE_NUMBER;
    temp += "\"";
    sim_at_cmd(temp);
    sim_at_cmd(message); // Nội dung tin nhắn

    // Kết thúc tin nhắn
    sim_at_send(0x1A);
}



void call() {
    String temp = "ATD";
    temp += PHONE_NUMBER;
    temp += ";";
    sim_at_cmd(temp); // Gọi đi

    delay(20000); // Đợi 20 giây

    sim_at_cmd("ATH"); // Cúp máy
}



void setup() 
{
    /*  Bật nguồn mô-đun SIM  */
    pinMode(MCU_SIM_EN_PIN, OUTPUT); 
    digitalWrite(MCU_SIM_EN_PIN, LOW);

    delay(20);
    Serial.begin(115200);
    Serial.println("\n\n\n\n-----------------------\nHệ thống bắt đầu!!!!");

    // Đợi 8 giây để mô-đun SIM khởi động
    delay(8000);
    simSerial.begin(MCU_SIM_BAUDRATE, SERIAL_8N1, MCU_SIM_RX_PIN, MCU_SIM_TX_PIN);

    // Kiểm tra lệnh AT
    sim_at_cmd("AT");

    // Thông tin sản phẩm
    sim_at_cmd("ATI");

    // Kiểm tra khe SIM
    sim_at_cmd("AT+CPIN?");

    // Kiểm tra chất lượng tín hiệu
    sim_at_cmd("AT+CSQ");

    sim_at_cmd("AT+CIMI");

    // Khai báo chân pin cảm biến lửa là đầu vào
    pinMode(FLAME_PIN, INPUT); 

    // Khai báo chân pin cảm biến MQ2 là đầu vào
    pinMode(MQ2_PIN, INPUT); 


    // Đợi 5 giây
    delay(5000);   
}

void loop() 
{     
    // Kiểm tra phát hiện lửa từ cảm biến lửa
    int flame_detected = digitalRead(FLAME_PIN);
    Serial.print("Trạng thái cảm biến lửa: ");
    Serial.println(flame_detected);
    delay (1000);
    if (flame_detected == FLAME_THRESHOLD) {
        Serial.println("Cảnh báo, Phát hiện lửa");
        sent_sms("Fire Detected");

        delay(5000); // Chờ đợi cho tin nhắn được gửi đi

        call(); // Thực hiện cuộc gọi
    } 

    // Kiểm tra phát hiện khí gas từ cảm biến MQ2
    int MQ2_value = analogRead(MQ2_PIN);
    Serial.print("Giá trị MQ2: ");
    Serial.println(MQ2_value);
    delay (1000);
    if (MQ2_value > MQ2_THRESHOLD) {
        Serial.println("Phát hiện rò rỉ khí gas");
        sent_sms("Gas leak");

        delay(5000); // Chờ đợi cho tin nhắn được gửi đi

        call(); // Thực hiện cuộc gọi
    } 

    // Giao tiếp với mô-đun SIM qua cổng Serial
    if (Serial.available()){
        char c = Serial.read();
        simSerial.write(c);
    }
    sim_at_wait();
}