Le blog personnel d'un lycéen

[Projet] Un système complet de vélos en libre-service intelligent

Aperçu des projets

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 SandyConception 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 :

CoucheStack techniqueFonction
ClientVue + Android + SDK AmapAffichage de la carte, déverrouillage par scan, enregistrement de trajet, centre utilisateur
Côté véloMicroPython + ESP32 + GPS/MPU6050Remontée de position, détection d'attitude, exécution du déverrouillage
Service APIPython FlaskTraitement de la logique métier, interface de données
Couche de donnéesMySQL + pool de connexionsStockage de données
InfrastructureDocker + Nginx + DebianDé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 :

VersionMatériauPoints d'amélioration
Première générationPLAValidation de la faisabilité de la structure de base
Deuxième générationPLAOptimisation de la solution de lubrifiant
Troisième générationPLAOptimisation de la solution de fixation
Quatrième générationPETG-CFAmélioration considérable de la résistance
Quatrième+ générationPETG-CF + fenêtre PETGRé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 :

  1. Affiche une notification via l'écran OLED, donnant à l'utilisateur 10 secondes pour annuler(pour éviter les fausses alertes)
  2. Après confirmation, appelle /bike/accident l'interface
  3. Le serveur consulte les contacts d'urgence prédéfinis par l'utilisateur
  4. 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 Construction, fonctionnalités incluses :

  • Tableau de bord: Nombre total de vélos, nombre total d'utilisateurs, nombre total de requêtes en temps réel
  • Suivi de la position des vélos: Affichage en temps réel de la distribution de tous les véhicules sur la carte
  • Gestion des utilisateurs: Consulter les informations de tous les utilisateurs et l'historique des opérations
  • Historique des trajets: Détails de la commande, relecture du trajet
  • Gestion de la maintenance: Flux de statut signalement/réparation
  • Audit des journaux: Requête complète des journaux serveur, journaux des vélos, journaux des utilisateurs

V. Spécifications de conception de l'interface API

Exemples d'interfaces client

l'interfaceCheminDescription
Connexion utilisateurPOST /client/loginRetourne le pseudonyme et le statut
Vélos à proximitéPOST /client/nearbyRequête par plage de latitude et longitude
Déverrouillage du véloPOST /client/unlockCréation d'un enregistrement de trajet
Obtention de l'enregistrementPOST /client/getrecordCommandes historiques

Interface de l'équipement du vélo

l'interfaceCheminDescription
Vérification du statutPOST /bike/checkRetourne lock/unlock
Mise à jour de la positionPOST /bike/updateSignalement du trajet en temps réel
Alerte d'accidentPOST /bike/accidentDéclenche la notification DingTalk

Conception de sécurité

Vérification unifiée du Token pour les interfaces backend :

{"token": "AABBCC"}

VI. Déploiement et exploitation

Le projet utilise Conteneurisation DockerDéploiement, exécuté sur un serveur cloud :

  • OpenResty: Redirection de port, équilibrage de charge
  • Conteneur MySQL: Persistance des données
  • Conteneur Python Flask: Service API
  • Docker Compose: Orchestration et démarrage en un clic

七、Résumé des points forts du projet

  1. Chaîne technologique complète et fermée: Du matériel (ESP32/MPU6050/GPS) à l'APP (Vue/Android), du serveur (Flask) à la base de données (MySQL), jusqu'au grand écran (Vue3/ECharts), couvrant toute la chaîne
  2. Pratiques d'ingénierie bien maîtrisées: Pool de connexions, classification des logs, déploiement Docker, disponibilité en environnement de production
  3. Mécanismes de sécurité et d'urgence: Alarme d'accident + mécanisme d'annulation de 10 secondes, alarme antivol, notification en temps réel via DingTalk
  4. Performances excellentes: 89,7 requêtes concurrentes/seconde mesurées, le serveur reste stable sans plantage lors des tests d'attaque

Bienvenue pour les échanges techniques. Pour obtenir le code source complet et les fichiers matériels, veuillezcontacter