软件工程团队第三次作业

软件工程团队第三次作业
STM32F407 设备状态可视化系统 - 冲刺总结

📌 基本信息
课程链接 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringDoubleDegree2026/

作业要求 https://edu.cnblogs.com/campus/gdgy/SoftwareEngineeringDoubleDegree2026/homework/15665
团队名称 xx-s-group
团队成员-学号 赵宇轩-3223005413;尹一熹-3123005110;林与峰-3223009xxx
目标 完成项目冲刺,实现软硬件协同闭环,总结成果与不足

一、是否实现冲刺计划中的改进?
1.1 已完成项目
计划项 说明
硬件外设驱动完善 LED、按键、ADC、触摸、LCD、双串口等外设全部接入并稳定运行
统一设备状态接口 完成 App_GetDeviceStatus() 与 App_FormatDeviceStatusJson(),硬件侧输出标准化JSON
本地API服务搭建 基于Python实现REST API,支持健康检查、状态读写、AI聊天转发
串口桥接程序 serial_bridge.py 稳定解析 [STATUS] 前缀JSON并写入API
网页端可视化展示 完成index.html + styles.css + app.js,实时轮询显示设备状态与同步时间
离线演示兜底机制 引入 device_status.json 缓存,无硬件时仍可演示软件侧功能
代码分层与可扩展性 硬件逻辑集中在 app_modules.c,软件以API为中心,网页仅依赖接口
演示材料准备 已准备演示流程、讲解稿,可在课堂完整展示"硬件→串口→服务→网页"闭环

二、项目亮点

  1. 软硬件协同闭环完整:从STM32外设采集→串口输出→桥接程序→本地API→网页展示,全链路贯通,演示效果直观可见。
  2. 统一状态模型降低耦合:硬件侧通过统一接口聚合所有外设状态,输出标准JSON;软件侧零改动即可适配硬件数据变化,后续扩展WiFi/蓝牙无需重构。
  3. 离线演示兜底设计:device_status.json 缓存机制确保无硬件环境下仍能演示软件侧功能,大幅降低课堂展示风险。
  4. 低耦合架构:硬件层(CubeMX/HAL + app_modules.c)、服务层(Python API)、展示层(网页)三层独立,符合嵌入式系统"驱动层+应用编排层"的最佳实践。
  5. AI扩展接口预留:已完成 /api/ai/chat 转发接口,支持加载外部API凭证,展示系统的可扩展性。

三、项目目前不足

  1. 硬件依赖限制演示灵活性:必须携带STM32开发板、USB转串口线等硬件,且需配置正确COM口,演示环境准备较复杂。
  2. 网页端实时性一般:采用轮询机制(非WebSocket),状态刷新存在延迟;若硬件状态变化过快,可能出现显示滞后。
  3. AI接口仅做转发:目前仅将请求转发到上游服务,未做本地语义处理或缓存,上游服务不可用时虽有兜底回复,但功能较简单。
  4. 触摸UI未充分开发:LCD与触摸控制器已驱动,但仅用于基础事件检测,未形成完整的图形交互界面(如菜单、按钮等)。
  5. 部署范围受限:本地API绑定 127.0.0.1:8000,仅单机访问;若要支持局域网内多设备查看,需配置网络绑定与防火墙。

四、每位成员的过程体会
尹一熹
在整个项目中,我主要负责硬件模块开发。刚开始遇到的最大困难是 CubeMX配置与HAL库的协调:多个外设(USART3 DMA、I2C触摸、SPI LCD)的时钟和引脚分配容易冲突,曾导致LCD无法初始化。通过逐模块调试、查阅参考手册,最终解决了引脚复用问题。
另一个挑战是 JSON输出的稳定性:最初直接拼接字符串生成JSON,容易因ADC值异常导致格式错误。后来引入结构体统一封装,并增加边界检查,保证了串口输出的健壮性。
通过这次项目,我深入理解了STM32 HAL库的使用、DMA接收机制、以及如何在资源受限的嵌入式设备上设计清晰的分层架构。虽然调试硬件很耗时,但看到网页上的ADC数值随旋钮实时变化时,非常有成就感。
工作量比例:35%

赵宇轩
我主要负责软件模块与串口桥接开发。一开始对 串口数据解析的鲁棒性估计不足,早期桥接程序会因硬件输出的调试信息(如printf日志)干扰而解析失败。后来通过增加 [STATUS] 前缀标记和JSON校验,实现了稳定的协议识别。
另一个体会是 API设计的兼容性:为了让网页端和未来的上位机程序都能使用,我在设计REST接口时尽量遵循通用规范(如统一返回格式、合理HTTP状态码),这为后续扩展打下了基础。
通过这次合作,我学会了如何用Python快速搭建本地服务、如何处理串口通信中的粘包问题,以及如何在团队中与硬件同学约定数据协议。虽然联调阶段经常要同时看串口助手和浏览器控制台,但最终实现闭环的那一刻很值得。
工作量比例:35%

林与峰
我主要负责前端展示与演示组织。最初网页端仅显示原始JSON,可读性差。后来我重新设计了UI布局,将设备状态卡片化,并增加同步时间、超时提示等视觉反馈,显著提升了演示效果。
在准备演示材料时,我发现 "讲清楚软硬件交互流程"比"实现功能"更难。为此我梳理了完整的演示脚本:从按键触发→LED变化→ADC采集→串口输出→网页更新,确保每个环节都有可视化反馈。
通过这次项目,我学会了如何设计嵌入式系统的展示界面、如何用纯前端技术实现实时数据可视化,以及如何从观众视角组织技术演示。虽然前端代码量不大,但做好用户体验和演示流畅度需要反复打磨。
工作量比例:30%

五、GitHub 仓库
团队仓库:https://github.com/xx-s-group/Software-Engineering-Team-Introduction
课设仓库:https://github.com/xx-s-group/Course-Design-Project

六、结语
本次冲刺将第二次作业的"原型设计+概要设计"落到了实处,实现了从设计文档到可运行系统的跨越。项目的核心链路(硬件采集→串口传输→API服务→网页展示)已稳定运行,并能在课堂环境中完整演示。
未来我们将继续完善:
• 触摸UI开发:在LCD上实现基础图形界面,脱离电脑也能展示硬件功能
• WiFi模块接入:将串口桥接改为无线传输,消除物理连线束缚
• 数据持久化:增加历史状态记录与趋势图表,提升展示价值

posted @ 2026-06-17 17:54  lyfjjjj  阅读(5)  评论(0)    收藏  举报