raspberry pi로 CAN 통신 #2

6458 단어 RaspberryPicanArduino
Raspberry pi를 사용하여 CAN 통신 지그를 만들고 싶습니다.

제2회째 Intrduction

Raspberry pi의 CAN 준비



raspberry pi(rasbian)에서는 CAN 통신을 OS에서 지원해 주므로, 통신하면서 여러가지 하는 멀티태스킹일 수 있습니다.

이를 위해 먼저 raspbian을 설정합니다.

참고 : RS485-CAN-HAT의 User MANUAL htps //w w. 와우 멋지다. 이 m/w/우 pぉ아 d/2/29/RS485-칸-는 T-우세 r-마누아 kl-엔. pdf

라즈파이의 구성



$sudo raspi-config
에서 구성 도구가 시작되므로,
5 Interfacing Options
을 선택하고,
P4 SPI
를 선택하여 kernel molude를 Enable로 설정합니다.

라이브러리 설치



$ sudo apt-get install python-pip
$ sudo pip install python-can
이제 라이브러리 설치 완료

그런 다음 라이브러리를 사용하려면



$sudo nano/boot/config.txt
에서 설정 파일을 편집합니다.

마지막 줄에
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=1000000

추가 및 저장.
주의점으로서, 이 안의 oscillator는 RS485-CAN-HAT의 보드상에 실장되고 있는 수정의 주파수를 넣습니다.
이번에는 12MHz. (어쩐지 나돌고 있는 것이 8~16MHz까지 마치마치.)

$sudo reboot
에서 OS를 재부팅하면 활성화됩니다.

도서관 점검



콘솔 쉘을 시작하고,
$ dmesg
または
$ dmesg | grep -i '\(can\|spi\)'
で
[    *.******]CAN device driver interface
[    *.******]mcp251x spi0.0 can0: MCP2515 sucessfully initialized.

있다면 OK
반대로
mcp251x spi0.0: Cannot initialize MCP2515. Wrong wring?

mcp251x spi0.0: Probe failed. err=**
등이 있으면 잘 설치되어 있지 않으므로 검토한다.

CAN 유틸리티 설치



can-utils
htps : // 기주 b. 코 m / ぃ ん x - 칸 / 칸 - 집 ls
에서 세트 다운로드, 배포, 컴파일 및 설치.
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install

참고 사이트
htps : // 이 m / 스즈 츠키 0220 / ms / 8642b1c3 51859 95 d

샘플 코드



샘플 코드는 보드 제공 사이트
htps //w w. 와우 멋지다. 코 m / 우키 / RS485_칸_는 T
에서 Demo 코드를 다운로드하여 실행합니다.

전송 테스트



전송 테스트는 코드를 사용하지 않아도
$ sudo ip link set can0 up type can bitrate 500000
(bitrateはこのあと接続するArduinoボードと同じ500kBps)

에서 CAN 모듈을 Open으로 설정하고,
$ sudo cansend vcan0 123#1122334455667788
(cansendのフォーマットは <device> <can_frame>)
(can_frameのフォーマットは <ID>#<DATA(byte)>)

에서 전송 가능.

참고 URL: OBD2 (CAN)로 자동차와 통신 (소프트 편)
여기 링크가 매우 도움이되었습니다.

활용한 부분의 발췌


내용
command


CAN 통신 설정
sudo ip link set can0 type can bitrate 500000

CAN 모듈 비활성화
sudo ifconfig can0 down

CAN 모듈 활성화
sudo ifconfig can0 up

CAN Dump
candump can0


통신 설정은 일단 down하고 나서가 아니면 할 수 없는 것 같습니다.

수신 코드



예제와 같이, 샘플 코드를 조금 커스터마이즈 해 Dump 하도록(듯이) 한다.

나중에 응용 프로그램을 작성하기 위해 파이썬 코드를 사용하도록 사용자 정의했지만 Dump는 위에서 설명한 candump can0으로 만들 수 있습니다 ...
import os
import can

os.system('sudo ip link set can0 type can bitrate 500000')
os.system('sudo ifconfig can0 up')

can0 = can.interface.Bus(channel = 'can0', bustype = 'socketcan_ctypes')# socketcan_native

#original dump
while 1:
    msg = can0.recv(10.0) #タイムアウト時間
    print (msg)
    if msg is None:
        print('Time out')

송수신 확인



<이미지: 각 보드 연결>

히트 싱크 고리고리가 되고 있습니다만, 좌상이 개발 환경 겸 CAN 통신 보드가 보드를 탄 라즈파이4.
오른쪽 하단의 박스에 들어있는 것이 레퍼런스에 사용 Arduino CAN 지그.

각 CAN 보드의 H, L을 연결하고,
라스바이 송신 → Arduino 수신 (확인은 IDE의 시리얼 모니터)
<이미지:Arduino의 수신 시리얼 모니터>


Arduino 송신 (IDE의 시리얼 모니터로 CAN의 성립이 확인 가능) → 라즈파이 수신 (쉘 콘솔에 Dump)
<이미지:Arduino의 송신 시리얼 모니터>


<이미지:라즈파이측의 수신 Dump(Shell 콘솔)>


된다.

이상 여기까지.

다음 예정은 GUI 앱 계획

좋은 웹페이지 즐겨찾기