Projet IoT pour un bus intelligent équipé de plusieurs capteurs sur Raspberry Pi 4.
- GPS Neo-6M : Localisation du bus (connexion UART GPIO)
- DHT22 : Température et humidité
- MPU9250 : Accéléromètre, gyroscope et magnétomètre (IMU)
- 2x Ultrasonic (HC-SR04) : Détection des passagers aux portes d'entrée et de sortie
- LCD I2C : Affichage du nombre de passagers en temps réel
ProjetPI4/
├── sensors/ # Modules des capteurs
│ ├── __init__.py
│ ├── gps_neo6m.py # Module GPS
│ ├── dht22.py # Module température/humidité
│ ├── mpu9250.py # Module IMU
│ ├── ultrasonic.py # Module capteur ultrasonique
│ └── lcd.py # Module afficheur LCD
├── utils/ # Utilitaires
│ ├── __init__.py
│ ├── data_logger.py # Enregistrement des données
│ └── config_loader.py # Gestion de la configuration
├── config/ # Configuration
│ └── config.json # Fichier de configuration
├── data/ # Données enregistrées (généré automatiquement)
├── logs/ # Fichiers de log (généré automatiquement)
├── main.py # Programme principal
├── requirements.txt # Dépendances Python
└── README.md # Documentation
# Clonez ou copiez le projet sur votre Raspberry Pi
cd ~/ProjetPI4
# Rendez le script exécutable
chmod +x setup.sh
# Lancez l'installation
./setup.sh
# Redémarrez votre Raspberry Pi
sudo reboot- Raspberry Pi 4 avec Raspberry Pi OS (32-bit ou 64-bit)
- Python 3.7 ou supérieur
- Accès GPIO activé
# Mise à jour du système
sudo apt-get update
sudo apt-get upgrade -y
# Installation des dépendances système
sudo apt-get install -y python3-pip python3-dev python3-venv
sudo apt-get install -y build-essential git
sudo apt-get install -y i2c-tools# Activation de l'interface I2C (pour MPU9250 et LCD)
sudo raspi-config
# Interface Options → I2C → Enable
# Activation de l'interface série (pour GPS)
# Interface Options → Serial Port → Enable
# Ou en ligne de commande :
sudo raspi-config nonint do_i2c 0
sudo raspi-config nonint do_serial 0# Création d'un environnement virtuel (recommandé)
python3 -m venv venv
source venv/bin/activate
# Installation des packages
pip install --upgrade pip
pip install -r requirements.txt# Ajouter l'utilisateur aux groupes nécessaires
sudo usermod -a -G gpio $USER
sudo usermod -a -G dialout $USER
# Redémarrer pour que les changements prennent effet
sudo reboot- Modifiez le fichier
config/config.jsonselon votre configuration matérielle - Ajustez les numéros de GPIO si nécessaire
- Vérifiez le port série pour le GPS :
/dev/serial0(UART GPIO) - Vérifiez l'adresse I2C du LCD :
sudo i2cdetect -y 1(généralement 0x27 ou 0x3F)
Voir le fichier circuit_ultrasonic.md pour le schéma complet.
- DHT22 : GPIO 4 (Pin 7)
- Ultrasonic Entrée : GPIO 23 (Trig), GPIO 24 (Echo)
- Ultrasonic Sortie : GPIO 25 (Trig), GPIO 26 (Echo)
- MPU9250 : I2C (GPIO 2/SDA, GPIO 3/SCL)
- LCD I2C : I2C (GPIO 2/SDA, GPIO 3/SCL) - même bus que MPU9250
- GPS Neo-6M : UART GPIO (TX: GPIO 14, RX: GPIO 15) - port
/dev/serial0
Note : Le LCD et le MPU9250 partagent le même bus I2C (c'est normal, ils ont des adresses différentes).
# Si vous utilisez un environnement virtuel
source venv/bin/activate
# Lancer le programme
python3 main.pyLe programme va :
- Initialiser tous les capteurs configurés
- Compter automatiquement les passagers (détection à 3cm)
- Afficher sur le LCD : "Passagers: X/10" ou "BUS PLEIN"
- Collecter les données à intervalles réguliers
- Enregistrer les données dans le dossier
data/ - Logger les événements dans
logs/smart_bus.log
- Comptage automatique de passagers : Détection à 3cm aux portes d'entrée et de sortie
- Affichage LCD en temps réel : Nombre de passagers et statut (PLEIN/occupation)
- Maximum 10 passagers : Configurable dans
config/config.json - Enregistrement des données : Toutes les données sont sauvegardées en JSON/CSV
Modifiez config/config.json pour :
- Activer/désactiver des capteurs
- Changer les pins GPIO
- Modifier l'intervalle de collecte
- Changer le format de sauvegarde (JSON/CSV)
Les données sont enregistrées au format JSON avec la structure suivante :
{
"timestamp": "2024-01-01T12:00:00",
"sensors": {
"gps": {
"latitude": 48.8566,
"longitude": 2.3522,
"altitude": 35.0,
"speed": 0.0
},
"dht22": {
"temperature": 22.5,
"humidity": 45.0,
"unit": "celsius"
},
"mpu9250": {
"acceleration": {"x": 0.0, "y": 0.0, "z": 9.8},
"gyroscope": {"x": 0.0, "y": 0.0, "z": 0.0},
"magnetometer": {"x": 0.0, "y": 0.0, "z": 0.0}
},
"ultrasonic_entry": {
"distance": 25.5,
"unit": "cm",
"door_type": "entree",
"timestamp": 1704110400.0
},
"ultrasonic_exit": {
"distance": 30.0,
"unit": "cm",
"door_type": "sortie",
"timestamp": 1704110400.0
}
},
"passengers": {
"count": 5,
"max": 10,
"is_full": false
}
}Chaque capteur a son propre module dans sensors/ avec :
- Méthode
__init__()pour l'initialisation - Méthode
read_data()pour lire les données - Méthodes spécifiques pour accéder aux valeurs individuelles
- Créez un nouveau fichier dans
sensors/ - Implémentez la classe avec
read_data() - Ajoutez l'import dans
sensors/__init__.py - Ajoutez la configuration dans
config/config.json - Intégrez dans
main.py
- Assurez-vous d'avoir les permissions GPIO (utilisateur dans le groupe
gpio) - Le GPS peut prendre quelques minutes pour obtenir un fix satellite
- Certains capteurs nécessitent un temps de stabilisation après l'alimentation
- DHT22 : Utilise la bibliothèque moderne
adafruit-circuitpython-dht(compatible avec Raspberry Pi OS Bookworm+) - GPS : Utilise le port série UART GPIO
/dev/serial0(lien symbolique vers/dev/ttyAMA0)
- Ne connectez pas les capteurs avec des tensions incorrectes
- Vérifiez les connexions avant d'alimenter
- Utilisez des résistances de pull-up/pull-down si nécessaire
Ce projet est fourni tel quel pour usage éducatif et de développement.
