RPi 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) | 描述 |
GND | GND | 电源地 |
SCK | SCK | SPI时钟输入 |
MOSI | MOSI | SPI数据输入 |
MISO | MISO | SPI数据输出 |
CS | CE0 | 数据/命令选择 |
INT | 25 | 中断输出 |
- RS485总线
功能引脚 | 树莓派接口(BCM) | 描述 |
GND | GND | 电源地 |
RXD | RXD | 串口接收 |
TXD | TXD | 串口发送 |
- Relay接口
功能引脚 | 树莓派接口(BCM) | 描述 |
GND | GND | 电源地 |
IN_CH1 | GPIO5 | 继电器1 |
IN_CH2 | GPIO6 | 继电器2 |
IN_CH3 | GPIO13 | 继电器3 |
IN_CH4 | GPIO16 | 继电器4 |
IN_CH5 | GPIO19 | 继电器5 |
IN_CH6 | GPIO20 | 继电器6 |
资源介绍
标号 | 名称 | 说明 | |
1 | MCP2515 | CAN 控制器 | |
2 | SI8642ED-B-IS | 数字隔离器 | |
3 | SN65HVD230 | CAN 收发器 | |
4 | SP3485EN | RS485 收发器 | |
5 | LM2596 稳压芯片 | 提供稳定的 5V 电压 | |
6 | 光耦隔离 | 避免继电器外接高压电路干扰控制芯片 | |
7 | 6 路优质继电器 | 单路继电器允许接入负载:≤10A 250V AC 或 ≤10A 30V DC | |
8 | 电源隔离 | 提供稳定的隔离电压,隔离端无须额外供电 | |
9 | 自恢复保险丝 | 自恢复保险丝 | |
10 | 瞬态电压抑制管 | 瞬态电压保护 | |
11 | 继电器和电源 LED 指示灯 | LED亮起表示对应继电器吸合 | |
12 | 40PIN GPIO 接口 | 适用于树莓派 Zero 系列主板 (焊接排针) | |
13 | 继电器接线端子 | 方便用户连接设备 | |
14 | 电源接线端子 | 支持7~36V DC供电 | |
15 | RS485 通信接口 | 连接RS485设备 | |
16 | CAN 通信接口 | 连接CAN设备 | |
17 | RS485 120Ω 终端电阻切换 | RS485 120Ω 终端电阻切换 | |
18 | CAN 120Ω 终端电阻切换 | CAN 120Ω 终端电阻切换 | |
19 | 继电器控制端接口 | 可以断开或者连接继电器控制 | |
20 | 外部电源接口 | 圆孔7~36V DC供电 | |
21 | 开窗加锡 | 支持接入大电流设备 |
安装库
wiringPi
git clone https://github.com/WiringPi/WiringPi cd WiringPi ./build gpio -v # 运行gpio -v会出现对应版本信息,如果没有出现说明安装出错
python
在最新版本的系统中,python的库有些无法正常安装,需要使用虚拟环境,然后进行安装库然后运行程序
非虚拟环境配置
sudo apt-get update sudo apt-get install python3-serial sudo apt-get install python3-can sudo apt-get install python3-gpiozero
虚拟环境配置、运行、退出
# 安装虚拟环境需要的库 sudo apt-get update sudo apt-get install git python3-pip -y sudo apt install python3-venv # 创建一个新的虚拟环境(myenv 这个是虚拟环境的名称,可以进行修改) python3 -m venv myenv # 激活虚拟环境 source myenv/bin/activate # 安装库 pip3 install pyserial pip3 install python-can pip3 install gpiozero # 下载例程(见Wiki对应位置) # 运行例程(见Wiki对应位置) # 退出虚拟环境 deactivate
下载例程
在树莓派终端运行:
sudo apt-get install p7zip-full wget https://www.waveshare.net/w/upload/2/2f/RPi_Zero_Relay_Code.7z 7z x RPi_Zero_Relay_Code.7z -r -o./RPi_Zero_Relay_Code sudo chmod 777 -R RPi_Zero_Relay_Code/
继电器使用
程序现象均为依次闭合继电器,然后依次断开继电器
C
cd RPi_Zero_Relay_Code/Relay/wiringPi/ make clean make sudo ./relay
python
cd RPi_Zero_Relay_Code/Relay/python/ python3 relay.py
CAN使用
本演示程序使用了两个RPi-Zero-Relay模块
提供python与c语言程序
前置工作
将模块连接好,然后修改开机脚本config.txt
sudo nano /boot/config.txt
在最后一行加入如下:
dtparam=spi=on dtoverlay=mcp2515-can0,oscillator=16000000,interrupt=25,spimaxfrequency=3000000
保存退出后,重启树莓派:
sudo reboot
重启后,运行命令查看是否初始化成功:
dmesg | grep -i '\(can\|spi\)'
如果不接上模块可能提示如下:
请检查是否连接上模块。是否开启SPI并开启MCP2515内核驱动。是否进行重启。
确定好两边RPi-Zero-Relay都这样处理了,把两个模块的H与L对应连接
如果使用的是其他的CAN设备,确定连线H-H,L-L即可
C
- 阻塞接收,树莓派打开终端,运行:
cd RPi_Zero_Relay_Code/CAN/wiringPi/receive/ make clean make sudo ./can_receive
- 发送,树莓派打开终端,运行:
cd RPi_Zero_Relay_Code/CAN/wiringPi/send/ make clean make sudo ./can_send
python
树莓派打开终端,运行:
# 进入对应的目录 cd RPi_Zero_Relay_Code/CAN/python/ # 接收端先运行程序: sudo python can_reveive.py # 待接收端运行程序后,发送端在运行程序: sudo python can_send.py
与其他的CAN设备应该如何使用
1.确保硬件接线是正确的,即H-H,L-L连接
2.确保两边的波特率设置一致的,默认的例程设置的波特率为100K
3.确保两边的CAN ID是一致的,否则无法接收到
4.如果长时间发送数据有丢帧现象,可以尝试降低波特率解决
RS485使用
本演示程序使用了两个RPi-Zero-Relay模块
提供python与wiringPi语言程序
前置工作
开启Uart接口
打开树莓派终端,输入以下指令进入配置界面
sudo raspi-config 选择Interfacing Options -> Serial,关闭shell访问,打开硬件串口
打开/boot/config.txt文件,找到如下配置语句使能串口,如果没有,可添加在文件最后面。
enable_uart=1
然后重启树莓派:
sudo reboot
确定好两边树莓派都这样处理了,把两个模块的A与B对应连接
如果使用的是其他的485设备,确定连线A-A,B-B即可
C
- 阻塞接收,树莓派打开终端,运行:
cd RPi_Zero_Relay_Code/485/WiringPi/receive make clean make sudo ./485_receive
- 发送,树莓派打开终端,运行:
cd RPi_Zero_Relay_Code/485/WiringPi/send make clean make sudo ./485_send
python例程
# 进入对应的目录 cd RPi_Zero_Relay_Code/485/python/ # 接收端先运行程序: sudo python receive.py # 待接收端运行程序后,发送端在运行程序: sudo python send.py
故障排查
如果485通信不正常,请分步调试:
- 确认是否禁止了从串行登录树莓派shell;
- 确定485的A,B是否与控制的485设备A,B一一对应;
- 可以先使用USB to 485设备与RPi Zero Relay通信,保证树莓派的设置没有问题;
FAQ
参考安装库部分安装对应库即可
对应的库出现问题,比如安装不完全等;卸载对应的库文件,然后重新安装即可
例:
# 卸载 pyserial pip3 uninstall pyserial # 安装 pyserial pip3 install pyserial
该警告不会影响程序的执行,只是库里对应的函数没有找到相应的依赖,我们例程实际上没有使用到这一部分;
如果想消除这些警告,安装对应的库即可
例:
# 安装 lgpio pip3 install lgpio # 安装 RPi.GPIO pip3 install RPi.GPIO