Ubuntu16.04下USB转串口实现
1 项目描述
项目需要在DJI Manifold2-C(amd x86)上实现对单片机Arduino的控制,要用到USB转串口进行通讯。
2 操作步骤
(1)检查设备是否支持USB转串口
ls /dev/tty*
如果没有出现类似/dev/ttyUSB0这类设备,则说明缺少驱动。
(2)安装驱动(以pl2303为例)
- step1- 首先把自带驱动拷贝出来:
sudo cp /lib/modules/4.13.0-36-generic/kernel/drivers/usb/serial/pl2303.ko /usr/src/linux-headers-4.13.0-36-generic/drivers/usb/serial
此代码在Manifold2-C上实测可用,别的计算机类似。内核如果不一样,此处路径也可能不同。
- step2- 进入/usr/src/linux-headers-4.13.0-36-generic/drivers/usb/serial,查看是否有pl2303.ko文件。
- step3- 运行命令,安装驱动。
sudo modprobe usbserial
sudo modprobe pl2303
此时重新插拔USB转串口设备,再使用ls /dev/tty*
命令,若可找到ttyUSB0,则安装成功。
(3)修改串口永久权限
- step1- 安装udev
sudo apt-get install udev
- step2- 查找设备参数
在终端执行:
lsusb
查看当前的设备,不清楚自己设备的可以通过插拔对比来获取。
这里,我们Arduino设备的显示如下:
Bus 001 Device 007: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial
adapter
找出对应的idVendor及idProduct(对于我们的设备,idVendor=1a86,idProduc=7523)。
- step3- 新建规则
新建一个名为arduino.rules的规则(可自行修改规则名)
sudo gedit /etc/udev/rules.d/arduino.rules
在弹出的文本里填入如下内容
SUBSYSTEMS=="usb",
ATTRS{idVendor}=="1a86",
ATTRS{idProduct}=="7523",
GROUP="users",
MODE="0777",
SYMLINK+="ttyArduino"
MODE数值代表权限,SYMLINK表示把你的/dev/usb0设备改名为/dev/arduino_ttyUSB
- step4- 加载规则
sudo udevadm control --reload
加载规则,之后重启电脑!! 设置完成,使用如下命令检查一下有没有设置成功。
ls -al /dev/arduino_ttyUSB
(4)运行程序
参考之前用Manifold2-G实现对Arduino 的控制,(传送門)将代码中的ser.setPort("/dev/ttyTHS2");
改为ser.setPort("/dev/arduino_ttyUSB");
即可实现同样功能。