在开始之前,硬件方面你需要一块树莓派4,MCP2515模块和一个CAN分析仪。
我这里的MCP2515模块的晶振为8M的
树莓派4内核为:
pi@raspberrypi:~ $ uname -a
Linux raspberrypi 4.19.75-v7l+ #1270 SMP Tue Sep 24 18:51:41 BST 2019 armv7l GNU/Linux
树莓派与MCP2515模块的连接方式为:
PIN Pi ----------------> MCP2515
#02 5V -----------------> VCC
#06 GND ----------------> GND
#24 (SPI_CE0)GPIO08 ----> CS
#21 (SPI_MISO)GPIO09 ---> SO
#19 (SPI_MOSI)GPIO10 ---> SI
#23 (SPI_CLK)GPIO11 ----> SCK
#22 (GPIO_GEN6)GPIO25 --> INT
硬件工作准备好后,就让我们开始吧~!
1、首先,你要打开你的树莓派SPI功能,可以通过编辑/boot/config.txt文件来实现:
pi@raspberrypi:~ $ sudo vi /boot/config.txt
在config.txt文件中找到dtparam=spi=on,把它前面的#号去掉,也就是取消这一行的注释。然后在下面新起一行,加入下面的语句:
dtoverlay=mcp2515-can0,oscillator=8000000,interrupt=25 dtoverlay=spi-bcm2835
这一步做完以后,你的config.txt文件可能看起来是这样的:
2、安装CAN tools:
pi@raspberrypi:~ $ sudo apt-get install can-utils
安装好之后重启树莓派。
3、看看你的SPI设备中,是否有CAN接口:
pi@raspberrypi:~ $ ls /sys/bus/spi/devices/spi0.0/net/
can0
如果你做完第2步后,成功在/net/目录下有can0这个文件夹,那就说明你的CAN的收发功能能够正常使用。
4、设置你的CAN通信接口:
pi@raspberrypi:~ $ sudo ip link set can0 up type can bitrate 125000
5、向CAN分析仪发送一些数据
首先把MCP2515模块和CAN分析仪连接到一起,再把分析仪连上电脑,打开分析仪专用软件USB_CAN_Tool.exe,打开CAN接收,启动设备:
这里CAN参数的波特率设置为125k。
在树莓派终端向CAN分析仪发送一些数据:
pi@raspberrypi:~ $ cansend can0 123#6666666666666666
可以在USB_CAN_Tool中看到树莓派发送过来的数据:
6、向树莓派发送一些数据
首先,我们要让树莓派准备好接收CAN数据,在终端输入:
pi@raspberrypi:~ $ candump can0
树莓派会进入接收数据的模式,我们用USB_CAN_Tool发送一个ID为0x0100,数据位为99 99 99 99 99 99 99 99的数据,如下图:
点击发送消息后,在树莓派终端可以看到接收到的数据:
按下Ctrl+C即可退出接收模式。
7、关闭CAN接口
pi@raspberrypi:~ $ sudo ip link set can0 down
进阶
怎么样才能在树莓派保存接收过来的CAN数据呢?
比如说把接收过来的CAN数据保存在本地txt文件,或者将CAN数据在IDE中的控制台中显示(print出来),而不是在树莓派终端显示。
我这里用树莓派自带的Thonny IDE来演示把树莓派接收到的数据,打印在控制台上。
首先,需要你在终端设置好CAN通信接口,也就是第4步骤。
然后,打开Thonny,输入以下python程序:
import subprocess
p = subprocess.Popen('candump can0',shell=True,stdout=subprocess.PIPE)
for i in iter(p.stdout.readline,'b'):
if not i:
break
print(i.decode('gbk'))
运行,
然后你就可以用USB_CAN_Tool向树莓派发CAN数据啦!而且这些数据是实时的,也就是说你可以一直向树莓派发数据,而Thonny的控制台也会持续显示接收到的数据。
如果你想保存数据到本地或者另作他用,只需要更改一点程序就行了,这里就不赘述了。
相关资料传送门:
CAN bus on raspberry pi with MCP2515
以上。