{"code":1,"msg":"成功","time":"1791589128","data":{"title":"〖2026嵌入式大赛〗基于RT-Thread与FRDM-MCXA346的烟雾火灾报警监测系统","content":"# 一、项目概述\r\n## 1.1 项目背景\r\n随着家庭、宿舍、实验室和机房等场景对安全监测需求的增加，传统烟雾报警器通常只能进行本地蜂鸣器报警，缺少实时数据显示、历史记录和远程查看能力。\r\n本项目基于 NXP FRDM-MCXA346 开发板和 RT-Thread 实时操作系统，设计了一套集烟雾监测、温湿度监测、OLED 显示、蜂鸣器报警、继电器联动和电脑端数据查看于一体的烟雾火灾报警监测系统。\r\n## 1.2 设计目标\r\n1. 使用 MQ-2 采集烟雾浓度。\r\n2. 使用 DHT22 采集温度和湿度。\r\n3. 使用 OLED 显示实时数据。\r\n4. 实现烟雾和温度自动告警。\r\n5. 支持蜂鸣器和继电器联动。\r\n6. 支持长按按键消音。\r\n7. 数值恢复后自动解除告警。\r\n8. 提供 MSH 调试命令。\r\n9. 提供 Python 电脑端仪表盘。\r\n## 1.3 系统组成\r\n硬件组成：\r\n- FRDM-MCXA346 开发板\r\n- MQ-2 烟雾传感器\r\n- DHT22 温湿度传感器\r\n- OLED 显示屏\r\n- 有源蜂鸣器\r\n- 3V 继电器模块\r\n- 12V 风扇或 LED 负载\r\n- USB Type-C 供电和调试接口\r\n![screenshot_839e612db2618800f8d793e04cb3409f.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/f560ef3b2073e16eb525338b2c65eda0.jpg.webp)\r\n软件组成：\r\n- RT-Thread 5.2.2\r\n- HAL 硬件抽象层\r\n- 烟雾告警状态机\r\n- OLED 页面显示模块\r\n- DHT22 单总线驱动\r\n- MSH 调试命令\r\n- Python 电脑端仪表盘\r\n![屏幕截图 2026-10-01 165031.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/621fae1ae4857b891a11e04212a0bb81.png.webp)\r\n## 1.4 项目特色\r\n- 基于 RT-Thread 实时操作系统开发。\r\n- 采用 HAL 层、业务层和显示层分层设计。\r\n- 使用状态机实现告警、消音和恢复。\r\n- 使用回差阈值避免临界频繁跳变。\r\n- 支持真实传感器和模拟测试命令。\r\n- 支持串口遥测和电脑端实时曲线显示。\r\n# 二、功能介绍\r\n## 2.1 实时监测\r\n系统启动后，OLED 默认显示主页，实时显示：\r\n- 烟雾相对浓度\r\n- 环境温度\r\n- 环境湿度\r\n- 系统运行状态\r\nMQ-2 烟雾数据通过 ADC1 采集，DHT22 通过单总线读取温湿度数据。\r\n## 2.2 烟雾告警\r\n当烟雾相对浓度超过 50 时，系统自动进入告警状态：\r\n1. OLED 切换到告警页面。\r\n2. 蜂鸣器启动。\r\n3. 继电器吸合。\r\n4. 12V 风扇或 LED 负载启动。\r\n5. 电脑端仪表盘显示 ALARM 状态。\r\n系统采用回差控制：\r\n- 触发阈值：超过 50\r\n- 恢复阈值：低于或等于 40\r\n这样可以避免浓度在阈值附近反复跳变。\r\n## 2.3 温度告警\r\nDHT22 采集到温度超过 35°C 时，系统进入温度告警：\r\n- 蜂鸣器启动\r\n- 继电器吸合\r\n- OLED 显示告警状态\r\n- 电脑端仪表盘同步显示\r\n温度降到 33°C 以下后，系统自动恢复。\r\n## 2.4 长按消音\r\n长按 SW3 约 1 秒后：\r\n- 关闭蜂鸣器\r\n- OLED 显示 MUTED\r\n- 继电器继续保持吸合\r\n- 系统仍然保持告警状态\r\n消音只关闭蜂鸣器，不解除告警，也不关闭继电器。\r\n## 2.5 自动恢复\r\n当烟雾或温度恢复到正常范围后，系统自动：\r\n- 切换回主页\r\n- 关闭蜂鸣器\r\n- 释放继电器\r\n- 恢复 NORMAL 状态\r\n- 将恢复状态同步到电脑端仪表盘\r\n## 2.6 OLED 页面\r\n系统提供三个页面：\r\n主页：\r\n- 烟雾浓度\r\n- 温度\r\n- 湿度\r\n\r\n![微信图片_20261008110424_72_2.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/2fcac47edf5d6936695c019facca65f3.jpg.webp)\r\n告警页：\r\n- 告警状态\r\n- 实时烟雾浓度\r\n- MUTED 状态\r\n\r\n![微信图片_20261008110644_73_2.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/04b4a27aacea04ea2b5b18c5e0c6c3d4.jpg.webp)\r\n故障页：\r\n- 系统故障提示\r\n\r\n![微信图片_20261008110645_74_2.jpg](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/82105752185a65be62de58f31cb6ecd5.jpg.webp)\r\n短按 SW3 可以循环切换页面。\r\n## 2.7 电脑端 Python 仪表盘\r\n电脑端软件基于 Python、Tkinter 和 pyserial 实现，支持：\r\n- 串口连接\r\n- 烟雾浓度显示\r\n- 温度、湿度显示\r\n- 实时趋势曲线\r\n- 报警、蜂鸣器、继电器状态\r\n- CSV 数据保存\r\n- 远程测试和控制命令\r\n## 2.8 MSH 调试命令\r\n系统保留多个 RT-Thread MSH 命令：\r\nsmoke_adc\r\ncmd_dht22_test\r\ncmd_dht22_pin_test\r\ncmd_smoke_sim\r\ncmd_temp_sim\r\ncmd_relay_test\r\ncmd_warmup_skip\r\ncmd_telemetry\r\n\r\n![screenshot_image.png](https:\/\/oss-club.rt-thread.org\/uploads\/20261008\/923f91298c3ea08fc1dcbf5284cf1c43.png.webp)\r\n这些命令用于传感器测试、告警模拟、继电器测试和系统调试。\r\n\r\n# 三、硬件与软件框架说明\r\n## 3.1 硬件平台\r\n- 主控芯片：NXP MCXA346\r\n- 开发板：FRDM-MCXA346\r\n- 操作系统：RT-Thread 5.2.2\r\n- 开发工具：Keil MDK-ARM\r\n## 3.2 引脚分配\r\n模块\t引脚\t说明\r\nMQ-2 AO\tP1_14\tADC1_CH12\r\nMQ-2 VCC\t5V\t独立 5V 供电\r\nMQ-2 GND\tGND\t与开发板共地\r\nDHT22 OUT\tP3_7\t单总线数据\r\nDHT22 VCC\t3.3V\t3.3V 供电\r\nDHT22 GND\tGND\t共地\r\nOLED SCL\tP2_5\t软件 I2C\r\nOLED SDA\tP2_7\t软件 I2C\r\nSW3\tP0_6\t低电平有效\r\n蜂鸣器\tP2_20\t低电平触发\r\n继电器 IN\tP2_1\t低电平触发\r\n\r\n\r\n继电器负载侧使用 COM 和 NO：\r\n12V+ -> COM\r\nNO   -> 12V 风扇正极\r\n风扇负极 -> 12V-\r\nNC 不接。\r\n3.3 硬件数据流\r\nMQ-2 -> ADC -> 烟雾浓度\r\nDHT22 -> 单总线 -> 温度\/湿度\r\n按键 -> GPIO -> 页面切换和消音\r\n告警状态机 -> 蜂鸣器\r\n告警状态机 -> 继电器\r\n告警状态机 -> OLED 和电脑仪表盘\r\n## 3.4 软件分层结构\r\nHAL 层：\r\n- GPIO\r\n- ADC\r\n- DHT22\r\n- OLED\r\n- 蜂鸣器\r\n- 继电器\r\n业务层：\r\n- 烟雾浓度处理\r\n- 温度判断\r\n- 阈值消抖\r\n- 告警状态机\r\n- 恢复逻辑\r\n显示层：\r\n- 主页\r\n- 告警页\r\n- 故障页\r\n调试层：\r\n- MSH 命令\r\n- $DATA 遥测\r\n- Python 电脑端仪表盘\r\n## 3.5 RT-Thread 线程\r\n线程\t周期\t功能\r\n按键扫描线程\t10ms\t消抖、短按、长按、状态机\r\nDHT22 线程\t2s\t温湿度采集\r\n显示线程\t200ms\tOLED 刷新\r\n遥测线程\t1s\t$DATA 数据输出\r\n控制线程\t1s\t系统控制和数据采集\r\n\r\n\r\n## 3.6 告警状态机\r\n系统状态包括：\r\nNORMAL\r\nACTIVE\r\nMUTED\r\nFAULT\r\n烟雾告警：\r\n浓度 > 50，连续 3 次采样 -> ACTIVE\r\n浓度 <= 40，连续 5 次采样 -> NORMAL\r\n温度告警：\r\n温度 >= 35°C -> ACTIVE\r\n温度 <= 33°C -> NORMAL\r\n长按 SW3：\r\nACTIVE -> MUTED\r\n蜂鸣器关闭，继电器保持吸合\r\n\r\n## 3.7 串口遥测协议\r\n系统通过串口输出遥测数据：\r\n$DATA,tick,smoke,temp,humi,state,alarm,relay,buzzer,dht_valid\r\n示例：\r\n$DATA,123456,97,253,582,NORMAL,0,0,0,1\r\n其中：\r\n- smoke：烟雾浓度 ×10\r\n- temp：温度 ×10\r\n- humi：湿度 ×10\r\n- state：NORMAL、ALARM、MUTED、FAULT\r\n- alarm：报警状态\r\n- relay：继电器状态\r\n- buzzer：蜂鸣器状态\r\n- dht_valid：DHT 数据是否有效\r\nPython 电脑端软件解析该协议并绘制实时曲线。\r\n\r\n## 3.8 编译和运行\r\n1. 使用 Keil 打开 project.uvprojx。\r\n2. 编译生成 rtthread.axf。\r\n3. 下载到 FRDM-MCXA346。\r\n4. 连接 MQ-2、DHT22、OLED、蜂鸣器和继电器。\r\n5. 打开 MSH 串口终端。\r\n6. 运行 cmd_telemetry on。\r\n7. 启动 Python 电脑端仪表盘。\r\nPython 程序运行方式：\r\n\r\n```\r\ncd tools\/pc_dashboard\r\npython dashboard.py\r\n```\r\n\r\n## 3.9 当前完成情况\r\n已完成：\r\n- MQ-2 ADC 采集\r\n- DHT22 温湿度读取\r\n- OLED 三页面显示\r\n- 烟雾告警\r\n- 温度告警\r\n- 蜂鸣器消音\r\n- 继电器联动\r\n- MSH 调试命令\r\n- 电脑端仪表盘\r\n- $DATA 遥测协议\r\n\r\n# 四、项目演示\r\n演示视频：\r\nhttps:\/\/www.bilibili.com\/video\/BV1rfH666Evc\r\n开源代码：\r\nhttps:\/\/github.com\/Jasper87287\/rt-thread-frdm-mcxa346-smoke-alarm","updatetime":"2026-10-09 08:32:16","author":"MQYG_1835"}}