Files
Parking/README.md
2026-06-03 15:43:06 +02:00

240 lines
6.5 KiB
Markdown

# 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
```
[Voiture] → [Capteur IR LM393] → [ESP32 WiFi] → [MQTT] → [Mosquitto]
→ [Node.js] → [MariaDB] → [API REST] → [Site web]
```
### 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
```
Parking/
├── index.html
├── css/
│ ├── style.css
│ ├── auth.css
│ └── dashboard.css
├── js/
│ ├── auth.js
│ ├── dashboard.js
│ ├── map.js
│ ├── reservation.js
│ └── admin.js
├── pages/
│ └── dashboard.html
├── server/
│ ├── server.js
│ ├── package.json
│ ├── db/
│ │ └── database.js
│ ├── middleware/
│ │ └── auth.js
│ └── routes/
│ └── api.js
├── init.sql
├── Dockerfile
├── docker-compose.yml
├── mosquitto.conf
└── README.md
```
## 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
```bash
sudo systemctl start mosquitto
sudo iptables -I INPUT -s 172.18.0.0/16 -p tcp --dport 1883 -j ACCEPT
sudo iptables -I INPUT -s 172.17.0.0/16 -p tcp --dport 1883 -j ACCEPT
cd /home/aponlucas/Parking
docker compose up -d
```
### 3. Televerser le code ESP32
Ouvrir Arduino IDE, selectionner ESP32 Wrover Module, televerser le code.
### 4. Acceder au site
```
http://172.20.10.2:3000
```
## Compte administrateur par defaut
- Email : admin@smartparking.fr
- Mot de passe : admin123
## 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