[CAN] Python "CAN BUS tools"로 CAN 데이터 받기

Heimerdinga_dinga·2022년 11월 3일

임베디드

목록 보기
3/3

일단 내 코드 기록해두려고 작성 하는 글!
프로젝트 마무리되면 글 수정해서 다듬을 예정 :3

CAN BUS tools 이라는게 있길래, 나는 라이브러리를 활용해봤다.
https://cantools.readthedocs.io/en/latest/ 이 홈페이지를 참고 및 활용했으니, 보다 자세한 내용은 홈페이지를 살펴보길 추천한다 :)


OS는 Ubuntu 18.04에서 진행하였으며, 시리얼CAN 인터페이스 연결은 이전 포스트를 확인해보길!



1. CAN BUS tools 설치

설치는 아래 명령어 한줄로 끝난다.

$ pip install cantools

설치하면서 몇가지 라이브러리 버전이 안맞아서 에러가 났는데, 안내뜨는 버전으로 맞춰주면 무사히 잘 설치가 된다!



2. CAN 데이터 받기

2.1 Library import

import cantools
import can

2.2 Serial CAN interface 정의

can_bus = can.interface.Bus('slcan0', bustype='socketcan')

나는 시리얼CAN 장치를 slcan0으로 설정했다.
장치 설정부분은 이전 포스팅 참고!


2.3 CAN 프로토콜 수신

CAN 프로토콜은 recv() 함수를 통해 받을 수 있다.

data = can_bus.recv()
print(data)

data_data = data.data #can프로토콜의 data 필드 값

data_id = data.arbitration_id #can프로토콜 ID

2.4 CAN Data decode

cantools로 data를 decode하기 위해선, .dbc 파일이 필요하다.
.dbc 파일을 기반으로 can data 정보를 불러온 뒤, decode 함수를 사용하면 쉽게 decode된 can data를 얻을 수 있다.

db =  cantools.database.load_file('/home/mi/catkin_ws/rt3k.dbc')

can_bus = can.interface.Bus('slcan0', bustype='socketcan')
data = can_bus.recv()

decode_messages = db.decode_message(data.arbitration_id, data.data)

print(decode_messages)




참고자료
https://cantools.readthedocs.io/en/latest/

0개의 댓글