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:
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();
}
No Comments