일단 내 코드 기록해두려고 작성 하는 글!
프로젝트 마무리되면 글 수정해서 다듬을 예정 :3
CAN BUS tools 이라는게 있길래, 나는 라이브러리를 활용해봤다.
https://cantools.readthedocs.io/en/latest/ 이 홈페이지를 참고 및 활용했으니, 보다 자세한 내용은 홈페이지를 살펴보길 추천한다 :)
설치는 아래 명령어 한줄로 끝난다.
$ pip install cantools
설치하면서 몇가지 라이브러리 버전이 안맞아서 에러가 났는데, 안내뜨는 버전으로 맞춰주면 무사히 잘 설치가 된다!
import cantools
import can
can_bus = can.interface.Bus('slcan0', bustype='socketcan')
나는 시리얼CAN 장치를 slcan0으로 설정했다.
장치 설정부분은 이전 포스팅 참고!
CAN 프로토콜은 recv() 함수를 통해 받을 수 있다.
data = can_bus.recv()
print(data)
data_data = data.data #can프로토콜의 data 필드 값
data_id = data.arbitration_id #can프로토콜 ID
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)