树莓派USB端口重映射与下位机串口通信

序言

​ 我常用树莓派作为上位机,来处理单片机无法完成的任务,在项目中,我们会难免需要两者建立通信。串口通信就是一个选择,然而串口设备端口号是不固定的,会导致每次运行程序前我们都需要寻找端口号。此教程是在树莓派ubuntu20上固定IP号的操作,最终结果会让任何设备插到固定USB口的端口号固定。

1、寻找USB的ID_PATH

在没有插入usb设备前执行:

lsusb

插入usb设备后再次执行:

lsusb

可看到如下结果:

在这里插入图片描述

其中多出的那个就是你插入的usb设备信息,我的是:

Bus 001 Device 013: ID 0483:5740 STMicroelectronics Virtual COM Port

网上大部分固定IP是使用ID c251:f001,但实际上不同的USB设备,它的ID是不同的,在这里我使用的是固定USB端口设备在树莓派中的设备路径.

输入以下命令(001与013 为上述获得的BUS和Device号,按实际修改):

udevadm info /dev/bus/usb/001/013

在这里插入图片描述

我们要获取的是设备的ID_PATH,即:

ID_PATH=platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3

通过此方法查到ID_PATH仅代表该USB端口在连接关系,如果想要代表我们所插入的usb设备,需在后面添加 “:1.0”,即

platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0

经测试,树莓派四个USB端口所连接的设备分别是:

platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.1:1.0	#右上角USB
platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.2:1.0	#右下角USB
platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0	#座上角USB
platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.4:1.0	#左下角USB
  • 对ID_PATH的解读
    • platform-fd500000.pcie-pci-0000:01:00.0 表示 USB 设备所连接的总线,可能是一个 PCIe 接口。
    • usb-0:1.1:1.0 表示连接的端口和接口。具体而言,这个设备连接在总线的 0 号 USB 控制器上的 1 号端口,设备的接口编号为 1(在树莓派上还有2,3,4),子接口编号为 1。
2、修改配置文件

​ 输入以下命令:

sudo vim /etc/udev/rules.d/myusb.rules	#myusb.d是我自己创建的文件

添加以下内容

SUBSYSTEM=="tty", ENV{ID_PATH}=="platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0", SYMLINK+="ttyUSBserial"

其中ID_PATH根据自己使用的树莓派USB端口修改,ttyUSBserial是我自己命名的固定端口。

重启后,执行以下命令:

ls -l /dev/tty*

可以看到以下内容

在这里插入图片描述

尝试在此USB插入其他类型USB设备,如下:

在这里插入图片描述

同样,我们配置的ttyUSBserial都会指向此USB端口插入的设备。

实际上,ubuntu的所有设备都是保存在/dev目录下的,在此目录下,你能够查看所有的USB设备名称:

在这里插入图片描述

3、测试
  • 建立一个test.py文件,输入以下内容

    import serial
    
    # 串口号和波特率
    PORT = '/dev/ttyUSBserial'
    BAUDRATE = 9600
    
    try:
        # 尝试打开串口连接
        ser = serial.Serial(port=PORT, baudrate=BAUDRATE)
        # 如果成功打开串口,打印成功信息
        print(f'Successfully opened serial port {PORT} at {BAUDRATE} baud.')
        # 关闭串口连接
        ser.close()
    except serial.SerialException:
        # 如果打开串口失败,打印错误信息并退出脚本
        print(f'Error opening serial port {PORT}.')
    
  • 运行代码

    python3 test.py
    
  • 成功

在这里插入图片描述
可以关注完整的ROS小车搭建环境:
树莓派安装Ubuntu20 Server
树莓派ubuntu连接wifi及SSH登陆
树莓派ubuntu20配置静态IP
树莓派USB端口重映射与下位机串口通信
树莓派ubuntu20安装ROS
ROS分布式通信:树莓派与虚拟机

  • 7
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值