Smart Parking
Systeme de gestion et de surveillance de parking automatise avec detection en temps reel par capteurs infrarouges, reservation en ligne et administration complete.
Projet BTS CIEL IR — APON BARUA - LUCAS GOMES — Groupe scolaire La Salle Saint-Denis — 2025/2026
Fonctionnalites
Authentification
- Inscription et connexion securisees
- Mots de passe haches avec BCrypt
- Authentification par token JWT (expire apres 24h)
- Deux roles : Client et Administrateur
Carte du Parking
- Affichage en temps reel de l'etat des places
- 3 etats : Libre, Occupee, Reservee
- Mise a jour automatique toutes les 3 secondes
- Details de chaque place au clic
Detection automatique
- Capteurs infrarouges IR LM393 sur chaque place
- ESP32 connecte en WiFi au Raspberry Pi
- Communication MQTT vers le serveur
- Changement d'etat instantane sur le site
Systeme de Reservation
- Selection de la place, date, heure et duree
- Verification des conflits d'horaire
- Saisie de la plaque d'immatriculation
- Expiration automatique des reservations
Panel Administrateur
- Statistiques globales du parking
- Gestion de l'etat de chaque place (1 a 20 places)
- Liste des utilisateurs avec suppression
- Gestion des reservations (terminer, annuler)
- Historique complet des actions
Tarifs
| Duree |
Prix |
| 30 minutes |
2€ |
| 1 heure |
3€ |
| 2 heures |
5€ |
| 4 heures |
8€ |
| Journee (8h) |
15€ |
Architecture technique
Materiel
| Composant |
Reference |
Quantite |
| Microcontroleur WiFi |
ESP32 Freenove WROVER |
1 |
| Capteur infrarouge |
Module IR LM393 |
3 |
| Serveur central |
Raspberry Pi 4 |
1 |
| Cables |
Dupont F-F et F-M |
Plusieurs |
Configuration reseau
| Interface |
Adresse IP |
Utilisation |
| Ethernet |
172.16.60.40 |
Reseau ecole |
| WiFi (hotspot) |
172.20.10.2 |
Communication ESP32 |
| Docker bridge |
172.18.0.1 |
Reseau interne Docker |
Ports
| Service |
Port |
| Node.js (HTTP) |
3000 |
| MariaDB |
3306 |
| Mosquitto (MQTT) |
1883 |
Technologies utilisees
Hardware
- ESP32 Freenove WROVER (WiFi + GPIO)
- Capteurs IR LM393 (GPIO 15, 4, 12)
- Raspberry Pi 4 (serveur central)
Backend
- Node.js + Express.js
- MariaDB (base de donnees relationnelle)
- Mosquitto (broker MQTT)
- Docker + Docker Compose (conteneurisation)
- JWT (authentification)
- BCrypt (hachage mots de passe)
Frontend
- HTML5 / CSS3 / JavaScript (sans framework)
- Design responsive (PC et mobile)
Outils
- Arduino IDE (programmation ESP32)
- Gitea + GitHub (versioning)
- Draw.io (schemas)
Structure du projet
API REST
Authentification
| Methode |
Endpoint |
Description |
| POST |
/api/register |
Creer un compte |
| POST |
/api/login |
Se connecter |
Utilisateurs
| Methode |
Endpoint |
Description |
| GET |
/api/users |
Liste des utilisateurs (admin) |
| PUT |
/api/users/profile |
Modifier mon profil |
| DELETE |
/api/users/:id |
Supprimer un utilisateur (admin) |
Places
| Methode |
Endpoint |
Description |
| GET |
/api/spots |
Liste des places |
| PUT |
/api/spots/:id/status |
Modifier le statut |
| POST |
/api/spots/init |
Reinitialiser les places (admin) |
Reservations
| Methode |
Endpoint |
Description |
| GET |
/api/reservations |
Mes reservations |
| GET |
/api/reservations/all |
Toutes les reservations (admin) |
| POST |
/api/reservations |
Creer une reservation |
| PUT |
/api/reservations/:id/cancel |
Annuler une reservation |
| PUT |
/api/reservations/:id/complete |
Terminer une reservation (admin) |
Statistiques
| Methode |
Endpoint |
Description |
| GET |
/api/stats |
Statistiques du parking |
| GET |
/api/history |
Historique (admin) |
Base de donnees (6 tables)
| Table |
Description |
| users |
Comptes utilisateurs (id, name, email, password, role) |
| spots |
Places de parking (id, number, status, sensor_id) |
| reservations |
Reservations (user_id, spot_id, date, start_time, end_time, vehicle, price) |
| history |
Historique des actions (action, details, user_id, timestamp) |
| stats |
Statistiques periodiques (occupation, taux) |
| mqtt_events |
Messages MQTT recus (topic, message, received_at) |
Installation et demarrage
1. Demarrer le hotspot WiFi sur le telephone
2. Sur le Raspberry Pi
3. Televerser le code ESP32
Ouvrir Arduino IDE, selectionner ESP32 Wrover Module, televerser le code.
4. Acceder au site
Compte administrateur par defaut
Securite
- Mots de passe haches avec BCrypt (10 rounds)
- Authentification JWT avec expiration 24h
- Middleware de verification sur toutes les routes protegees
- Fichier .env non versionne (secrets exclus de GitHub)
- Regles iptables pour le pare-feu Linux
Chiffres cles
| Metrique |
Valeur |
| Lignes de code |
~3 900 |
| Fichiers |
17 |
| Langages |
JavaScript, HTML, CSS, C++, SQL |
| Endpoints API |
12 |
| Tables MariaDB |
6 |
| Delai de mise a jour |
Moins de 3 secondes |
Equipe
| Membre |
Role |
| APON BARUA |
IoT, Web, Backend, BDD, Docker, Securite |
| Lucas |
Electronique, Arduino, Barrieres, Schemas |
| Mahmoud |
Camera de surveillance |
Smart Parking — BTS CIEL IR — APON BARUA — 2025/2026