家中或办公室一旦发生火情,若等他人发现再报警,往往已错过最佳时机。一套能够在探测到火焰或烟雾的瞬间,就自动向您手机发送紧急短信的报警系统,无疑能为安全增添一份保障。
本项目将使用 Arduino UNO R4 WiFi 开发板,构建一套集火焰检测、烟雾检测、蜂鸣器报警及云端短信通知于一体的完整安防系统。其最大特点在于无需传统的GSM模块,完全借助Wi-Fi网络和云端SMS API来实现远程告警,系统结构简单、成本低廉,非常适合家庭、办公室等场景,用于提升基础安全防护能力。
系统工作原理:Wi-Fi+传感器+云端SMS API
本系统的核心在于利用 Arduino与云端SMS API的通信 来替代体积与成本更高的GSM模块。
整个工作流程可分为以下四步:
- Arduino连接Wi-Fi网络:UNO R4使用预设的账号密码连接现有Wi-Fi,使其能够通过HTTP请求访问互联网。
- 火焰与烟雾检测:系统通过MQ2烟雾传感器和火焰传感器持续监测环境。一旦检测到烟雾或明火,传感器会立即向Arduino发送电信号。
- 触发本地与远程告警:Arduino收到任一传感器的报警信号后,会立刻驱动蜂鸣器和红色LED进行本地声光报警(绿色LED熄灭),同时通过HTTP协议向云端SMS API发送包含目标手机号和告警内容的请求。
- 云端发送短信:云端SMS API收到请求后,通过其自有移动网络将告警短信下发至指定手机。整个过程Arduino无需SIM卡或GSM模块参与。
本项目使用了Circuit Digest Cloud SMS API,该API免费、可配置,并提供了丰富的预设短信模板。
所需器件清单
- Arduino UNO R4 WiFi 开发板
- 火焰传感器 (Flame Sensor)
- MQ2 烟雾传感器
- 有源蜂鸣器 (Active Buzzer)
- 红色LED与绿色LED各一个
- 220 Ω 电阻若干
- 面包板
- 若干杜邦线
供电部分可通过USB或DC电源插座完成。为方便串口调试,建议直接使用5V USB供电。
硬件连接与电路设计
系统以Arduino UNO R4 WiFi作为核心控制器。
- MQ2烟雾传感器:用于检测LPG、丁烷、甲烷、酒精、烟雾等多种可燃气体。它提供模拟输出(AO)和数字输出(DO),本项目中将其模拟输出(AO)连接到Arduino的模拟引脚,输出电压值会随气体浓度变化。
- 火焰传感器:通过红外接收管检测火焰发出的特定波长红外光,以数字信号形式接入Arduino。当检测到火焰时,其输出引脚会变为高电平。
- 报警指示部分:绿色LED代表系统处于正常监控状态;红色LED与蜂鸣器则在检测到险情时共同工作,进行声光报警。
整个电路可在面包板上快速搭建,便于原型验证与修改。下图为实际的接线示意图:

云端短信模板与告警内容配置
为了简化开发,Circuit Digest Cloud提供了一系列预设的SMS模板。例如:
- 101: 设备状态告警 (Device Status Alert)
- 102: 温度告警 (Temperature Alert)
- 103: 运动检测告警 (Motion Detected)
- ... (其他模板略)
本项目选用模板 ID 101 (Device Status Alert),其内容为:“Your {#var#} is currently at {#var#}。” 短信中的两个 {#var#} 是可由用户自定义的字段。
在代码中,我们通过两个全局变量来填充这些字段:
const char* var1 = "house";
const char* var2 = "FIRE EMERGENCY. Evacuate now!";
最终,接收者手机上将收到如下内容的短信:Your house is currently at FIRE EMERGENCY. Evacuate now!。这种方式既保证了短信内容的规范性,又赋予了其灵活性。
Arduino代码详解:从网络连接到报警触发
程序的核心逻辑是:连接Wi-Fi → 持续监测传感器 → 一旦触发 → 发送短信并持续本地报警 → 同时维护网络连接。主要模块如下:
1. 头文件引入与引脚定义
首先引入必要的库文件:
#include “WiFiS3.h” // 用于Wi-Fi连接与HTTP通信
#include “Arduino_LED_Matrix.h” // 用于驱动板载LED点阵屏
接着使用 #define 宏定义各传感器与执行器的引脚,这种方式比使用变量更节省内存:
#define Smoke_sensor 2
#define Flame_sensor 6
#define Green_led 3
#define Red_led 5
#define Buzzer 4
然后创建LED矩阵对象:
ArduinoLEDMatrix matrix;
2. 全局变量声明
这部分定义了Wi-Fi凭据、API信息以及传感器状态变量。
// Wi-Fi 配置
const char *ssid = “Your_SSID”;
const char *password = “Your_PASSWORD”;
int status = WL_IDLE_STATUS;
// SMS API 配置
const char* apiKey = “Your_API_Key”;
const char* templateID = “101”;
const char* mobileNumber = “CountryCode_PhoneNumber”; // 如 8613912345678
const char* var1 = “house”;
const char* var2 = “FIRE EMERGENCY. Evacuate now!”;
// LED点阵图标数据
const uint32_t network_connect_icon[] = { 0x308311, 0xba1b4db0, 0xdb6db6db };
const uint32_t network_disconnect_icon[] = { 0x3003a1, 0xb41badb0, 0xdb6db6db };
const uint32_t wifi_connection_anime[][4] = { /* 动画帧数据 */ };
// 传感器状态
bool flame_status = false;
bool smoke_status = true;
3. Wi-Fi连接与重连函数
wifi_connect() 函数负责初始连接,包含模块检查、连接动画显示和重试机制。wifi_reconnect() 函数则在网络异常断开时被调用,先显示断开图标,然后尝试重新连接。稳定的网络连接是进行HTTP协议通信、调用云端API的基础。
4. 传感器检测函数
fire_smoke_detect() 函数读取两个传感器的数字引脚状态。只要火焰传感器输出低电平或烟雾传感器输出低电平(根据具体传感器逻辑),函数就返回 true,表示检测到险情。
bool fire_smoke_detect(){
flame_status = digitalRead(Flame_sensor);
smoke_status = digitalRead(Smoke_sensor);
if(!flame_status || !smoke_status){
return true;
} else{
return false;
}
}
5. 短信触发函数
trigger_SMS() 是项目的关键函数,它完成了与云端API的通信。
- 检查Wi-Fi连接状态。
- 使用
WiFiClient 对象连接到 www.circuitdigest.cloud 的80端口。
- 构造包含模板ID的API路径。
- 组装JSON格式的请求体,包含手机号、
var1和var2。
- 发送HTTP POST请求及请求头(包含认证信息)。
- 读取并解析服务器响应,判断短信是否发送成功。
通过这段代码,我们可以清晰地了解如何通过Arduino发起一次完整的、带认证的HTTP POST请求,这对于物联网设备与后端服务交互是典型范例。
6. 本地声光报警函数
trigger_Alarm() 函数控制红色LED常亮、绿色LED熄灭,并利用 millis() 函数实现非阻塞的蜂鸣器间歇鸣叫(约每100ms切换一次状态),确保主循环不被阻塞。
void trigger_Alarm(){
static unsigned long prevmillis = 0;
static bool buzzer_state = false;
const unsigned long beep_interval = 100;
digitalWrite(Red_led, HIGH);
digitalWrite(Green_led, LOW);
if(millis() - prevmillis >= beep_interval){
prevmillis = millis();
buzzer_state = !buzzer_state;
digitalWrite(Buzzer, buzzer_state);
}
}
7. 主程序流程
在 setup() 函数中,完成串口、LED矩阵初始化,首次Wi-Fi连接,以及各引脚模式的设置。
在 loop() 函数中,程序循环执行以下步骤:
- 检查并维护Wi-Fi连接。
- 调用
fire_smoke_detect() 检测险情。
- 一旦检测到,立即调用
trigger_SMS() 发送短信,随后进入一个 while(1) 循环,持续调用 trigger_Alarm() 进行本地报警,直到设备被手动复位。
烧录、测试与演示
- 环境配置:在Arduino IDE中选择开发板为 “Arduino UNO R4 WiFi”,并选中正确的端口。

- 编译上传:点击上传按钮,将程序烧录至开发板。

- 系统测试:
- 上电连接:设备启动后,板载LED点阵会播放连接动画,成功连接Wi-Fi后显示连接成功图标。

- 报警触发:当火焰或烟雾传感器被触发,系统立即发送短信,并启动声光报警。

- 网络恢复:若工作中Wi-Fi断开,点阵显示断开图标,并自动尝试重连。
项目总结与资源
本项目基于 Arduino UNO R4 WiFi,结合MQ2烟雾传感器、火焰传感器以及云端SMS API,实现了一套低成本、免GSM模块的火焰烟雾报警系统。它展示了如何利用现代Wi-Fi嵌入式开发板和云服务,快速构建具备远程通知功能的物联网应用。
您可以根据实际需求,轻松修改代码中的Wi-Fi信息、接收手机号和告警短信内容。完整的代码与电路资料已开源,方便复现与二次开发。