项目编号 X604141。一套可复现的周界报警方案:STM32F103C8T6 完成红外对管与火焰传感器的双通道判据,本地驱动三色 LED、蜂鸣器与 DY-SV17F 语音模块构成声光语音警示;ESP32-CAM 以 REST 方式上传现场图像,服务端经虹软人脸 SDK 完成检测与比对,SpringBoot + MySQL + Bootstrap 管理端完成告警追溯与人员管理。
一、项目基本情况
1.1 方案要解决的问题
红外对射(激光围栏)的判据其实非常朴素:一条不可见光束被切断,接收端电平翻转,于是一次入侵被确认。真正的短板在于「确认之后留下什么」------传统对射报警器多为独立运行的单点声光装置,既没有事件的结构化留痕,也无法回答「何时、何地、何人」这三个问题。
本项目的做法是把报警拆成四段:感知 → 判据 → 执行 → 证据。前两段留在边缘侧闭环,保证报警不被网络时延拖累;后两段由服务端承接,让每一次触发都能落到一条可检索的记录和一张可复核的图像上。
1.2 硬件选型与选型理由
| 器件 | 型号 / 规格 | 选型理由 | 接口方式 |
|---|---|---|---|
| 主控 MCU | STM32F103C8T6 核心板 | 双串口资源恰好覆盖「摄像节点 + 语音模块」两路独立通道,GPIO 数量满足三路输出与三路按键;生态成熟 | Keil 5 开发,40 引脚双列插针,5 V Type-C 供电 |
| 激光围栏 | 分体式红外对管 | 通断量探测,判据复杂度低、无光照敏感性,相比图像方案抗误报能力更强 | 接收端 OUT → PA0;发射端接 5 V / GND |
| 火灾监测 | 火焰传感器模块 | 与激光通道构成相互独立的第二判据,避免单传感器失效导致整体失能 | 模拟输出 AO → PA1,VCC 接 5 V |
| 语音报警 | DY-SV17F MP3 语音模块 | 串口指令即可触发指定编号音频,无需 MCU 承担解码与功放 | TXD / IO0 ← PB13,RTXD / IO1 ← PB12,外接喇叭 |
| 声报警 | 有源蜂鸣器 | 有源器件无需 MCU 产生载波,一根 GPIO 即可驱动 | 正极 ← PB1,负极 → GND |
| 光报警 | 三色 LED(红 / 黄 / 绿) | 用颜色区分「布防 / 报警 / 人脸通过」三种状态,比单色灯信息量更大 | 由 PB3 / PB4 / PB5 分别驱动,各串限流电阻 |
| 交互按键 | 轻触按键 ×3 | 布防、撤防、人脸识别三个动作脱网可用,不依赖 Web 端 | 布防 PC14、撤防 PC15、人脸识别 PB10,各带 10 kΩ 电阻网络 |
| 摄像节点 | ESP32-CAM(OV2640) | 自带 Wi-Fi 与摄像头,可独立完成采集与上传,不占用主控的网络资源 | TX(IO1)→ PA10,RX(IO3)→ PA9;2.4 GHz Wi-Fi |
| 调试接口 | ST-LINK / Micro-USB | 固件烧录与串口调试 | SWD 下载口;串口 COM6 / 115200 / 8 / N / 1 |
1.3 软件技术栈
| 层次 | 技术选型 | 职责 |
|---|---|---|
| 前端 | Bootstrap | 管理端布局、表单与列表渲染、弹窗预览 |
| 后端 | SpringBoot(JeeSite 平台) | 业务接口、权限与菜单、Socket 服务端调度 |
| 图像处理 | 虹软人脸 SDK | 抓拍图像的人脸检测与特征比对 |
| 数据库 | MySQL | 终端、用户与人脸特征、历史采样、告警与识别记录持久化 |
| 通信 | TCP Socket + HTTP POST | 指令与状态量透传;现场图像上传 |
| 固件 | Keil 5(C 语言) | STM32 侧采样、判据、状态机与报警联动;ESP32 侧采集与上传 |

图 1 系统总体架构(应用层 / 网络传输层 / 边缘控制层 / 感知执行层)

图 2 系统功能结构(硬件系统 / 软件系统 / 交付服务)
二、系统架构设计
2.1 四层架构与数据形态
系统自上而下分为应用层、网络传输层、边缘控制层与感知执行层。值得注意的是,相邻层之间流动的数据形态并不相同:
- 感知执行层 → 边缘控制层:电平与模拟量(PA0 通断状态、PA1 模拟电压)
- 边缘控制层 → 摄像节点:串口指令帧 (
Client&photo&end#一类) - 边缘控制层 → 网络传输层 → 应用层:TCP 状态报文 / 告警报文
- 摄像节点 → 应用层:HTTP POST 提交的 JPEG 图像
这里有一个刻意的设计取舍:图像不经过主控。ESP32-CAM 自行连 Wi-Fi、自行提交图像,STM32 只用一根串口下发「拍照」指令。这样一来,图像传输的带宽与重试逻辑从主控上卸载,主控的实时判据循环不会被大数据量传输打断。

图 3 硬件系统原理框图(标注为原理图实际引脚连接)
2.2 引脚连接表(核心)
下表为原理图上的实际连接关系,取自嘉立创 EDA 图纸的网络标号而非目测估计。
| STM32 引脚 | 连接对象 | 方向 | 说明 |
|---|---|---|---|
| PA0 | 红外对管接收端 OUT | 输入 | 激光围栏判据,遮挡时电平翻转并触发入侵事件 |
| PA1 | 火焰传感器 AO | 输入 | 火灾判据,明火越限时模拟量越过门限 |
| PA9 | ESP32-CAM RX(IO3) | 输出 | 向摄像节点下发拍照指令 |
| PA10 | ESP32-CAM TX(IO1) | 输入 | 接收摄像节点的状态回执 |
| PB1 | 有源蜂鸣器 | 输出 | 报警时输出驱动电平,蜂鸣器持续鸣响 |
| PB3 / PB4 / PB5 | 三色 LED | 输出 | 分别驱动绿 / 黄 / 红三路指示 |
| PB10 | 人脸识别按键 SW3 | 输入 | 按下后触发刷脸认证流程并点亮黄色指示 |
| PB12 | DY-SV17F RTXD / IO1 | 输出 | 向语音模块下发播报指令帧 |
| PB13 | DY-SV17F TXD / IO0 | 输入 | 接收语音模块的播放状态回执 |
| PC14 | 布防按键 SW2 | 输入 | 按下后进入布防模式,绿色指示点亮 |
| PC15 | 撤防按键 SW1 | 输入 | 按下后退出布防模式,绿色指示熄灭 |
| 5 V / 3.3 V / GND | 各功能模块 | 供电 | 由 5 V Type-C 输入统一分配 |
原理图上 STM32F103C8T6 以 40 引脚双列插针引出全部可用 IO,已占用引脚均以网络标号显式标注;图纸同时预留 ST-LINK 下载接口与 Micro-USB 供电入口。
一处需要如实说明的差异:项目器件清单中同时列出了「红外感应模块」与「红外对管」,而原理图上仅出现一支分体式红外接收管(U2,OUT 接 PA0)与配套发射管,二者构成同一路遮挡检测通道,实物亦按该方案装配。

图 4 硬件原理图(嘉立创 EDA 绘制,Sheet 1/1,REV 1.0)

图 5 整机俯视:三路按键与三色 LED、STM32 核心板、ESP32-CAM 与外接喇叭

图 6 立体视角:DY-SV17F 语音模块丝印、喇叭与红外对管模块
2.3 通信协议:配置帧、指令与运行日志
配置帧(串口下发至摄像节点)
250&19214&[服务器地址]:8889/f/esp32/upload&true&false&false&false&true&10&SVGA&end#
帧以 & 分隔字段、以 end# 结束。字段含义如下(第三个字段原文为完整的图片上传地址,此处将协议前缀与内网主机名做了省略处理):
| 位置 | 取值 | 含义 |
|---|---|---|
| 1 | 250 | 保留字段 / 设备侧编号位 |
| 2 | 19214 | Socket 端口,指令与状态量透传通道 |
| 3 | 服务器地址:8889/f/esp32/upload | 图像上传接口(HTTP POST 目标) |
| 4 | true | 闪光灯开(低照度补光) |
| 5 | false | 自动拍照关(图像仅由事件触发) |
| 6 | false | 调试模式关 |
| 7 | false | 水平镜像关 |
| 8 | true | 垂直反转开(摄像模组倒置安装,输出前做上下翻转校正) |
| 9 | 10 | 拍摄间隔(秒),为后续扩展周期性抓拍预留 |
| 10 | SVGA | 图像分辨率 800 × 600 |
| 11 | end# | 帧尾 |
模组上电后的实际日志(实测照录)
rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0030,len:1344
load:0x40078000,len:13964
load:0x40080400,len:3600
entry 0x400805f0
E (468) ledc: ledc_set_duty(720): LEDC is not initialized
E (468) ledc: ledc_update_duty(648): LEDC is not initialized
系统启动,5秒内可发送配置指令
其中 rst:0xc (SW_CPU_RESET) 表明本次为软复位,boot:0x13 (SPI_FAST_FLASH_BOOT) 表明自 Flash 正常启动,mode:DIO 表明 Flash 工作于双线模式;两条 LEDC is not initialized 出现在闪光灯 PWM 初始化阶段,在未接闪光灯或未使能 PWM 通道时属预期输出,不影响功能。
配置生效后的参数回读(实测照录)
====================
接收配置 - 全部参数
====================
WiFi 名称 : 8266wifi
WiFi 密码 : 123456789
服务器 IP : 192.168.137.250
Socket 端口: 19214
上传地址 : <服务器地址>:8889/f/esp32/upload
闪光灯 : true
自动拍照 : false
调试模式 : false
水平镜像 : false
垂直反转 : true
拍摄间隔(秒): 10
====================
调试助手常规面板中的相关指令
# 写入服务端账号与口令
883&xswsoft&bs20262026&end#
# 人工触发一次抓拍
Client&photo&end#
调试助手的历史指令列表中另有一批形如
AT+QISEND、AT+QISTATE?的 AT 指令,属于 4G 模组的调试残留,与本系统(Wi-Fi + HTTP 上传)无关,此处不列入协议说明。

图 7 模块串口配置与运行日志实录

图 8 数据交互时序(用户 / Web 服务端 / 控制节点 / 摄像节点)
2.4 数据模型
| 数据表 | 关键字段 | 承载业务 |
|---|---|---|
| 终端信息表 | 终端编号、终端名称、安装地址、online、更新时间 | 终端管理,以终端编号作为数据归属键 |
| 用户信息表 | 姓名、电话、照片路径、更新时间 | 用户管理,照片路径作为人脸比对底图 |
| 历史采样表 | 终端编号、终端名称、火焰、围栏、更新时间 | 逐条记录两路判据的即时状态 |
| 告警记录表 | 终端编号、终端名称、告警内容、更新时间 | 告警追溯,内容由模板拼接生成 |
| 识别记录表 | 终端编号、终端名称、照片、处理后照片、结果、备注、更新时间 | 保留抓拍原图与人脸裁剪图 |
三、系统界面展示
管理端为左侧固定导航 + 右侧内容区布局,导航含终端管理、用户管理、实时数据查询、历史数据查询、告警记录查询与人脸识别记录查询六项。以下配图统一按「界面形态」呈现,关键字段与实测数值以表格补充------后台截图在正文栏宽下会明显缩小,表格内小字号字段难以辨认。

图 9 登录页

图 10 系统主界面与六项功能导航
3.1 终端与用户(实测值)

图 11 终端管理页

图 12 用户管理页(人脸特征维护)
| 页面 | 表头字段 | 实测数据 |
|---|---|---|
| 终端管理 | 终端编号 / 终端名称 / 安装地址 / online / 更新时间 / 操作 | 共 1 条:ZDBH01 | 报警系统 | -- | 离线 | 2026-04-23 02:04:47 |
| 用户管理 | 姓名 / 电话 / 照片路径 / 更新时间 / 操作 | 共 5 条,更新时间为 2026-04-19 与 2026-04-23 |
用户管理页的「照片路径」列并不显示文本路径,而是直接渲染为人脸底图缩略图,便于管理员直观确认底图质量。只有在此登记过底图的用户,才能在摄像节点上传图像后由虹软 SDK 完成比对并给出姓名归属。
3.2 实时状态与防护控制(实测值)

图 13 实时数据查询页:四张状态卡片与防护控制
| 状态卡片 | 实测取值 | 对应硬件通道 |
|---|---|---|
| 火焰 | 正常 | 火焰传感器 AO → PA1 |
| 红外激光 | 正常 | 红外对管 OUT → PA0 |
| 工作模式 | 布防模式 | 按键 SW2 / SW1 或远程指令 |
| 在线状态 | 离线 | TCP Socket 长连接 |
页面底部的「参数设定」区提供「防护管理」一项,含「布防」与「撤防」两个按钮,构成远程干预报警状态的直接通道。页面时间戳为 2026-04-23 02:03:47,与终端管理页的在线状态一致,均显示节点尚未上线。
3.3 历史采样与告警记录(实测值)

图 14 历史数据查询页

图 15 告警记录查询页
| 页面 | 表头字段 | 实测规模与要点 |
|---|---|---|
| 历史数据查询 | 终端编号 / 终端名称 / 火焰 / 围栏 / 更新时间 | 共 1174 条,每页 20 条、共 59 页;相邻记录间隔约 2~3 秒,与固件采样节拍吻合 |
| 告警记录查询 | 终端编号 / 终端名称 / 告警内容 / 更新时间 / 操作 | 共 18 条,时间集中在 2026-04-23 01:26~01:58 |
| 序号 | 告警内容 | 更新时间 |
|---|---|---|
| 1 | 火焰传感器异常! | 2026-04-23 01:58 |
| 2 | 激光围栏异常! | 2026-04-23 01:58 |
| 3 | 火焰传感器异常! | 2026-04-23 01:51 |
| 4 | 激光围栏异常! | 2026-04-23 01:51 |
| 5 | 激光围栏异常! | 2026-04-23 01:47 |
| 6 | 激光围栏异常! | 2026-04-23 01:27 |
| 7 | 激光围栏异常! | 2026-04-23 01:26 |
| 8 | 火焰传感器异常! | 2026-04-23 01:26 |
告警内容中的半角感叹号来自服务端模板原文,此处照录未做全角化处理,以便与界面一致。
与常见的数值型历史表不同,本表记录的是两路判据的 离散状态 而非连续测量值,这与激光围栏「通断量探测」的技术本质相符:对射方案关心的是光束是否被切断这一二值事件,而非连续的光强或距离测量。由于判据状态仅占两个字段,单条记录的数据量远小于数值型采样表,在相同存储开销下可以保留更长的历史窗口。
当前设计为逐次触发即记录,在人为反复遮挡的测试场景下会产生分钟级告警簇。实际部署时建议在服务端侧增加持续时间门槛或去抖计数(例如连续两次采样均越限才落库),硬件侧判据逻辑与采样周期无需改动。
3.4 人脸识别记录与图像留痕(实测值)

图 16 人脸识别记录页:抓拍原图、处理后照片与识别结果

图 17 查看图片弹窗:抓拍原图与带时间戳水印的处理后照片
列表表头依次为终端编号、终端名称、照片、处理后照片、结果、备注、更新时间与操作,实测共 15 条记录。字段语义如下:
- 照片:摄像节点上传的抓拍原图缩略图,画幅中包含现场环境,可据以判断触发位置
- 处理后照片:服务端经虹软 SDK 完成人脸检测与裁剪后的结果,画面收敛至人脸区域
- 结果:统一显示为「硬件触发拍照识别」,表明本次抓拍由硬件侧按键事件触发,与配置参数中「自动拍照 = false、拍摄间隔 = 10 秒」相互印证
- 备注:比对输出的身份归属,即用户管理页中登记过的姓名;识别失败时为空白
点击缩略图会弹出「查看图片」窗口:点击「照片」列得到抓拍原图放大预览,点击「处理后照片」列则得到带 2026-04-23 02:02:42 时间戳水印的处理后图像。时间戳水印是图像证据链的关键一环------它使图像与告警记录之间存在可交叉验证的时间锚点。由于原图与处理后照片分别留存,即使人脸比对失败(备注为空),原始画面依然可用作人工辨识依据,系统不会因识别环节失效而丢失证据。
四、系统视频展示

图 18 演示视频封面
演示视频采用「屏幕录制 + 实机拍摄」双轨并行:屏幕轨道记录管理端完整操作路径,实机轨道同步拍摄三色 LED 切换、蜂鸣器鸣响与语音模块循环播报。建议观看顺序:
- 整机与装配概览
- 布防与撤防(绿色指示切换、工作模式同步)
- 围栏遮挡报警(红色指示闪烁 + 蜂鸣器 + 语音播报「警戒区域,请快离开!」)
- 火警通道验证(火焰传感器第二路判据触发)
- 抓拍与人脸识别(按键触发拍照 → 上传 → 比对 → 记录落库)
- Web 端追溯(实时状态 / 历史数据 / 告警记录 / 人脸识别记录四处核对)
五、获取方法
5.1 交付清单
| 类别 | 交付物 |
|---|---|
| 硬件实物 | 整机模块(STM32F103C8T6 核心板 + 红外对管 + 火焰传感器 + DY-SV17F 语音模块 + 蜂鸣器 + 三色 LED + 按键 ×3 + ESP32-CAM + 定制扩展板) |
| 硬件资料 | 嘉立创 EDA 原理图源文件、PDF、矢量图,以及可直接打样的 Gerber 文件 |
| 程序源码 | STM32 侧 Keil 5 工程、ESP32 侧固件、服务端 SpringBoot 工程与数据库脚本 |
| 演示材料 | 功能演示视频(屏幕录制 + 实机拍摄双轨) |
| 技术支持 | 远程协助环境搭建、程序调试与问题答疑 |
5.2 部署步骤
下列命令中的占位参数需按实际环境替换;数据库脚本、配置文件位置随源码一并提供。
# 1) 导入数据库脚本
mysql -u <用户名> -p <数据库名> < <源码附带的数据库脚本>.sql
# 2) 修改服务端配置
# - 数据库连接(JDBC URL / 用户名 / 密码)
# - TCP Socket 监听端口(与配置帧第 2 字段一致,实测 19214)
# - 图片上传接口端口与路径(与配置帧第 3 字段一致,实测 8889 端口 /f/esp32/upload)
# - 虹软人脸 SDK 的授权文件路径(APP_ID / SDK_KEY / ACTIVE_KEY)
# 3) 启动服务端(Maven 工程)
mvn spring-boot:run
# 4) 摄像节点侧:用串口助手按 115200 / 8 / N / 1 打开串口
# 上电后 5 秒内发送配置帧:
# 250&<Socket端口>&<服务器地址>:8889/f/esp32/upload&true&false&false&false&true&10&SVGA&end#
# 观察到「接收配置 - 全部参数」回读即写入成功
# 5) 主控侧:Keil 5 编译后经 ST-LINK 烧录,上电即进入布防判断循环
5.3 部署前确认
- 网络 :摄像节点仅支持 2.4 GHz 频段。调试期可用默认热点
8266wifi/123456789,正式部署时需将配置帧中的 Wi-Fi 字段改为现场网络 - 服务端地址:服务端主机需与本机同一网段,并开放指令透传端口与图片上传端口;若主机地址变动,需同步修改摄像节点配置帧并重新下发
- 语音与音频:语音模块的播报内容以音频文件形式存放于模块存储介质中,更换提示语时需重新写入音频文件并核对文件编号与指令帧的对应关系
- 光学安装:红外对管的发射端与接收端须严格对正,并避免光束路径上出现周期性遮挡物(如摆动线缆),以免产生持续性误报
- 开发环境:STM32 侧 Keil 5 + ST-LINK;摄像节点侧相应烧录工具 + 串口调试助手;服务端 JDK + MySQL + Maven + 虹软 SDK