← Retour au CV
BTS CIEL - Mini projet

Projet CAN

Ce projet a pour objectif de récupérer et afficher le régime moteur de manière compacte et simplifiée. Pour cela, une carte ESP32 équipée d’un module MCP2515 se connecte au bus CAN afin de recevoir les trames moteur. Les données sont ensuite exploitées localement sur un écran OLED, puis envoyées vers un Raspberry Pi qui diffuse les informations sur une interface web temps réel via WebSocket.

Maquette du projet CAN

Résumé du projet

Objectif Afficher le régime moteur sur OLED et sur une jauge web.
Matériel ESP32, MCP2515, transceiver, OLED, Raspberry Pi, véhicule.
Compétences Bus CAN, embarqué, réseau, Node.js, WebSocket, supervision.

Sommaire du dossier

A / Spécification
Analyse du besoin, diagramme SysML de cas d’utilisation, diagrammes SysML de séquence.

B / Conception préliminaire
Diagramme de déploiement, diagramme Bdd, diagrammes ibd, détails des tâches professionnelles et planning.

C / Conception détaillée
Résultats techniques, explications des tâches réalisées et validation des choix.

D / Validation
Vérification du fonctionnement complet et recette des exigences définies en début de projet.

Analyse du besoin

Le besoin principal de ce projet est d’obtenir une lecture du régime moteur depuis le réseau CAN du véhicule, puis de l’afficher de manière simple, lisible et exploitable. La solution doit fonctionner à la fois en local sur un écran embarqué et à distance via une page web. Le projet mobilise donc plusieurs briques techniques : acquisition de trames CAN, traitement de données, affichage embarqué, communication réseau et visualisation web temps réel.

Technologies et matériel utilisés

ESP32 MCP2515 Bus CAN Transceiver CAN OLED I2C Raspberry Pi RaspAP Node.js WebSocket Postman Muxtrace Muxdiag

Architecture globale

1. Acquisition CAN

L’ESP32 est relié à une carte MCP2515 qui lui permet de communiquer avec le bus CAN et de recevoir les trames moteur.

2. Traitement local

Le régime moteur est extrait des octets reçus, converti en tr/min puis affiché sur l’écran OLED sous forme numérique et graphique.

3. Diffusion réseau

Les valeurs sont transmises au Raspberry Pi qui héberge un serveur Web / WebSocket pour alimenter une jauge consultable depuis un navigateur.

Déroulement des tâches professionnelles

1
Installer et configurer la carte CAN MCP2515 sur ESP32

Mise en place du câblage entre l’ESP32, le module MCP2515, le transceiver, la breadboard et les connexions SPI. La carte MCP2515 agit comme interface SPI vers CAN et permet à l’ESP32 d’envoyer et de recevoir des trames.

2
Valider la réception des trames CAN par simulation

Utilisation du logiciel Muxtrace et du boîtier Muxdiag pour simuler la trame moteur. Les octets transmis ont permis de vérifier l’extraction correcte du régime, de la vitesse et de l’état moteur via le moniteur série.

3
Installer et configurer l’écran OLED

Recherche de l’identifiant I2C, ajout des bibliothèques nécessaires et validation de l’affichage sur l’écran OLED connecté à l’ESP32.

4
Afficher le régime moteur en milliers de tours/minute

Création d’un premier affichage compact du régime moteur sur la première ligne de l’écran OLED en multiple de 1000 tr/min.

5
Traduire le régime moteur en barres sur OLED

Mise en place d’un affichage visuel complémentaire sous forme de barres afin de représenter plus intuitivement la montée en régime.

6
Valider le fonctionnement complet sur véhicule

Test réel sur véhicule avec l’ensemble ESP32 + MCP2515 + OLED afin de confirmer la récupération et l’affichage des données moteur.

7
Configurer un point d’accès Wi-Fi sur Raspberry Pi

Connexion SSH au Raspberry Pi, installation de RaspAP puis mise en service du point d’accès Wi-Fi pour rendre la solution autonome et accessible.

8
Installer un serveur Web et WebSocket en Node.js

Déploiement d’un serveur Node.js sur Raspberry Pi, puis validation de son fonctionnement avec Postman via des tests de requêtes WebSocket.

9
Configurer le client WebSocket sur ESP32

Ajout de la bibliothèque côté ESP32 et validation de l’envoi des données vers le Raspberry Pi, qui reçoit correctement les trames.

10
Créer la page web avec jauge moteur en temps réel

Réalisation d’une interface HTML / CSS / JavaScript utilisant un canvas pour dessiner une jauge automobile animée. Le navigateur reçoit les valeurs via WebSocket et met à jour l’aiguille de façon fluide.

11
Valider le fonctionnement complet de bout en bout

Vérification finale avec le montage complet : véhicule, bus CAN, ESP32, MCP2515, Raspberry Pi, WebSocket et navigateur web.

12
Résultat final

Le système permet d’obtenir une lecture temps réel du régime moteur en local sur OLED et à distance sur une interface web claire et moderne.

Exemple de décodage de trame

Octets 1 et 2 : régime moteur
4500 tr/min × 8 = 36000 = 0x8CA0 → 0x8C 0xA0

Octets 3 et 4 : vitesse véhicule
85,21 km/h → 8521 = 0x2149 → 0x21 0x49

Octet 5 : boîte + rapport
0x72 pour l’état de boîte et rapport engagé selon la simulation choisie.

Octet 6 : état moteur
0x01 → moteur allumé.

Conception détaillée

Affichage embarqué sur OLED

Le régime moteur est affiché sur une première ligne sous forme numérique simplifiée, puis sur une deuxième ligne sous forme de barres afin d’obtenir un retour visuel immédiat et lisible.

Communication réseau avec Raspberry Pi

Le Raspberry Pi sert de passerelle entre le monde embarqué et la supervision web. Il propose un point d’accès Wi-Fi et héberge les services Node.js nécessaires au serveur Web et WebSocket.

Jauge web temps réel

La jauge développée en HTML, CSS et JavaScript utilise un canvas pour simuler un compte-tours automobile avec zones colorées, graduations et aiguille animée. Chaque nouvelle valeur reçue est convertie en angle pour obtenir une animation fluide.

Validation et démonstration

Vue du montage
Montage projet CAN
Vidéo de démonstration

Compétences développées

  • Compréhension et exploitation d’un bus CAN automobile.
  • Configuration d’un ESP32 avec module MCP2515.
  • Lecture et interprétation de trames techniques.
  • Affichage embarqué sur écran OLED.
  • Mise en place d’un Raspberry Pi comme passerelle réseau.
  • Configuration d’un point d’accès Wi-Fi avec RaspAP.
  • Déploiement d’un serveur Web / WebSocket en Node.js.
  • Création d’une interface web dynamique en temps réel.

Conclusion

Ce projet CAN m’a permis de relier plusieurs domaines techniques dans une seule réalisation : embarqué, communication CAN, affichage local, réseau, serveur WebSocket et interface web. Il montre ma capacité à concevoir une chaîne complète de récupération, traitement et visualisation de données dans un contexte concret et proche du terrain.