Skip to the content
2 layersAquasentinel hardware, the printed circuit board in 3D

Aquasentinel hardware

Adcage/AquaSentinel

AquaSentinel 是面向泳池、游泳馆和水上场馆的实时 AI 安全监控系统。系统围绕“视频采集、AI 检测、告警生成、实时推送、现场处置、记录追踪”构建完整闭环,用于降低水域安全监控中的发现延迟、告警分发延迟和处置追踪成本。

Copper layers
2
Thickness
1.6 mm
Parts
13
Nets
52
Pads
82
Tracks, vias
1, 0
Routed
Yes
KiCad
KiCad 10.0 (file 20260206)
Created
22 Apr 2026
Updated
25 May 2026

Overview

Aquasentinel hardware is an open-source printed circuit board by Adcage, from the Adcage/AquaSentinel repository on GitHub. It is a 2-layer board with 13 parts on 52 nets, routed with 1 track and 0 vias.

It is built around the ESP32-CAM. Its parts include 8 connectors, 2 capacitors, 2 resistors and 1 switch. It belongs with the ESP32, STM32 and RISC-V boards of this library.

Main components

1

README

README.md

AquaSentinel

Spring Boot Java 17 Spring AI MyBatis-Plus MySQL Redis RabbitMQ

Vue 3 TypeScript Vite Pinia Element Plus ECharts

Flask YOLOv8 DeepSort OpenCV PyAV WebRTC aiortc Video Stream Protocols

Kotlin Jetpack Compose Media3 ExoPlayer STM32 ESP32-CAM PlatformIO KiCad

AquaSentinel 是面向泳池、游泳馆和水上场馆的实时 AI 安全监控系统。系统围绕“视频采集、AI 检测、告警生成、实时推送、现场处置、记录追踪”构建完整闭环,用于降低水域安全监控中的发现延迟、告警分发延迟和处置追踪成本。

核心亮点

亮点说明
端到端安全监控闭环从摄像头或 ESP32-CAM 视频采集开始,经过 AI 检测、告警落库、Web/Android 实时推送,最终进入确认、派发、处置和记录追踪流程。
视频网关与业务系统解耦video-hub-service 独立承担 RTSP、HTTP-MJPEG、HTTP-FLV、WebRTC、ESP32 WebSocket 推帧等视频接入和分发能力,Backend 聚焦权限、配置和业务编排。
AI 检测与跟踪链路yolo-service 基于 YOLOv8 执行人体目标检测,结合 DeepSort 多目标跟踪和溺水规则判定,输出结构化检测事件和风险信息。
多端实时协同Backend 统一接收 AI 推送并进行告警落库、状态管理和权限过滤,再通过 WebSocket 分发给 Web 管理后台与 Android 救生员端。
软硬件联动ESP32-CAM 负责摄像头采集、网络推帧和 HTTP 控制入口,STM32 负责双轴云台、OLED 状态展示、按键交互、电池采样和校准参数保存。
工程化治理系统包含 JWT 鉴权、注解式权限控制、HMAC AI 回调校验、RabbitMQ 异步告警扩展、Prometheus 指标、OpenAPI 类型生成和统一响应信封。

效果展示

系统架构

AquaSentinel 系统架构

视频链路

AquaSentinel 视频链路

系统架构

系统按职责拆分为多个可独立运行的子项目:

模块技术栈核心职责
backendJava 17 / Spring Boot / MyBatis-Plus / MySQL / Redis / WebSocket用户认证、权限控制、设备管理、告警落库、统计聚合、实时推送、业务 API
frontendVue 3 / TypeScript / Vite / Pinia / Element Plus / EChartsWeb 管理后台、设备监控、告警处置、数据看板、地图展示、AI 助手入口
yolo-servicePython / Flask / YOLOv8 / DeepSort / OpenCV / PyAV视频流推理、目标检测、轨迹跟踪、溺水规则判定、AI 结果推送
video-hub-servicePython / Flask / PyAV / aiortc / Redis Pub/Sub视频源接入、帧缓存、协议适配、MJPEG/Snapshot/WebRTC 分发
androidKotlin / Jetpack Compose / Retrofit / OkHttp / Media3救生员移动端、实时告警接收、视频预览、现场处置、定位能力
firmwareSTM32 / ESP32-CAM / PlatformIO摄像头采集、云台控制、OLED 显示、设备侧交互和串口协议

详细架构说明见 系统架构文档。

核心业务链路

视频接入与预览

摄像头、ESP32-CAM 或 RTSP 源输出视频后,由 video-hub-service 负责统一接入和协议适配。客户端不直接依赖底层视频源地址,而是通过 Backend 编排后的预览入口获取可播放的视频流。

text
摄像头 / ESP32-CAM / RTSP 源
  -> video-hub-service
  -> MJPEG / Snapshot / WebRTC / 预览地址
  -> Frontend / Android

AI 推理与溺水判定

yolo-service 读取视频帧后执行 YOLOv8 目标检测,通过 DeepSort 为目标分配稳定轨迹,再由规则服务根据持续时间、目标状态和位置变化判断风险。

text
视频帧
  -> YOLOv8 人体检测
  -> DeepSort 多目标跟踪
  -> 溺水规则判定
  -> 检测事件 / 告警候选

实时告警分发

AI 服务通过 WebSocket 将检测结果推送到 Backend。Backend 统一进行告警记录、状态维护、权限过滤和多端分发,保证 Web 管理后台和 Android 端看到一致的告警状态。

text
YOLO Service
  -> WebSocket
Backend
  -> 落库 + 状态管理 + 权限过滤
Frontend 管理后台 / Android 救生员端
  -> 确认、派发、处置、追踪

技术难点与设计取舍

视频流能力独立部署

视频预览如果直接放在 Backend 中处理,会让业务服务同时承担鉴权、CRUD、告警、转码和媒体分发职责。项目将视频流能力拆分到 video-hub-service,让 Backend 只负责配置、权限、路由和业务编排,视频网关负责拉流、缓存、协议适配和预览分发。

持续推理任务管理

AI 检测不是一次性模型调用,而是持续运行的视频任务。yolo-service 对推理任务进行启动、运行、停止、异常等状态管理,并配套读帧、推理、推帧和状态维护逻辑,以适配长时间监控场景。

WebSocket 分层推送

告警链路同时涉及 AI 服务、业务后端、Web 管理端和 Android 端。项目将 AI 结果接入与用户端告警分发拆为不同 WebSocket 通道,避免前端直接依赖 AI 服务,也让 Backend 可以统一处理告警状态、权限过滤和多端同步。

接口一致性与类型安全

后端通过 Knife4j/OpenAPI 暴露接口规范,前端使用 openapi2ts 生成 API 调用代码和类型定义。业务页面通过 services/ 层消费生成接口,减少手写请求造成的字段不一致、路径漂移和响应结构误用。

多端与硬件协同

Web 管理端适合场馆、设备、地图和统计管理,Android 端适合救生员现场接收和处置告警,硬件端负责视频采集与云台动作。系统通过统一 Backend 聚合设备、告警和处置状态,避免各端维护割裂的数据副本。

功能模块

模块功能
用户与权限登录注册、JWT 鉴权、刷新令牌、角色权限、接口级权限校验
场馆管理场馆、区域、摄像头、救生员等基础数据维护
视频监控摄像头列表、实时预览、视频流路由、云台控制入口
AI 检测推理任务管理、检测结果上报、溺水规则判定
告警中心告警生成、实时推送、确认、派发、处置、记录追踪
数据看板告警统计、设备状态、场馆态势、图表展示
移动端救生员登录、告警接收、视频查看、定位与现场处置
硬件联动ESP32-CAM 视频采集、STM32 云台控制、OLED 信息显示、电池状态采样

技术栈

层级技术
BackendJava 17 / Spring Boot 3.2.3 / MyBatis-Plus 3.5.5 / MySQL / Redis / JWT / WebSocket / RabbitMQ / Spring AI / Knife4j
FrontendVue 3 / TypeScript / Vite 7 / Pinia / Element Plus / ECharts / 高德地图 / openapi2ts
YOLO ServicePython / Flask / Flask-Smorest / SQLAlchemy / YOLOv8 / DeepSort / OpenCV / PyAV
Video HubPython / Flask / PyAV / aiortc / Redis Pub/Sub / MJPEG / Snapshot / WebRTC
AndroidKotlin / Jetpack Compose / Retrofit / OkHttp / Media3 ExoPlayer / Paging 3 / 高德 3D Map SDK
FirmwareSTM32 / ESP32-CAM / PlatformIO / OLED / UART / PWM 云台控制 / KiCad

完整技术栈说明见 技术栈说明。

快速开始

Docker Compose 启动核心服务

bash
docker compose up -d

验证核心服务状态

bash
pwsh ./scripts/verify_core_stack.ps1

详细启动步骤见 核心服务启动指南。

本地开发命令

Backend

bash
cd backend
mvn compile
mvn test

Frontend

bash
cd frontend
npm install
npm run dev
npm run build

YOLO Service

bash
cd yolo-service
pip install -r requirements.txt
python main.py --dev
pytest

Android

bash
cd android
./gradlew assembleDebug
./gradlew test

仓库结构

text
AquaSentinel/
├── backend/              # Spring Boot 业务后端
├── frontend/             # Vue 3 管理后台
├── yolo-service/         # Flask + YOLOv8 AI 推理服务
├── video-hub-service/    # 视频流接入与协议适配服务
├── android/              # Jetpack Compose 移动端
├── firmware/             # STM32 / ESP32-CAM 硬件端代码
├── docs/                 # 架构、部署、硬件、排障和归档文档
├── scripts/              # 启动、验证和辅助脚本
└── docker-compose.yml    # 核心服务编排

文档导航

分类文档说明
系统架构系统架构文档说明系统分层、服务职责、核心数据流和关键模块设计
技术栈技术栈说明说明后端、前端、AI 服务、视频网关、Android 和硬件端的技术选型
快速启动核心服务启动指南说明 Backend、YOLO Service、video-hub-service、MySQL、Redis 的本地启动方式
硬件设计硬件设计说明说明 ESP32-CAM、STM32、云台、供电和通信链路设计
硬件接线硬件接线指南说明 ESP32-CAM、STM32、舵机、OLED、按键和电源的接线方式
云台控制STM32 云台控制说明说明 STM32 云台控制器、串口协议、OLED 状态和电池检测能力

Parts

13
QtyValueFootprintReferences
2100k optionalResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P7.62mm_HorizontalR1, R2
1100uF/10V optionalCapacitor_THT:CP_Radial_D6.3mm_P2.50mmC2
11S_LIION_BATConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ2
1470uF/10V optionalCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC1
15V_BOOST_OUTConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ1
1BAT_LEVEL_LEDConnector_PinHeader_2.54mm:PinHeader_1x02_P2.54mm_VerticalJ3
1ESP32-CAMAquaSentinelFootprints:ESP32_CAM_AI_Thinker_2x08_P22.86mm_Vertical_LabeledJ4
1SERVO_PAN_SG90Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ6
1SERVO_TILT_SG90Connector_PinHeader_2.54mm:PinHeader_1x03_P2.54mm_VerticalJ7
1SSD1306_OLED_I2CConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ8
1STM32F103C8T6_BLUEPILLAquaSentinelFootprints:STM32_BluePill_2x20_P17.78mm_Vertical_LabeledJ5
1USER_HOME_CALIBAquaSentinelFootprints:SW_PUSH_6mm_2Pin_LRSW1

Similar boards

  • 2 layers38.1 × 63.5 mmSstv backpack, the printed circuit board in 3D

    Sstv backpack

    vaugerbird/sstv-backpack

    A ESP32-CAM SSTV backpack for the Baofeng UV-5R + others!

    29 parts94GPL-2.0
  • 2 layers146.2 × 99 mmFPVRover, the printed circuit board in 3D

    FPVRover

    Circuit-Digest/ESP32-Cam-Surveillance-Car

    Watch full video on ESP32 surveillance car

    35 parts15
  • 2 layers78 × 62 mmPortier connecte, the printed circuit board in 3D

    Portier connecte

    InnoGreenTech/ESP32-CAM-pir-static-relay

    ESP32-CAM mounting on a board with pir, photo-resistor sensors, AC/DC power and a static relay.

    16 parts5
  • 2 layers188.2 × 129.7 mmQms kiosk, the printed circuit board in 3D

    Qms kiosk

    jamestansx/qms

    Queue Management System

    10 parts5
  • 2 layers82.3 × 43.5 mmNight Gogle, the printed circuit board in 3D

    Night Gogle

    airsoftak25/Night-Gogle

    My small project about creating a Night vision gogle witch cost less than 2000CZK each

    29 parts2
  • 2 layers82 × 58 mmNoirShot, the printed circuit board in 3D

    NoirShot

    rabinniroula/NoirShot

    instant thermal camera

    50 parts2
  • 2 layers53.8 × 34 mmPCBcam, the printed circuit board in 3D

    PCBcam

    dipenac/camara-esp32-espidf

    - [x] Y dentro del folder de projects utilizamos una de las funciones que presta idf.py, con la cual creamos un projecto con el nombre que deseemos.

    11 parts1
  • 2 layers78.8 × 63 mmLynx-30-Camera Trap, the printed circuit board in 3D

    Lynx-30-Camera Trap

    Engr-umer-mohammed/Lynx-30-Camera-Trap

    Low-power long-range wireless camera trap designed using KiCad and Simulink.

    37 parts1MIT

Questions

What parts does the Aquasentinel hardware use?

13 parts, built around the ESP32-CAM. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the Aquasentinel hardware KiCad files?

From the Adcage/AquaSentinel repository on GitHub, at the commit this page was made from: the board is firmware/hardware/aquasentinel-hardware.kicad_pcb and its schematic firmware/hardware/aquasentinel-hardware.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the Aquasentinel hardware design in my own project?

Its repository states no licence, so its author keeps all rights: ask Adcage before reusing the design.