【RaspberryPi】 RaspberryPiとArduinoをCAN通信させた
RaspberryPiとArduinoをCAN通信させたいと思いやってみた。
ので、とりあえずメモ。
準備
- RaspberryPi2
- Arduino Uno
- Rasbee オリジナル MCP2515 CAN バス モジュール TJA1050 レシーバーSPIモジュール Arduinoのための AVR (2個)
MCP2515 TJA1050
本来は、MCP2551、MCP2515を単品買いたいところだったのですが
MCP2551がAmazonや秋月になかったので
諦めてMCP2551ではありませんがMCP2515がくっ付いていて
セットになっているものを買いました。
(安いです。。。)
CANコントローラのMCP2515は、3V,5Vどちらでも動作可能ですが
CANトランシーバのTJA1050は、5Vで動作します。
また、RaspberryPiのGPIO端子は3Vであるため
5Vを突っ込んでも動作しないか壊す可能性があります。
そのため、RaspberryPiで使用するCANモジュールでは
MCP2515のVCCを3Vにして、他の部品は電圧5Vで動作するようにします。
写真では見にくいですが、MCP2515のVCCは基盤に触れないよう切ってあります。
で、ジャンパワイヤーで3Vの電圧をかけています。
Arduinoで使用する方はそのままでOK。
参考
こちらの方を参考にしました。
Raspberry Pi CAN通信 (MCP2515 TJA1050 CAN Bus Module) - Qiita
また基盤の裏を改造するのも手のようだ。。。
[quick-guide] CAN bus on raspberry pi with MCP2515
RaspberryPi側の設定
SPIの設定
SPIを使用して、通信をやりとりするためSPIを有効にします。
$ raspi-config
SPIを有効にする。
/boot/config.txt
# Added for SPI-mcp2515
dtparam=spi=on
dtoverlay=spi-bcm2835-overlay
dtoverlay=mcp2515-can0-overlay,oscillator=1600000,interrupt=25
に設定して再起動。
CAN通信確認用ソフトのインストール
CAN Utils
$ sudo apt-get install autoconf git libtool
$ git clone https://github.com/linux-can/can-utils.git
$ cd can-utils
$ ./autogen.sh
$ ./configure
$ make
$ sudo make install
確認方法などは下記がとても参考なる。
OBD2(CAN)で自動車と通信(ソフト編) | Make.
補足
oscillatorは発振子の周波数を設定するっぽい。
今回買った、CAN バス モジュールについてる発振子の周波数は8MHZなので
最初、8MHZ設定してみたんだけどArduino側でCAN送信する際に、
16MHZ設定しないと送信できなかったため16MHZ設定。
なぜ8MHZで通信できなくて、16MHZなら可能なのかわからない。
この辺勉強不足orz