树莓派 Zero Relay扩展板使用教程

产品概述

提供 C 语言 和 Python 例程。

特点

  • 具备CAN功能,使用SPI接口CAN控制器MCP2515,搭配收发器SN65HVD230
  • 具备RS485功能,使用UART控制,半双工通讯,收发器为SP3485
  • 板载TVS(瞬态电压抑制管),RS485通讯可有效抑制电路中的浪涌电压和瞬态尖峰电压,防雷防静电

产品参数

  • 供电电压: 7V~36V
  • CAN控制芯片: MCP2515
  • CAN收发器: SN65HVD230
  • 485收发器: SP3485
  • 产品尺寸: 123mmx87.92mm
  • 固定孔通经: 3.5mm

接口说明

  • CAN总线
功能引脚树莓派接口(BCM)描述
GNDGND电源地
SCKSCKSPI时钟输入
MOSIMOSISPI数据输入
MISOMISOSPI数据输出
CSCE0数据/命令选择
INT25中断输出
  • RS485总线
功能引脚树莓派接口(BCM)描述
GNDGND电源地
RXDRXD串口接收
TXDTXD串口发送
  • Relay接口
功能引脚树莓派接口(BCM)描述
GNDGND电源地
IN_CH1GPIO5继电器1
IN_CH2GPIO6继电器2
IN_CH3GPIO13继电器3
IN_CH4GPIO16继电器4
IN_CH5GPIO19继电器5
IN_CH6GPIO20继电器6


使用教程

安装库

  • 安装BCM2835, 打开树莓派终端,并运行以下指令
  1. wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.68.tar.gz
  2. tar zxvf bcm2835-1.68.tar.gz
  3. cd bcm2835-1.68/
  4. sudo ./configure && sudo make && sudo make check && sudo make install
  5. # 更多的可以参考官网:http://www.airspayce.com/mikem/bcm2835/
  • 安装wiringPi
  1. sudo apt-get install wiringpi
  2. #对于树莓派2019年5月之后的系统(早于之前的可不用执行),可能需要进行升级:
  3. wget https://project-downloads.drogon.net/wiringpi-latest.deb
  4. sudo dpkg -i wiringpi-latest.deb
  5. gpio -v
  6. # 运行gpio -v会出现2.52版本,如果没有出现说明安装出错
  • python
  1. sudo apt-get update
  2. sudo apt-get install python-serial
  3. sudo pip install python-can

下载例程

在树莓派终端运行:

  1. sudo apt-get install p7zip-full
  2. wget https://www.waveshare.net/w/upload/2/2f/RPi_Zero_Relay_Code.7z
  3. 7z x RPi_Zero_Relay_Code.7z -r -o./RPi_Zero_Relay_Code
  4. sudo chmod 777 -R RPi_Zero_Relay_Code/

CAN使用

本演示程序使用了两个RPi-Zero-Relay模块
提供python与c语言程序

前置工作

将模块连接好,然后修改开机脚本config.txt

  1. sudo nano /boot/config.txt

在最后一行加入如下:

  1. dtparam=spi=on
  2. dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25,spimaxfrequency=3000000


保存退出后,重启树莓派:

  1. sudo reboot

重启后,运行命令查看是否初始化成功:

  1. dmesg | grep -i '\(can\|spi\)'



如果不接上模块可能提示如下:

请检查是否连接上模块。是否开启SPI并开启MCP2515内核驱动。是否进行重启。
确定好两边RPi-Zero-Relay都这样处理了,把两个模块的H与L对应连接
如果使用的是其他的CAN设备,确定连线H-H,L-L即可

C

  • 阻塞接收,树莓派打开终端,运行:
  1. cd RPi_Zero_Relay_Code/CAN/wiringPi/receive/
  2. make clean
  3. make
  4. sudo ./can_receive

接收程序是阻塞的。

  • 发送,树莓派打开终端,运行:
  1. cd RPi_Zero_Relay_Code/CAN/wiringPi/send/
  2. make clean
  3. make
  4. sudo ./can_send


输入对应的数值:

此时接收接收到对应的id的报文:

python

树莓派打开终端,运行:

  1. cd RPi_Zero_Relay_Code/CAN/python/
  2. #先运行接收:
  3. sudo python can_reveive.py
  4. #发送端:
  5. sudo python can_send.py

与其他的CAN设备应该如何使用

1.确保硬件接线是正确的,即H-H,L-L连接
2.确保两边的波特率设置一致的,默认的例程设置的波特率为100K
3.确保两边的CAN ID是一致的,否则无法接收到



4.如果长时间发送数据有丢帧现象,可以尝试降低波特率解决

RS485使用

本演示程序使用了两个RPi-Zero-Relay模块
提供python与wiringPi语言程序

前置工作

开启Uart接口

打开树莓派终端,输入以下指令进入配置界面

  1. sudo raspi-config
  2. 选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口


打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面。

  1. enable_uart=1

然后重启树莓派:

  1. sudo reboot

确定好两边树莓派都这样处理了,把两个模块的A与B对应连接
如果使用的是其他的485设备,确定连线A-A,B-B即可

C

  • 阻塞接收,树莓派打开终端,运行:
  1. cd RPi_Zero_Relay_Code/485/WiringPi/send
  2. make clean
  3. make
  4. sudo ./485_receive

接收程序是阻塞的。

  • 发送,树莓派打开终端,运行:
  1. cd RPi_Zero_Relay_Code/485/WiringPi/send
  2. make clean
  3. make
  4. sudo ./485_send


输入对应的数值:

此时接收端接收到程序

python例程

  1. cd RPi_Zero_Relay_Code/485/python/
  2. #先运行接收:
  3. sudo python receive.py
  4. #发送端:
  5. sudo python send.py

故障排查

如果485通信不正常,请分步调试:

  1. 确认是否禁止了从串行登录树莓派shell;
  2. 确定485的A,B是否与控制的485设备A,B一一对应;
  3. 可以先使用USB to 485设备与RPi Zero Relay通信,保证树莓派的设置没有问题;