Es posible trabajar con el protocolo CAN utilizado en los coches en Raspberry Pi utilizando un CAN HAT. Esto permite conectar y descodificar mensajes del ordenador de a bordo y recuperar información como el consumo de combustible, la velocidad o el régimen del motor.
Instalación de bibliotecas
Para utilizar CAN Hat con Raspberry Pi, sólo se necesita un paquete python can-utils
sudo apt-get install can-utils
Este paquete gestiona el protocolo de comunicación CAN utilizado habitualmente en la industria del automóvil.
- leer y descodificar mensajes CAN
- guardar mensajes en un archivo CANlog
- reproducir el archivo CANlog en un bus CAN real o virtual para simular un dispositivo
N.B.: también puedes instalar pandas y matplotlib para procesar y trazar los datos recibidos.
Configuración del bus CAN
sudo ip link set can0 up type can bitrate 50000
sudo ip link set can0 down
Para un can bus virtual, puede introducir los siguientes comandos
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
Para comprobar que el bus de latas está en su sitio, introduzca el comando
ifconfig can
o
ip addr | grep can
Envío y recepción de mensajes CAN
Introduzca el comando de transmisión en un terminal
cansend can0 001#1122334455667788
A continuación, en otro terminal, introduzca el comando de recepción
candump -tz can0
el indicador -tz es opcional y se utiliza para mostrar la hora
(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
Grabación y reproducción de un archivo CANlog
Para guardar un archivo de registro de mensajes CAN, introduzca el comando:
candump -l can0
este comando crea un archivo candump–.log
El archivo puede reproducirse en el mismo bus de lata o en un bus diferente.
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
Descodificación de mensajes de bus CAN
Para descodificar los mensajes de un bus CAN, es necesario disponer de la definición de los mensajes del bus CAN. Esta definición se describe en un archivo .dbc, que es la base de datos del bus CAN. Este documento contiene el identificador del mensaje y el nombre de las señales que contiene.
Aplicaciones
Una vez que domines el protocolo, podrás utilizar la tarjeta CAN hat con Raspberry Pi para desarrollar dispositivos embebidos para la industria de la automoción.