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

Bạn có thể nối mạch như sau:

image.png

Lập trình:

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ệ.

Bạn có thể tham khảo video hướng dẫn cụ thể tại đây: https://www.youtube.com/watch?v=JW7ia1GnZh8


#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            "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();
}