[Projet] Un système complet de vélos en libre-service intelligent
Une solution complète de vélos en libre-service couvrant l'application utilisateur, la serrure intelligente et le back-office de gestion, avec une stack technique complète, testée résistante à 89,7 requêtes/seconde
Origine du projet
Pour participer à la finale du Concours national d'alphabétisation informationnelle pour les jeunes 2025, nous avons réalisé les fonctions de base de verrouillage/déverrouillage selon les exigences du sujet donné, mais pour nous rapprocher davantage de la vie réelle et en faire un produit complet et mature, nous avons développé davantage de branches et de fonctionnalités innovantes, incluant mais sans s'y limiter :Localisation GPS, détection d'accident et alerte, signalement de panne de véhicule, gestion en cluster des données des véhicules, grand écran de gestion back-office, gestion des données par utilisateur, enregistrement et affichage des données de trajetCouvrantl'application côté utilisateur, la serrure intelligente embarquée, le système de gestion back-office ainsi que le service API。
Cet article analysera en profondeur l'architecture technique et les points forts de la mise en œuvre de ce système.
Répartition des tâches de l'équipe
| Moi (XHL) | Exploitation et maintenance du serveur, mise en place front-end et back-end, application, toute la partie logicielle, etc. | Site web personnel |
| The Sandy | Conception 3D et impression de la structure de la serrure, construction de la structure matérielle, assistance au développement du programme ESP32, etc. | Site web personnel |
I. Architecture globale : conception en couches
Architecture en trois couches du projet :
| Couche | Stack technique | Fonction |
|---|---|---|
| Client | Vue + Android + SDK Amap | Affichage de la carte, déverrouillage par scan, enregistrement de trajet, centre utilisateur |
| Côté vélo | MicroPython + ESP32 + GPS/MPU6050 | Remontée de position, détection d'attitude, exécution du déverrouillage |
| Service API | Python Flask | Traitement de la logique métier, interface de données |
| Couche de données | MySQL + pool de connexions | Stockage de données |
| Infrastructure | Docker + Nginx + Debian | Déploiement conteneurisé, équilibrage de charge |

II. Points forts du serveur : haute performance et haute disponibilité
1 Conception du pool de connexions
Le serveur est développé sur la base de Python Flask, et pour la base de données j'ai encapsulé moi-même SQL 类
from dbutils.pooled_db import PooledDB
Données mesurées: le système peut supporter environ 89 fois/seconde de requêtes de données, et le serveur n'a jamais planté lors des tests d'attaque réseau.
2 Système de journalisation
Toutes les requêtes API sont enregistrées dans la base de données via la fonction server_log() , les types de journaux sont divisés en :
- UTILISATEUR: opérations de connexion, d'inscription, de requête des utilisateurs, etc.
- VÉLO: déverrouillage du vélo, verrouillage, mise à jour de la position
- ACCI: Alarme d'accident, alarme antivol
- MAIN: Demande de réparation, réparation terminée
- PANEL: Accès aux données backend
Cela facilite non seulement la traçabilité des problèmes, mais fournit également une base pour l'analyse de données et les décisions opérationnelles.
3 Intégration des alertes DingTalk
Les alarmes d'accident et les alarmes antivol sont poussées en temps réel via le robot DingTalk :



III. Serrure intelligente de vélo : combinaison du matériel et des algorithmes
1 Itération de la structure mécanique
La conception de modélisation et l'impression 3D ont été réalisées par The Sandy (Site web personnel)
Le boîtier a connu cinq générations d'itération :
| Version | Matériau | Points d'amélioration |
|---|---|---|
| Première génération | PLA | Validation de la faisabilité de la structure de base |
| Deuxième génération | PLA | Optimisation de la solution de lubrifiant |
| Troisième génération | PLA | Optimisation de la solution de fixation |
| Quatrième génération | PETG-CF | Amélioration considérable de la résistance |
| Quatrième+ génération | PETG-CF + fenêtre PETG | Résolution du problème de blocage du signal GPS |
Détails techniques: Le PETG renforcé de fibre de carbone bloque le signal GPS, c'est pourquoi la zone de l'antenne utilise spécialement une conception à fenêtre en PETG.
2 Détection d'attitude et alarme d'accident
Utilisation du capteur six axes MPU6050 pour détecter en temps réel l'attitude du véhicule. Lorsqu'un impact anormal est détecté (comme une chute), le système :
- Affiche une notification via l'écran OLED, donnant à l'utilisateur 10 secondes pour annuler(pour éviter les fausses alertes)
- Après confirmation, appelle
/bike/accidentl'interface - Le serveur consulte les contacts d'urgence prédéfinis par l'utilisateur
- Le robot DingTalk pousse automatiquement la position de l'accident et les informations de l'utilisateur
3 Gestion de l'alimentation et recharge photovoltaïque
Panneau solaire → IC de charge → Batterie lithium 7,4V
- Recharge photovoltaïque: Panneau solaire 6V 3W pour une recharge continue
- Stratégie de faible consommation: Nouvelle tentative automatique lorsque le GPS n'a pas de données, après trois déclenchements anormaux du interrupteur à lames souples, un rapport de panne est envoyé
IV. Système de gestion backend : visualisation des données

Le backend utilise Vue3 + ECharts + API de cartographie Amap 构建,功能包括:
- 仪表盘:单车总数、用户总数、请求总量实时刷新
- 单车位置追踪:地图上实时显示所有车辆分布
- 用户管理:查看所有用户信息及操作记录
- 骑行记录:订单详情、轨迹回放
- 维修管理:报修/修复状态流转
- 日志审计:服务端日志、单车日志、用户日志全量查询
五、API 接口设计规范
客户端接口示例
| l'interface | 路径 | 说明 |
|---|---|---|
| 用户登录 | POST /client/login | 返回昵称和状态 |
| 附近单车 | POST /client/nearby | 经纬度范围查询 |
| 解锁单车 | POST /client/unlock | 创建骑行记录 |
| 获取记录 | POST /client/getrecord | 历史订单 |
单车设备接口
| l'interface | 路径 | 说明 |
|---|---|---|
| 状态检查 | POST /bike/check | 返回 lock/unlock |
| 位置更新 | POST /bike/update | 实时上报轨迹 |
| 事故报警 | POST /bike/accident | 触发钉钉推送 |
安全设计
后台接口统一验证 Token:
{"token": "AABBCC"}
六、部署与运维
项目采用 Docker 容器化部署,运行在云服务器上:
- OpenResty:端口转发、负载均衡
- MySQL 容器:数据持久化
- Python Flask 容器:API 服务
- Docker Compose:一键编排启动
七、项目亮点总结
- 技术栈完整闭环:从硬件(ESP32/MPU6050/GPS)到 APP(Vue/Android),从服务端(Flask)到数据库(MySQL),再到大屏(Vue3/ECharts),覆盖全链路
- 工程化实践到位:连接池、日志分类、Docker 部署,具备生产环境可用性
- 安全与应急机制:事故报警 + 10 秒取消机制、防盗报警、钉钉实时推送
- 性能表现优异:实测 89.7 次/秒并发请求,攻击测试服务端稳定不崩溃
欢迎技术交流。如需完整源代码与硬件文件,请contacter