智能家居室内WIFI报警系统设计

一、系统概述

基于ESP32/ESP8266 WiFi模块,结合MQTT物联网协议与云平台服务,构建一套多功能、高可靠性的智能家居室内报警系统。系统集成烟雾火灾检测、燃气泄漏监测、非法入侵报警、环境异常预警四大核心功能,支持本地声光报警、手机APP远程通知、云平台数据可视化,实现7×24小时全天候智能安防监控。

系统技术指标

参数 指标
主控制器 ESP32-S3(双核240MHz,集成WiFi/蓝牙)
检测范围 烟雾:300-10000ppm,燃气:200-10000ppm
响应时间 ≤3秒(从检测到报警触发)
通信方式 WiFi 2.4GHz,MQTT over TCP
云平台 OneNET/阿里云IoT/腾讯云物联网
本地报警 蜂鸣器(≥85dB)、RGB LED、LCD显示屏
远程通知 手机APP推送、微信小程序、短信/邮件
供电方式 5V DC适配器(支持UPS备用电源)
待机功耗 ≤2W(正常监测状态)

二、系统架构设计

1. 三层架构模型

根据哈尔滨工业大学的研究成果,系统采用用户端-云平台-远程终端三层架构:

复制代码
┌─────────────────────────────────────────────────────┐
│                智能家居WIFI报警系统架构                │
├─────────────────────────────────────────────────────┤
│ 第一层:用户端(家庭内部)                            │
│  ├─ 数据采集模块:烟雾(MQ-2)、燃气(MQ-5)、温湿度(DHT11)│
│  ├─ 人体检测模块:HC-SR501红外传感器                  │
│  ├─ 报警执行模块:蜂鸣器、LED、继电器(控制通风设备)  │
│  └─ 主控显示模块:ESP32、OLED显示屏                   │
│                                                        │
│ 第二层:云平台端(数据中转与处理)                    │
│  ├─ MQTT Broker:EMQX/阿里云IoT平台                  │
│  ├─ 数据存储:时序数据库(存储历史数据)              │
│  ├─ 规则引擎:阈值判断、报警触发逻辑                  │
│  └─ 通知服务:短信、邮件、APP推送网关                │
│                                                        │
│ 第三层:远程终端(用户接收端)                        │
│  ├─ 手机APP:实时数据显示、远程控制、报警接收         │
│  ├─ 微信小程序:免安装、快速访问                      │
│  └─ Web管理端:数据可视化、设备管理、报表生成         │
└─────────────────────────────────────────────────────┘

2. 系统工作流程

  1. 数据采集:各类传感器实时采集环境数据(烟雾浓度、燃气浓度、温湿度、人体红外信号)
  2. 本地处理:ESP32对数据进行滤波、校准、阈值判断
  3. 异常检测:当数据超过预设阈值时,触发本地报警(声光报警)
  4. 云端上报:通过WiFi将报警数据和环境数据上传至云平台
  5. 远程通知:云平台通过多种渠道(APP、微信、短信)向用户发送报警信息
  6. 联动控制:可自动控制通风设备、切断燃气阀门等应急措施

三、硬件设计

1. 核心器件选型

模块类型 器件型号 关键参数 接口方式
主控制器 ESP32-S3-WROOM-1 双核240MHz,520KB SRAM,集成WiFi/蓝牙 直接控制所有外设
烟雾传感器 MQ-2 检测范围:300-10000ppm,响应时间<10s 模拟输出(ADC采集)
燃气传感器 MQ-5 检测LPG、天然气,范围:200-10000ppm 模拟输出(ADC采集)
温湿度传感器 DHT11 温度:0-50℃±2℃,湿度:20-90%±5% 单总线数字接口
人体红外传感器 HC-SR501 检测距离:3-7m,感应角度:<140° 数字输出(高/低电平)
声光报警器 有源蜂鸣器+RGB LED 蜂鸣器:85dB/5V,LED:全彩可编程 GPIO数字输出
显示模块 0.96寸OLED(SSD1306) 分辨率:128×64,I2C接口 I2C(SCL/SDA)
通信模块 集成WiFi 802.11 b/g/n,支持WPA/WPA2 内置天线
电源模块 LM2596降压模块 输入:9-12V DC,输出:5V/3A 为全系统供电

2. 电路连接设计

plaintext 复制代码
ESP32-S3引脚分配:
GPIO34(ADC1_CH6) → MQ-2 AOUT(烟雾模拟信号)
GPIO35(ADC1_CH7) → MQ-5 AOUT(燃气模拟信号)
GPIO4          → DHT11 DATA(温湿度数据线)
GPIO5          → HC-SR501 OUT(人体检测信号)
GPIO12         → 蜂鸣器控制(低电平触发)
GPIO13/14/15   → RGB LED(R/G/B控制)
GPIO21         → OLED SDA(I2C数据)
GPIO22         → OLED SCL(I2C时钟)
GPIO16         → 继电器1(控制排风扇)
GPIO17         → 继电器2(控制燃气电磁阀)
EN             → 使能引脚(接10kΩ上拉电阻)
3V3            → 为传感器供电(注意电流限制)
GND            → 共地连接

电源设计:
220V AC → 12V/2A适配器 → LM2596降压模块 → 5V输出
        ↓
    5V → ESP32-S3(通过VIN引脚)
    5V → 蜂鸣器、继电器线圈
    3.3V → 传感器(通过AMS1117-3.3V转换)
    
保护电路:
- 每个传感器电源端并联0.1μF去耦电容
- GPIO口串联220Ω限流电阻(保护ESP32)
- 继电器线圈反向并联1N4148续流二极管

3. 传感器校准与安装

MQ-2烟雾传感器校准

  1. 预热时间:首次使用需通电预热24小时以上,达到稳定状态
  2. 洁净空气校准:在无烟雾环境中,读取ADC值计算R₀(传感器在洁净空气中的电阻)
  3. 阈值设置:建议基线值×1.5~2.0作为报警阈值,避免误报
  4. 温度补偿:添加温度传感器,根据温度变化动态调整阈值

安装位置建议

  • 烟雾传感器:厨房天花板中央,距离燃气灶1-2米
  • 燃气传感器:厨房低处(燃气密度大于空气),距离地面30cm
  • 人体红外传感器:客厅/卧室入口,对准主要通道
  • 温湿度传感器:客厅中央,避免阳光直射和通风口

四、软件设计

1. 程序架构

c 复制代码
// 主程序框架(基于Arduino平台)
#include <WiFi.h>
#include <PubSubClient.h>      // MQTT客户端库
#include <DHT.h>               // 温湿度传感器库
#include <Adafruit_SSD1306.h>  // OLED显示库

// 全局定义
#define MQ2_PIN 34
#define MQ5_PIN 35
#define DHT_PIN 4
#define PIR_PIN 5
#define BUZZER_PIN 12
#define RELAY_FAN 16
#define RELAY_VALVE 17

// 阈值定义
#define SMOKE_THRESHOLD 1500    // 烟雾ADC阈值(0-4095)
#define GAS_THRESHOLD 1200      // 燃气ADC阈值
#define TEMP_THRESHOLD 60       // 温度阈值(℃)
#define HUMIDITY_THRESHOLD 90   // 湿度阈值(%)

// 全局变量
WiFiClient espClient;
PubSubClient mqttClient(espClient);
DHT dht(DHT_PIN, DHT11);
Adafruit_SSD1306 display(128, 64, &Wire, -1);

// 传感器数据结构
typedef struct {
    uint16_t smoke_value;
    uint16_t gas_value;
    float temperature;
    float humidity;
    bool human_detected;
    bool alarm_status;
} SensorData_t;

SensorData_t sensor_data;

void setup() {
    Serial.begin(115200);
    
    // 初始化引脚
    pinMode(MQ2_PIN, INPUT);
    pinMode(MQ5_PIN, INPUT);
    pinMode(PIR_PIN, INPUT);
    pinMode(BUZZER_PIN, OUTPUT);
    pinMode(RELAY_FAN, OUTPUT);
    pinMode(RELAY_VALVE, OUTPUT);
    
    digitalWrite(BUZZER_PIN, HIGH);  // 蜂鸣器默认关闭(低电平触发)
    digitalWrite(RELAY_FAN, LOW);    // 风扇默认关闭
    digitalWrite(RELAY_VALVE, LOW);  // 阀门默认关闭
    
    // 初始化传感器
    dht.begin();
    display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
    
    // 连接WiFi
    WiFi_Connect();
    
    // 连接MQTT服务器
    MQTT_Connect();
    
    // 显示初始化信息
    display.clearDisplay();
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(0,0);
    display.println("System Ready");
    display.display();
}

void loop() {
    // 1. 采集传感器数据
    Read_Sensors();
    
    // 2. 判断报警条件
    Check_Alarm_Condition();
    
    // 3. 本地报警处理
    Local_Alarm_Handler();
    
    // 4. 数据上传云端
    Upload_To_Cloud();
    
    // 5. 显示更新
    Update_Display();
    
    // 6. 保持MQTT连接
    if (!mqttClient.connected()) {
        MQTT_Reconnect();
    }
    mqttClient.loop();
    
    delay(1000);  // 1秒采集周期
}

2. 核心功能实现

(1)传感器数据采集与滤波
c 复制代码
// 读取烟雾传感器(滑动平均滤波)
uint16_t Read_MQ2_Sensor() {
    static uint16_t filter_buffer[10] = {0};
    static uint8_t index = 0;
    uint32_t sum = 0;
    
    // 读取原始ADC值(12位,0-4095)
    filter_buffer[index] = analogRead(MQ2_PIN);
    index = (index + 1) % 10;
    
    // 计算滑动平均值
    for(uint8_t i=0; i<10; i++) {
        sum += filter_buffer[i];
    }
    
    // 转换为电压值(可选)
    // float voltage = (sum/10.0) * (3.3/4095.0);
    
    return sum / 10;
}

// 读取温湿度传感器
void Read_DHT11_Sensor(float *temp, float *humi) {
    *temp = dht.readTemperature();
    *humi = dht.readHumidity();
    
    // 数据有效性检查
    if (isnan(*temp) || isnan(*humi)) {
        Serial.println("DHT11读取失败");
        *temp = 25.0;
        *humi = 50.0;
    }
}
(2)报警判断逻辑
c 复制代码
// 综合报警判断
void Check_Alarm_Condition() {
    bool smoke_alarm = false;
    bool gas_alarm = false;
    bool fire_alarm = false;
    bool intrusion_alarm = false;
    
    // 烟雾报警(连续3次超过阈值)
    static uint8_t smoke_count = 0;
    if (sensor_data.smoke_value > SMOKE_THRESHOLD) {
        smoke_count++;
        if (smoke_count >= 3) {
            smoke_alarm = true;
            smoke_count = 3; // 防止溢出
        }
    } else {
        smoke_count = 0;
    }
    
    // 燃气报警
    if (sensor_data.gas_value > GAS_THRESHOLD) {
        gas_alarm = true;
    }
    
    // 火灾判断(烟雾+高温)
    if (smoke_alarm && sensor_data.temperature > TEMP_THRESHOLD) {
        fire_alarm = true;
    }
    
    // 入侵检测
    if (sensor_data.human_detected && !Is_Normal_Hours()) {
        intrusion_alarm = true;
    }
    
    // 更新报警状态
    sensor_data.alarm_status = smoke_alarm || gas_alarm || fire_alarm || intrusion_alarm;
    
    // 记录报警类型
    if (sensor_data.alarm_status) {
        String alarm_msg = "";
        if (smoke_alarm) alarm_msg += "烟雾超标 ";
        if (gas_alarm) alarm_msg += "燃气泄漏 ";
        if (fire_alarm) alarm_msg += "火灾预警 ";
        if (intrusion_alarm) alarm_msg += "非法入侵 ";
        
        Serial.println("报警触发:" + alarm_msg);
        Save_Alarm_Log(alarm_msg);
    }
}
(3)本地报警处理
c 复制代码
// 声光报警控制
void Local_Alarm_Handler() {
    if (sensor_data.alarm_status) {
        // 蜂鸣器报警(间歇鸣响)
        static unsigned long last_beep = 0;
        static bool beep_state = false;
        
        if (millis() - last_beep > 500) { // 0.5秒间隔
            beep_state = !beep_state;
            digitalWrite(BUZZER_PIN, beep_state ? LOW : HIGH);
            last_beep = millis();
        }
        
        // RGB LED闪烁(红色)
        static unsigned long last_led = 0;
        static bool led_state = false;
        
        if (millis() - last_led > 200) { // 0.2秒间隔
            led_state = !led_state;
            if (led_state) {
                Set_RGB_LED(255, 0, 0); // 红色
            } else {
                Set_RGB_LED(0, 0, 0);   // 关闭
            }
            last_led = millis();
        }
        
        // 应急联动控制
        Emergency_Control();
        
    } else {
        // 正常状态:蜂鸣器关闭,LED显示绿色
        digitalWrite(BUZZER_PIN, HIGH);
        Set_RGB_LED(0, 255, 0); // 绿色
    }
}

// 应急联动控制
void Emergency_Control() {
    // 燃气泄漏时关闭电磁阀
    if (sensor_data.gas_value > GAS_THRESHOLD) {
        digitalWrite(RELAY_VALVE, HIGH); // 关闭阀门
    }
    
    // 烟雾超标时开启排风扇
    if (sensor_data.smoke_value > SMOKE_THRESHOLD) {
        digitalWrite(RELAY_FAN, HIGH); // 开启风扇
    }
    
    // 火灾时全开通风
    if (sensor_data.smoke_value > SMOKE_THRESHOLD && 
        sensor_data.temperature > TEMP_THRESHOLD) {
        digitalWrite(RELAY_FAN, HIGH);
        digitalWrite(RELAY_VALVE, HIGH);
    }
}

五、通信与云平台集成

1. MQTT通信实现

c 复制代码
// MQTT连接配置
const char* mqtt_server = "mqtt.heclouds.com"; // OneNET MQTT地址
const int mqtt_port = 1883;
const char* mqtt_user = "设备ID";
const char* mqtt_password = "鉴权信息";
const char* mqtt_topic_pub = "devices/{device_id}/datapoints"; // 发布主题
const char* mqtt_topic_sub = "devices/{device_id}/cmd";        // 订阅主题

// 连接MQTT服务器
void MQTT_Connect() {
    mqttClient.setServer(mqtt_server, mqtt_port);
    mqttClient.setCallback(MQTT_Callback); // 设置消息回调
    
    while (!mqttClient.connected()) {
        Serial.print("连接MQTT...");
        
        if (mqttClient.connect("ESP32_Alarm_System", mqtt_user, mqtt_password)) {
            Serial.println("连接成功");
            mqttClient.subscribe(mqtt_topic_sub); // 订阅控制主题
        } else {
            Serial.print("失败,rc=");
            Serial.print(mqttClient.state());
            Serial.println(" 5秒后重试");
            delay(5000);
        }
    }
}

// MQTT消息回调(接收云端指令)
void MQTT_Callback(char* topic, byte* payload, unsigned int length) {
    Serial.print("收到消息 [");
    Serial.print(topic);
    Serial.print("]: ");
    
    String message = "";
    for (int i = 0; i < length; i++) {
        message += (char)payload[i];
    }
    Serial.println(message);
    
    // 解析JSON指令
    // {"cmd":"alarm_test", "param":"on"}
    // {"cmd":"set_threshold", "smoke":1500, "gas":1200}
    Process_Cloud_Command(message);
}

// 上传数据到云端
void Upload_To_Cloud() {
    // 构建JSON数据包
    String json_data = "{";
    json_data += "\"smoke\":" + String(sensor_data.smoke_value) + ",";
    json_data += "\"gas\":" + String(sensor_data.gas_value) + ",";
    json_data += "\"temp\":" + String(sensor_data.temperature, 1) + ",";
    json_data += "\"humi\":" + String(sensor_data.humidity, 1) + ",";
    json_data += "\"human\":" + String(sensor_data.human_detected ? 1 : 0) + ",";
    json_data += "\"alarm\":" + String(sensor_data.alarm_status ? 1 : 0);
    json_data += "}";
    
    // 发布到MQTT主题
    if (mqttClient.connected()) {
        mqttClient.publish(mqtt_topic_pub, json_data.c_str());
        Serial.println("数据已上传: " + json_data);
    }
}

2. 云平台配置(以OneNET为例)

平台配置步骤
  1. 创建产品:登录OneNET平台,创建"智能家居报警系统"产品
  2. 添加设备:创建设备,获取DeviceID和API Key
  3. 数据流定义:定义数据流(smoke、gas、temp、humi、alarm)
  4. 触发器设置 :配置报警触发规则
    • 烟雾浓度 > 阈值 → 触发报警
    • 燃气浓度 > 阈值 → 触发报警
    • 温度 > 60℃ → 触发火灾预警
  5. 通知方式:配置短信、邮件、APP推送
数据可视化界面
json 复制代码
// OneNET数据流示例
{
  "datastreams": [
    {
      "id": "smoke",
      "datapoints": [
        {"at": "2024-01-01T12:00:00", "value": 850},
        {"at": "2024-01-01T12:01:00", "value": 920}
      ]
    },
    {
      "id": "alarm",
      "datapoints": [
        {"at": "2024-01-01T12:05:00", "value": 1}
      ]
    }
  ]
}

3. 手机APP/微信小程序开发

功能设计
  1. 实时监控:显示各传感器实时数据
  2. 报警通知:接收并显示报警信息(推送通知)
  3. 历史查询:查看历史数据和报警记录
  4. 远程控制:手动控制通风设备、测试报警
  5. 阈值设置:远程修改报警阈值
技术方案
  • 前端:微信小程序(Uni-app框架)
  • 后端:云开发(腾讯云)或自建服务器
  • 通信:WebSocket实时通信 + HTTP API

参考代码 简单、便捷智能家居室内WIFI报警系统设计(原理图、程序、设计报告等) www.youwenfan.com/contentcst/135472.html

六、系统测试与优化

1. 测试方案

测试项目 测试方法 预期结果
烟雾检测精度 使用烟雾发生器模拟火灾 ADC值>阈值,触发报警,误差<5%
燃气泄漏响应 微量释放打火机气体 3秒内检测到,触发报警
人体检测范围 人员在检测区域内移动 3-7米内可靠检测,误报率<1%
网络断线重连 断开路由器连接,30秒后恢复 自动重连,数据恢复上传
多设备联动 同时触发烟雾和高温报警 启动风扇、关闭阀门、声光报警
功耗测试 万用表测量待机和工作电流 待机<50mA,报警时<200mA

2. 抗干扰优化

  1. 软件滤波:采用卡尔曼滤波或移动平均滤波平滑数据
  2. 防误报策略:连续多次超过阈值才触发报警(如3次连续)
  3. 时间段控制:夜间自动提高灵敏度,白天降低灵敏度
  4. 环境自适应:根据历史数据动态调整阈值

3. 低功耗设计

c 复制代码
// ESP32深度睡眠模式(电池供电场景)
void Enter_Deep_Sleep() {
    // 设置唤醒源(定时器或外部中断)
    esp_sleep_enable_timer_wakeup(10 * 1000000); // 10秒后唤醒
    
    // 配置GPIO唤醒(人体传感器)
    esp_sleep_enable_ext0_wakeup(GPIO_NUM_5, 1); // 高电平唤醒
    
    // 进入深度睡眠
    Serial.println("进入深度睡眠");
    esp_deep_sleep_start();
}

七、扩展功能

1. 视频监控集成

c 复制代码
// 使用ESP32-CAM模块
#include "esp_camera.h"

// 初始化摄像头
void Init_Camera() {
    camera_config_t config;
    config.ledc_channel = LEDC_CHANNEL_0;
    config.ledc_timer = LEDC_TIMER_0;
    config.pin_d0 = 5; config.pin_d1 = 18;
    config.pin_d2 = 19; config.pin_d3 = 21;
    config.pin_d4 = 36; config.pin_d5 = 39;
    config.pin_d6 = 34; config.pin_d7 = 35;
    config.pin_xclk = 0; config.pin_pclk = 22;
    config.pin_vsync = 25; config.pin_href = 23;
    config.pin_sscb_sda = 26; config.pin_sscb_scl = 27;
    config.pin_pwdn = 32; config.pin_reset = -1;
    config.xclk_freq_hz = 20000000;
    config.pixel_format = PIXFORMAT_JPEG;
    
    esp_err_t err = esp_camera_init(&config);
    if (err != ESP_OK) {
        Serial.printf("摄像头初始化失败: 0x%x", err);
    }
}

// 报警时拍照并上传
void Capture_And_Upload() {
    camera_fb_t *fb = esp_camera_fb_get();
    if (fb) {
        // 上传到云存储
        Upload_Image(fb->buf, fb->len);
        esp_camera_fb_return(fb);
    }
}

2. 语音报警通知

c 复制代码
// 使用SYN6288语音合成模块
void Voice_Alarm(String alarm_type) {
    String voice_text = "";
    
    if (alarm_type == "smoke") {
        voice_text = "警告,检测到烟雾浓度超标,请立即检查";
    } else if (alarm_type == "gas") {
        voice_text = "警告,检测到燃气泄漏,请立即关闭阀门并通风";
    } else if (alarm_type == "fire") {
        voice_text = "火灾警报,请立即撤离并拨打119";
    }
    
    // 通过UART发送语音合成指令
    Serial2.print("[v]" + voice_text + "[/v]");
}

八、总结

本设计基于ESP32和MQTT协议,实现了完整的智能家居室内WIFI报警系统,具有以下特点:

技术优势:

  1. 高集成度:单芯片方案(ESP32)集成WiFi、处理、控制功能
  2. 实时性强:MQTT协议保证报警信息秒级送达
  3. 可靠性高:多重滤波算法降低误报率
  4. 扩展灵活:模块化设计支持功能扩展(视频、语音等)

应用场景:

  • 家庭安防:厨房火灾预警、燃气泄漏监测
  • 办公场所:下班后非法入侵检测
  • 仓库管理:环境异常(高温、高湿)监控
  • 老人看护:紧急情况一键报警

成本估算:

组件 单价(元) 数量 小计(元)
ESP32-S3开发板 35 1 35
MQ-2传感器 15 1 15
MQ-5传感器 18 1 18
DHT11 8 1 8
HC-SR501 6 1 6
蜂鸣器+LED 5 1 5
OLED显示屏 12 1 12
继电器模块 8 2 16
其他(线材等) 20 1 20
总计 135元
相关推荐
hoiii1874 小时前
智能家居继电器控制与蓝牙4.0开发
智能家居
点灯小铭6 小时前
基于单片机的智能家居门铃系统设计
单片机·嵌入式硬件·毕业设计·智能家居·课程设计·期末大作业
天泽恒晟2 天前
适老化到适我化—摄像头的选择
科技·信息可视化·生活·智能家居·交互
振浩微433射频芯片3 天前
433MHz在智能家居中的应用大全(二):智能安防篇——安全不容“信号死角”
网络·单片机·嵌入式硬件·物联网·智能家居
三佛科技-134163842123 天前
无线遥控器开关方案开发 ,无线遥控器开关MCU控制方案设计-基于国产单片机
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
振浩微433射频芯片3 天前
433MHz在智能家居中的应用大全(一):智能窗帘篇——为什么稳定比花哨更重要?
网络·单片机·嵌入式硬件·物联网·智能家居
深念Y3 天前
Harness Engineering:我的HomeSense Agent 架构演进
人工智能·算法·架构·智能家居·agent·小爱同学·harness
三佛科技-134163842123 天前
LP3799FAC/LP3799FBC--非标60W(24V2.5A)电源芯片恒压恒流方案分析(电路图,PCB设计)
嵌入式硬件·物联网·智能家居·pcb工艺
电子科技圈5 天前
赋能高端音频功能促进多样化设备创新——XMOS USB Audio平台实现四大功能升级
人工智能·mcu·音视频·智能家居·边缘计算·语音识别·智能硬件