由于usb串口号容易变,给程序的运行带来了些许不便,所以特此学习了一下固定设备usb串口号,主要有两种方法,各有利弊.
方法一
通过usb转串口的芯片ID不同,设串口名。
1.查看串口设备
lsusb
(拔掉usb后,发现少了一行:Bus 001 Device 018: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port)
其中的“ID 067b:2303”就是我们需要用的(不同芯片会不一样,我这条是绿联的,最常见的是“ID 1a86:7523”)
2.建.rules文件
进入文件夹:计算机->etc->udev->rules.d
里面新建一个.rules文件(自己随意命名)
sudo gedit myusb.rules //需要权限
在里面输入:
KERNEL=="ttyUSB*", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", MODE:="0777", SYMLINK+="imu"
其中的“067b”,"2303"为usb线的ID
"imu"为usb串口名(用的时候表示为“/dev/imu”)
3.保存使用
拔掉usb,终端输入:
sudo service udev reload
sudo service udev restart
插上usb,终端输入:
ls /dev/imu //imu为自己设的usb串口名
出现上图,则成功了。。。
4.不足
[优点,插不同usb口都有同样的端口号]
换一条带有同芯片的usb转接线也会出现相同点串口名,如我买的一款usb口温度传感器就和我用来连接无线数传的usb转接 线有同样的ID “1a86:7523” ,这时两条usb同时接时就无法准确获取相应口的信息。。。
方法二
针对方法一的不足,方法二是根据工控机每个usb口的固定接口名来的
1.查看串口
python -m serial.tools.list_ports
2.查看usb接口名
udevadm info /dev/ttyUSB0
第一行的“1-1:1.0”就是工控机usb口的固定接口名
同理,查看USB1
udevadm info /dev/ttyUSB1
该usb口的固定接口名为“1-4:1.0”
2.建.rules文件
进入文件夹:计算机->etc->udev->rules.d
里面新建一个.rules文件(自己随意命名)
sudo gedit serial.rules //需要权限
在里面输入:
ACTION=="add",KERNELS=="1-4:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="t_serial"
ACTION=="add",KERNELS=="1-1:1.0",SUBSYSTEMS=="usb",MODE:="0777",SYMLINK+="serial"
其中的"1-4:1.0"和"1-1:1.0"为usb口的固定接口名,"t_serial"与"serial"为对应usb串口名(用的时候表示为“/dev/t_serial”和“/dev/serial”)
3.保存使用
拔掉usb,终端输入:
sudo service udev reload
sudo service udev restart
插上usb,终端输入:
ls /dev/t_serial //t_serial和serial为自己设的usb串口名
ls /dev/serial
出现上图,则成功了。。。
4.不足
[优点,不会因为usb转接线芯片ID相同(如“1a86:7523”)造成usb口同名]
设置完成后,只要插在该端口的usb转接口都会出现该口设的串口名。。。
编程时用法
以前用的是“/dev/ttyUSB0”,现在直接用"/dev/serial"就行了。。。
当然你直接终端输入
python -m serial.tools.list_ports
出现的依然是/dev/ttyUSB0,/dev/ttyUSB1,/dev/ttyUSB2这些
只有当你输入下列指令才能看见对应的串口名
ls /dev/serial
ls /dev/t_serial
ls /dev/imu
[注意:文件夹或usb串口名尽量不要用serial等名字,容易重名,小编重启设备后发现出了问题,然后把serial.rules 改为了“myserial.rules ”,把串口名serial改为了“m_serial”,然后就没有出现过问题了!]
参考:https://www.pianshen.com/article/4444301337/