一套覆盖用户APP、智能车锁、管理后台的完整共享单车解决方案,技术栈全面,实测抗压 89.7 次/秒

项目缘起

为了参加2025全国青少年信息素养大赛总决赛,我们按照给定题目要求完成了基本开关锁功能,但为了更贴近生活、做成完整成熟的产品,我们开发了更多分支及创新功能,包括但不限于:GPS定位、事故检测报警、车辆故障上报、车辆数据集群管理、后台管理大屏、以用户为单位的数据管理、行程数据记录展示。涵盖用户端APP、嵌入式智能锁、后台管理系统以及API服务
本文将深入解析这套系统的技术架构与实现亮点。

团队分工

我(XHL)服务器运维、前后端搭建、APP、全部软件部分等个人网站
The Sandy车锁3D结构设计与打印、硬件结构构建、协助完成ESP32程序开发等个人网站

一、整体架构:分层设计

项目三层架构:

层级技术栈功能
客户端Vue + Android + 高德地图 SDK地图展示、扫码开锁、行程记录、用户中心
单车端MicroPython + ESP32 + GPS/MPU6050定位上报、姿态检测、开锁执行
API 服务Python Flask业务逻辑处理、数据接口
数据层MySQL + 连接池数据存储
基础设施Docker + Nginx + Debian容器化部署、负载均衡

二、服务端亮点:高性能与高可用

2.1 连接池设计

服务端基于 Python Flask 开发,数据库方面我自己封装了 SQL

from dbutils.pooled_db import PooledDB

class SQL:
    def __init__(self, db_address, db_username, db_passwd, db_name):
        self.pool = PooledDB(
            creator=pymysql,
            maxconnections=10,
            host=db_address,
            user=db_username,
            password=db_passwd,
            database=db_name
        )

实测数据:系统可承受约 89次/秒 的数据请求,在网络攻击测试中服务端从未崩溃。

2.2 日志系统

日志分类示意图

所有 API 请求都会通过 server_log() 函数记录到数据库,日志类型分为:

  • USER:用户登录、注册、查询等操作
  • BIKE:单车解锁、锁车、位置更新
  • ACCI:事故报警、防盗报警
  • MAIN:报修、维修完成
  • PANEL:后台数据访问

这不仅便于问题追溯,也为数据分析和运营决策提供了基础。

2.3 钉钉告警集成

事故报警和防盗报警会通过钉钉机器人实时推送:

三、智能车锁:硬件与算法的结合

智能锁实物图

3.1 机械结构迭代

建模设计与3D打印部分由The Sandy完成(个人网站

外壳经历了五代迭代:

版本材料改进点
初代PLA验证基础结构可行性
二代PLA优化润滑油方案
三代PLA固定方案优化
四代PETG-CF强度大幅提升
四+代PETG-CF + PETG 开窗解决 GPS 信号屏蔽问题
技术细节:碳纤维增强 PETG 会屏蔽 GPS 信号,因此天线区域专门采用 PETG 开窗设计。

3.2 姿态检测与事故报警

MPU6050姿态检测流程图

使用 MPU6050 六轴传感器实时检测车辆姿态。当检测到异常冲击(如摔车),系统会:

  1. 通过 OLED 屏幕弹出提示,给用户 10 秒取消时间(防止误报)
  2. 确认后调用 /bike/accident 接口
  3. 服务端查询用户预留的紧急联系人
  4. 钉钉机器人自动推送事故位置和用户信息

3.3 电源管理与光伏充电

电源管理电路框图

太阳能板 → 充电IC → 7.4V锂电池
                      ↓
               DC-DC降压 → 5.06V → ESP32
                      ↓
               继电器直连 → 电磁铁(大电流)
  • 光伏充电:6V 3W 太阳能板持续补电
  • 低功耗策略:GPS 无数据时自动重试,干簧管异常触发三次重试后上报故障

四、后台管理系统:数据可视化

后台管理仪表盘截图

后台采用 Vue3 + ECharts + 高德地图API 构建,功能包括:

  • 仪表盘:单车总数、用户总数、请求总量实时刷新
  • 单车位置追踪:地图上实时显示所有车辆分布
  • 用户管理:查看所有用户信息及操作记录
  • 骑行记录:订单详情、轨迹回放
  • 维修管理:报修/修复状态流转
  • 日志审计:服务端日志、单车日志、用户日志全量查询

五、API 接口设计规范

API接口调用时序图

客户端接口示例

接口路径说明
用户登录POST /client/login返回昵称和状态
附近单车POST /client/nearby经纬度范围查询
解锁单车POST /client/unlock创建骑行记录
获取记录POST /client/getrecord历史订单

单车设备接口

接口路径说明
状态检查POST /bike/check返回 lock/unlock
位置更新POST /bike/update实时上报轨迹
事故报警POST /bike/accident触发钉钉推送

安全设计

后台接口统一验证 Token:

{"token": "AABBCC"}

六、部署与运维

Docker容器部署架构图

项目采用 Docker 容器化部署,运行在云服务器上:

  • OpenResty:端口转发、负载均衡
  • MySQL 容器:数据持久化
  • Python Flask 容器:API 服务
  • Docker Compose:一键编排启动

七、项目亮点总结

  1. 技术栈完整闭环:从硬件(ESP32/MPU6050/GPS)到 APP(Vue/Android),从服务端(Flask)到数据库(MySQL),再到大屏(Vue3/ECharts),覆盖全链路
  2. 工程化实践到位:连接池、日志分类、Docker 部署,具备生产环境可用性
  3. 安全与应急机制:事故报警 + 10 秒取消机制、防盗报警、钉钉实时推送
  4. 性能表现优异:实测 89.7 次/秒并发请求,攻击测试服务端稳定不崩溃
  5. 快速落地能力:模块化设计,换用不同地图 SDK 或消息推送渠道只需少量改动

欢迎技术交流。如需完整源代码与硬件文件,请联系