准备

目标

疫情在家,想着用树莓派3B+,通过CAN卡接收CAN数据,外接触摸屏,实时显示CAN数据。计划使用python作为开发语言,用pyqt库界面开发,can卡尽量选择低成本解决方案。
kvaser和pcan是比较常用的can接口设备,也自带了免费的上层协议lib,比如ccp,obdII等,但是最便宜的正品也要2000多。
因为应用比较简单,只要能实时接收数据就能满足要求,因此选择了微雪的2通道CAN FD扩展板,其实也没找到其它基于树莓派的CAN扩展板。
今天下午板子顺丰快递到手,试用过程记录如下。

树莓派

树莓派 3B+,安装有 buster 系统,
已经有ssh,vnc viewer

微雪双通道CAN卡

型号:2-CH CAN FD HAT,官方淘宝店购买
产品说明在中写的很详细,
http://www.waveshare.net/wiki/2-CH_CAN_FD_HAT
包括电路原理图,CAN芯片和收发器的产品手册等。

安装过程

微雪网站上有比较详细的说明,完全按步骤操作下来,看看是否有问题:

安装BCM2835

C library for Broadcom BCM 2835 as used in Raspberry Pi
This is a C library for Raspberry Pi (RPi). It provides access to GPIO and other IO functions on the Broadcom BCM 2835 chip, as used in the RaspberryPi, allowing access to the GPIO pins on the 26 pin IDE plug on the RPi board so you can control and interface with various external devices.

最新版本是1.62,将微雪说明中的1.60改为最新的1.62版

wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.62.tar.gz
tar zxvf bcm2835-1.62.tar.gz
cd bcm2835-1.60/
sudo ./configure
sudo make
sudo make check
sudo make install

顺利完成

安装wiringPi

官方步骤

sudo apt-get install wiringpi
#对于树莓派4B可能需要进行升级:
cd bcm2835-1.60/
wget https://project-downloads.drogon.net/wiringpi-latest.deb
sudo dpkg -i wiringpi-latest.deb
gpio -v
# 运行gpio -v会出现2.52版本,如果没有出现说明安装出错

我的是3B+,只执行了 sudo apt-get install wiringpi,运行gpio -v 显示版本 2.50

pi@raspberrypi:~ $ gpio -v
gpio version: 2.50
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warrantyRaspberry Pi Details:Type: Pi 3B+, Revision: 03, Memory: 1024MB, Maker: Sony* Device tree is enabled.*--> Raspberry Pi 3 Model B Plus Rev 1.3* This Raspberry Pi supports user-level GPIO access.

完成此步骤

安装Python函数库

我学的是 python3,所以只安装对应的函数库

#python3
sudo apt-get update
sudo apt-get install python3-pip
sudo apt-get install python3-pil
sudo apt-get install python3-numpy
sudo pip3 install RPi.GPIO
sudo pip3 install spidev
sudo pip3 install python-can

实际操作下来,只有最后一个函数库 python-can需要下载安装,其余的都是最新的了。
此步骤完成。

下载软件示例代码

微雪已经提供了软件示例 2-CH-CAN-FD-HAT-Demo.7z,在win10系统下下载,解压后有两个文件夹对应Arduino 和 Raspberry Pi(注意:为了在Pi中的终端操作,将目录中的空格都去掉)。然后将 RaspberryPi文件夹复制到树莓派中。

安装例程依赖的Linux 内核驱动

Raspberry Pi 文件夹下有“Linuxdriver” 文件夹,其中包含ModeA和ModeB两种模式,官方说明 “出厂默认A模式,可通过更改电阻来实现B模式,A模式中两路CAN分别使用两组独立的SPI,B模式则是两路CAN公用一组SPI”。
没有仔细看怎么更改电阻,应该需要重新焊接电阻,而且A模式明显效率更好,所以沿用A模式进行测试。
进入Linuxdriver 的文件夹,获取Amode文件夹权限,之后运行install.sh

sudo chmod -R 777 Amode/
cd Amode/
sudo ./install.sh

这步安装时间很长,其中将内核做了降级:
downgrading raspberrypi-kernel-headers from 1.20200205-1 to 1.20190925+1-1

在install.sh 中一开始就强制了内核版本FORCE_KERNEL=“1.20190925+1-1”
不知道是否一定要用这个版本,还是只因为微雪的说明用了当时的最新版本,后面没做更新?!

我使用的版本:1.20200205-1 ,测试之后再试试将 install.sh 改回到这个版本看看。

安装成功后,重启树莓派,并查看是否成功

DKMS: install completed.
------------------------------------------------------
Installation completed!
You need to reboot your raspberry Pi to apply setting.
If you need to uninstall the module, execute the following commands
sudo ./uninstall.sh
Thanks!
------------------------------------------------------

重启树莓派以应用所有设置:
sudo reboot
待树莓派重启后,查看SPI信息:
dmesg | grep spi

和官方文档结果一致

pi@raspberrypi:~ $ dmesg | grep spi
[    4.701856] mcp25xxfd spi0.0: MCP2517 successfully initialized.
[    4.821127] mcp25xxfd spi1.0: MCP2517 successfully initialized.

测试

将CAN0 和CAN1 的 CAN H 和 CAN L两两相连,CAN转接板上默认跳线设置都已经配置成了有120欧电阻。

之后完全根据官方说明配置CAN,设置波特率,工作模式,是否开启FD及配置传输缓冲区大小:

    sudo ip link set can0 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd onsudo ip link set can1 up type can bitrate 1000000 dbitrate 8000000 restart-ms 1000 berr-reporting on fd onsudo ifconfig can0 txqueuelen 65536sudo ifconfig can1 txqueuelen 65536

之后在树莓派中开启两个终端,分别作为输入和输出设备,可以正常发送和接收数据。官方给的说明是配置成 CAN FD格式,根据CAN FD发送格式测试。上面是 can1 发送,下面是can 0接收
如果格式不对,会有提示信息,稍微看看就知道该如何使用了。

小结

微雪的官方说明文档很完整,整个过程没有遇到什么问题,好评!
接下来进一步研究给的python例程,准备后面的具体开发工作。

应用实例

使用自带的程序进行测试

代码很简单,分为send.py 和 receive.py,分别在两个终端下运行。 在运行receive.py的10s内,运行send.pyj就可成功发送和显示接收内容了。

但是运行send.py后会报错 RTNETLINK answers: Device or resource busy

pi@raspberrypi:~ $ sudo python3.7 ~/WaveShare/RaspberryPi/Python/send.py
RTNETLINK answers: Device or resource busy

解决办法很简单,在程序开始先关闭can1接口,增加命令os.system('sudo ifconfig can1 down')
另外最后一句os.system('sudo ifconfig can0 down') ,应该改为can1;
更改后完整的send.py为

import os
import can
os.system('sudo ifconfig can1 down')
os.system('sudo ip link set can1 up type can bitrate 1000000   dbitrate 8000000 restart-ms 1000 berr-reporting on fd on')can0 = can.interface.Bus(channel = 'can1', bustype = 'socketcan_ctypes')# socketcan_nativemsg = can.Message(arbitration_id=0x123, data=[0, 1, 2, 3, 4, 5, 6, 7], extended_id=False)
can0.send(msg)os.system('sudo ifconfig can1 down')

receive.py的内容中有一句 print msg 要改为 pirnt(msg)
msg = can0.recv(10.0):打开接口10s,接收msg。

通过 wiringpi,wiringpi2 实现精确定时

can收发需要做精确的定时周期发送,可以使用 wiringpi 和 wiringpi2 中的函数,主要参考其他博客:
https://blog.csdn.net/qq_38880380/article/details/80318331
https://www.cnblogs.com/yafengabc/p/5096300.html

官方项目地址:
https://pypi.org/project/wiringpi/
https://pypi.org/project/wiringpi2/

安装时需要注意,如果是为python3安装,需要用pip3命令(pip 默认为python2.x版本),而且两个函数库都要装(wiringpi和wiringpi2):

pip3 install wiringpi
pip3 install wiringpi2

之后就可以用内部的毫秒,微妙定时了

树莓派 3B+ 使用微雪2-CH CAN FD HAT相关推荐

  1. 树莓派3B 安装微雪LCD5inch显示器(包含软键盘)

    树莓派单独使用时,往往需要触摸屏和软键盘用以方便操作,微雪LCD显示器就能较好的实现这个功能, 正好实验室又买入了一个3B的板子和一个5inch的显示器,便对着官方的安装手册,亲自安装了一次. 一:材 ...

  2. 树莓派 java 驱动 微雪 墨水屏 epaper

    树莓派 java 驱动 微雪 墨水屏 epaper B站视频指导 驱动结果显示 官方驱动测试 接线 初步测试 java驱动(仅二值图片展示,非灰阶部分) 引脚初始化 初始化墨水屏 点阵排列 显示方法 ...

  3. 树莓派 java 驱动 微雪 墨水屏 4灰阶 epaper

    结果展示 4级灰度阶梯 4灰阶做图展示,如果侵权,请帮忙告知,马上删除 原图: 灰度图: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y ...

  4. 树莓派+多个微雪电子Serial Expansion HAT扩展板叠加方法(扩展多个IO口、串口)

    微雪电子官方教程仅介绍了单层扩展板配置方法, 因此本文参考官方教程的基础上,进行多个扩展板的叠加配置. 文章目录 一.打开I2C接口 二.安装库 三.生成设备 四.堆叠教程 五.扩展IO口配置 总结 ...

  5. 树莓派 java 驱动 微雪 墨水屏 16灰阶 LUT

    16灰度阶梯展示(未优化版) 下图为16灰阶梯度未优化版,可以看出,最黑的黑色颜色不够黑,且往右边越黑,灰阶越不明显,还有很大的优化空间,后续再聊优化. B站视频指导 视频指导:视频地址 https: ...

  6. 树莓派搭载微雪电子墨水屏——过关斩将过程全记录!

    大家晚上好! 几个月之前买到了树莓派3B+和微雪的7.5英寸电子墨水屏,结果因为网上杂乱的教程大敲退堂鼓,一直拖到昨天才成功安装上.如果你在找一篇101,包含了从组装硬件到准备环境的所有内容,那么这篇 ...

  7. 树莓派 java 驱动 4.2寸 微雪 墨水屏 天气 预报

    结果展示 我做的这个很简陋,需要插电,自己玩玩还行,效果见下: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL 实现说明 我一 ...

  8. 树莓派3B+ 编译Qt源码

    最近想在树莓派上安装个Qt的环境,正好手头上有之前玩过的树莓派3B+(4B去年加价卖给矿老板了),所以就把之前用来做游戏机的树莓派3B+来搭建环境了. 首先当然是刷系统,我选择的刷系统的方式是去官方下 ...

  9. 树莓派3b+简单入门

    树莓派3B+简单入门 - panday - 博客园 树莓派3B+远程登录详细配置方法_落晓o的博客-CSDN博客_树莓派ssh配置 1.外观和基本情况 树莓派3b+开箱测试 树莓派3B+ 开箱测试 - ...

最新文章

  1. premiere pr 视频截图
  2. C语言-文件操作总结
  3. java compareto date_int compareTo(Date anotherDate)
  4. 孤灯php加密,PHP实现观察者模式
  5. 对软件测试的认识你了解多少
  6. iText导出pdf,poi导出excel并下载到客户端
  7. nova 宿主机重启自动恢复虚拟机运行状态
  8. 利用WinRar压缩和解压缩文件
  9. MATLAB编程与应用系列-第3章 矩阵运算(4)
  10. golang在windows下编译Linux下的文件
  11. 第三周 3.13-3.19
  12. vs2010使用教程c语言编程,VS2010的使用
  13. order by排序的用法
  14. 职高计算机班主任工作计划,教学工作计划:高职班主任工作计划
  15. 传智播客学习之DOM基础
  16. 使用pip来对相应的版本进行降低的过程的
  17. switch初始化说服务器维护中,switch国行怎么初始化-switch国行初始化教程
  18. 一个或多个页边距被设置到可打印区域之外,是否继续?
  19. 强制删除正在运行的文件
  20. Java 关于使用Arrays.asList()数组转集合的问题

热门文章

  1. c语言围棋程序代码,围棋编程C++或C语言.doc
  2. SAT规约到3SAT
  3. 陆奇公布最新团队:拼多多黄铮、宝宝树王怀南、AI顶级专家邢波...
  4. 仙侠手游源码《一剑问情》完整云服务器搭建过程-源码带GM后台+视频教程加文字教程
  5. 数据分类与聚类的区别
  6. c语言经典01背包问题——洛谷P2871
  7. VAN(大核注意力机制)
  8. 大学生可以选择加盟零食店么
  9. 谷歌的json解析器Gson在Android/Java中的常用工具类
  10. java.io.FileNotFoundException关于使用Intellij Idea时系统找不到指定文件的解决方案