[プロジェクト] 完全なスマートシェアサイクルシステム
ユーザーAPP、スマート車載ロック、管理バックエンドをカバーする完全なシェアサイクルソリューション。技術スタックは全面的で、実測耐圧89.7回/秒
プロジェクトの起源
2025全国青少年情報リテラシーコンテスト決勝大会に参加するため、私たちは与えられた課題要件に従って基本的な開錠・施錠機能を完成させましたが、より生活に密着し、完全で成熟した製品にするために、さらに多くの分支および革新的な機能を開発しました。以下を含みますがこれに限りません:GPS測位、事故検知アラート、車両故障報告、車両データクラスタ管理、バックエンド管理大画面、ユーザー単位のデータ管理、走行データ記録表示。カバーするユーザー側APP、組み込みスマートロック、バックエンド管理システムおよびAPIサービス。
本記事では、このシステムの技術アーキテクチャと実装のハイライトを深く分析します。
チーム分担
| 私(XHL) | サーバー運用・保守、フロントエンド・バックエンド構築、APP、すべてのソフトウェア部分など | 個人サイト |
| ザ・サンディ | 車載ロックの3D構造設計とプリント、ハードウェア構造の構築、ESP32プログラム開発の支援など | 個人サイト |
一、全体アーキテクチャ:階層設計
プロジェクトの三層アーキテクチャ:
| 階層 | 技術スタック | 機能 |
|---|---|---|
| クライアント | Vue + Android + 高徳地図 SDK | 地図表示、QRコードスキャン開錠、走行記録、ユーザーセンター |
| 車両側 | MicroPython + ESP32 + GPS/MPU6050 | 測位報告、姿勢検知、開錠実行 |
| API サービス | Python Flask | ビジネスロジック処理、データインターフェース |
| データ層 | MySQL + コネクションプール | データストレージ |
| インフラストラクチャ | Docker + Nginx + Debian | コンテナ化デプロイ、ロードバランシング |

二、サーバー側のハイライト:高性能と高可用性
1 コネクションプール設計
サーバー側は Python Flask で開発し、データベースに関しては自分でカプセル化しました SQL 类
from dbutils.pooled_db import PooledDB
実測データ:システムは約 89回/秒 のデータリクエストに耐えることができ、ネットワーク攻撃テストにおいてサーバー側がクラッシュすることはありませんでした。
2 ログシステム
すべての API リクエストは server_log() 関数を通じてデータベースに記録され、ログタイプは以下に分類されます:
- USER:ユーザーログイン、登録、照会などの操作
- BIKE:自転車のロック解除、ロック、位置更新
- ACCI:事故アラーム、盗難アラーム
- MAIN:修理依頼、修理完了
- PANEL:バックエンドデータアクセス
これは問題の追跡を容易にするだけでなく、データ分析と運用意思決定の基盤も提供します。
3 DingTalkアラート統合
事故アラームと盗難アラームはDingTalkロボットを通じてリアルタイムでプッシュされます:



三、スマート車ロック:ハードウェアとアルゴリズムの融合
1 機械構造のイテレーション
モデリング設計と3Dプリント部分はThe Sandyが担当(個人サイト)
外装は5世代のイテレーションを経ました:
| バージョン | 材料 | 改善点 |
|---|---|---|
| 初代 | PLA | 基本構造の実現可能性を検証 |
| 二代目 | PLA | 潤滑油方案の最適化 |
| 三代目 | PLA | 固定方案の最適化 |
| 四代目 | PETG-CF | 強度が大幅に向上 |
| 四+代目 | PETG-CF + PETG 開窓 | GPS信号遮蔽問題を解決 |
技術的詳細:炭素繊維強化PETGはGPS信号を遮蔽するため、アンテナ領域には専用のPETG開窓設計を採用しています。
2 姿勢検出と事故アラーム
MPU6050六軸センサーを使用して車両の姿勢をリアルタイムで検出します。異常な衝撃(転倒など)を検出すると、システムは:
- OLED画面にポップアップ通知を表示し、ユーザーに 10秒のキャンセル時間(誤報防止)
- 確認後、
/bike/accidentインターフェースを呼び出し - サーバー側でユーザーが登録した緊急連絡先を照会
- DingTalkロボットが事故位置とユーザー情報を自動プッシュ
3 電源管理と太陽光充電
ソーラーパネル → 充電IC → 7.4Vリチウム電池
- 太陽光充電:6V 3Wソーラーパネルで継続的に補充電
- 低消費電力戦略:GPSデータがない場合は自動リトライ、リードスイッチ異常時は3回リトライ後に故障を報告
四、バックエンド管理システム:データ可視化

バックエンドは Vue3 + ECharts + 高徳地図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 | DingTalkプッシュをトリガー |
セキュリティ設計
バックエンドインターフェースは統一してTokenを検証:
{"token": "AABBCC"}
六、デプロイと運用
プロジェクトは Docker コンテナ化を採用してデプロイ、クラウドサーバー上で稼働:
- OpenResty:ポートフォワーディング、ロードバランシング
- MySQL コンテナ:データ永続化
- Python Flask コンテナ:API サービス
- Docker Compose:ワンクリックオーケストレーション起動
七、プロジェクトのハイライトまとめ
- 技術スタックの完全なクローズドループ:ハードウェア(ESP32/MPU6050/GPS)から APP(Vue/Android)、サーバーサイド(Flask)からデータベース(MySQL)、さらに大画面(Vue3/ECharts)まで、全チェーンをカバー
- エンジニアリング実践が万全:コネクションプール、ログ分類、Docker デプロイ、本番環境での可用性を備える
- セキュリティと緊急対応メカニズム:事故アラート + 10秒キャンセルメカニズム、盗難アラート、DingTalk リアルタイムプッシュ
- 優れたパフォーマンス:実測 89.7 回/秒の同時リクエスト、攻撃テストでもサーバーサイドが安定してクラッシュしない
技術交流を歓迎します。完全なソースコードとハードウェアファイルが必要な方は、連絡