raspberry pi로 CAN 통신 #2
6458 단어 RaspberryPicanArduino
제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 앱 계획
Reference
이 문제에 관하여(raspberry pi로 CAN 통신 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ryokurta256/items/27f1adfcbcb5cc04b8fa
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
dtparam=spi=on
dtoverlay=mcp2515-can0,oscillator=12000000,interrupt=25,spimaxfrequency=1000000
$ dmesg
または
$ dmesg | grep -i '\(can\|spi\)'
で
[ *.******]CAN device driver interface
[ *.******]mcp251x spi0.0 can0: MCP2515 sucessfully initialized.
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
$ sudo ip link set can0 up type can bitrate 500000
(bitrateはこのあと接続するArduinoボードと同じ500kBps)
$ sudo cansend vcan0 123#1122334455667788
(cansendのフォーマットは <device> <can_frame>)
(can_frameのフォーマットは <ID>#<DATA(byte)>)
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')
Reference
이 문제에 관하여(raspberry pi로 CAN 통신 #2), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ryokurta256/items/27f1adfcbcb5cc04b8fa텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)