É possível trabalhar com o protocolo CAN utilizado nos automóveis no Raspberry Pi utilizando um HAT CAN. Isto permite-lhe ligar e descodificar mensagens do computador de bordo e obter informações como o consumo de combustível, a velocidade oua rotação do motor.
Instalação de bibliotecas
Para usar o chapéu CAN com o Raspberry Pi, é necessário apenas um pacote python can-utils
sudo apt-get install can-utils
Este pacote gere o protocolo de comunicação CAN normalmente utilizado na indústria automóvel.
- ler e descodificar mensagens CAN
- guardar mensagens num ficheiro CANlog
- reproduzir o ficheiro CANlog num bus CAN real ouvirtual para simular um dispositivo
N.B.: pode também instalar o pandas e o matplotlib para processar e rastrear os dados recebidos.
Configuração do bus CAN
sudo ip link set can0 up type can bitrate 50000
sudo ip link set can0 down
Para um barramento de latas virtual, é possível introduzir os seguintes comandos
sudo modprobe vcan
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
Para verificar se o barramento de latas está no lugar, introduza o comando
ifconfig can
ou
ip addr | grep can
Envio e receção de mensagens CAN
Introduzir o comando de transmissão num terminal
cansend can0 001#1122334455667788
Em seguida, noutro terminal, introduza o comando de receção
candump -tz can0
o sinalizador -tz é opcional e é utilizado para mostrar a 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
Gravação e reprodução de um ficheiro CANlog
Para guardar um ficheiro de registo das mensagens CAN, introduzir o comando:
candump -l can0
este comando cria um ficheiro candump–.log
O ficheiro pode ser reproduzido no mesmo barramento de latas ou num barramento 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
Descodificação das mensagens do bus CAN
Para descodificar as mensagens num bus CAN, é necessário ter a definição das mensagens no bus CAN. Esta definição está descrita num ficheiro .dbc, que é a base de dados do bus CAN. Este documento contém o identificador da mensagem e o nome dos sinais que ela contém.
Aplicações
Depois de dominar o protocolo, pode utilizar a placa CAN hat com o Raspberry Pi para desenvolver dispositivos incorporados para a indústria automóvel.