Il est possible de travailler avec le protocole CAN utilisé dans l’automobile sur Raspberry Pi en utilisant un CAN HAT. Cela permet de se brancher et de décoder les messages provenant de l’ordinateur de bord et permet de récupérer des informations comme la consommation, la vitesse ou le régime moteur.
Installation des librairies
Pour utiliser le CAN Hat avec Raspberry Pi, un seul paquet python est nécessaire can-utils
sudo apt-get install can-utils
Ce paquet permet de gérer le protocole de communication CAN couramment utilisé dans l’automobile.
- lire et décoder des messages CAN
- enregistrer les messages dans un fichier CANlog
- rejouer le fichier CANlog sur un bus CAN réel ou virtuel pour simuler un appareil
N.B.: vous pouvez aussi installer pandas et matplotlib pour traiter et tracer les données reçues
Configuration du bus CAN
sudo ip link set can0 up type can bitrate 50000
sudo ip link set can0 down
Pour un bus can virtuel, vous pouvez entrer la commandes suivante
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
Pour vérifier que le bus can est bien en place, entrez la commande
ifconfig can
ou
ip addr | grep can
Envoyer et recevoir des messages CAN
Entrer la commande d’émission dans un terminal
cansend can0 001#1122334455667788
Puis dans une autre terminal, entrez la commande de réception
candump -tz can0
le flag -tz est optionnel et permet d’avoir le temps affiché
(1668600101.854788) can0 0B2#0000000000000000
(1668600101.855011) can0 116#04045CAE092596FF
(1668600101.855285) can0 11E#6B04000000000000
(1668600101.855949) can0 107#0000FE46411404E7
(1668600101.856174) can0 0A7#CDD35F7FFDF5173F
(1668600101.856408) can0 0A8#C1D35FC98C643C0F
(1668600101.856652) can0 32C#0003000098240810
(1668600101.856904) can0 557#0000000000000000
(1668600101.857743) can0 086#1703C82100000000
(1668600101.858067) can0 23D#0000F8FFFFFF3F00
(1668600101.859665) can0 3D0#000000A380008000
(1668600101.859913) can0 33C#0000012080000000
(1668600101.860199) can0 16A954C2#006B000000000000
(1668600101.863567) can0 464#0000000000000000
(1668600101.863814) can0 3DE#FE00000000000000
(1668600101.864582) can0 0B2#0000000000000000
(1668600101.864826) can0 0FD#E5E53F8000000000
(1668600101.865070) can0 101#B4057E0582030000
(1668600101.865308) can0 106#B985B3040000AF20
(1668600101.865631) can0 120#860200020008FF01
(1668600101.865866) can0 121#4602004039627EFE
(1668600101.866109) can0 15A#760E000001E60000
(1668600101.866339) can0 0A8#71D45FC98C643E0F
(1668600101.866574) can0 0A7#F7D45F7FFDF5173F
Enregistrer et rejouer un fichier CANlog
Pour enregistrer un fichier log des messages CAN, entrez la commande:
candump -l can0
cette commande crée un fichier candump-<date>-<time>.log
Il est possible de rejouer le fichier sur le même bus can ou sur un bus différent
canplayer -I candump-2022-11-16_120141.log #play can on same canbus as in the file
canplayer vcan0=can1 -v -I candump-2022-11-16_120141.log #play saved canbus (can1) on vcan0
canplayer -l 2 -I candump-2022-11-16_120141.log #play can data twice
canplayer -l i -I candump-2022-11-16_120141.log #play can data inifinitely
Décoder les messages d’un bus CAN
Pour décoder les messages d’un bus CAN, il est nécessaire d’avoir la définition des messages sur le bus CAN. Cette définition est décrite dans un fichier .dbc qui est la base de données d’un bus CAN. Ce document contient l’identifiant du message ainsi que le nom des signaux qu’il contient.
Utilisations
Une fois le protocole bien maitrisé, vous pourrez utiliser la carte CAN hat avec Raspberry Pi pour développer des appareils embarqués dans l’automobile.