欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > linux >内容正文

linux

Linux下的Ubuntu16.04系统配置并使用USB转串口(串口转USB),最终使用python的serial和pyserial包实现串口的打开并读取数据

发布时间:2025/3/19 linux 103 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Linux下的Ubuntu16.04系统配置并使用USB转串口(串口转USB),最终使用python的serial和pyserial包实现串口的打开并读取数据 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

1. USB转串口的配置

1.1 首先使用 lsmod | grep usbserial 指令查看系统是否包含USB转串口驱动,如果没有信息输出不代表没有驱动,我这边就是没有信息输出,且看后面分析;

如果有的话,如下图所示。

1.2 此时再输入 dmesg | tail 指令查看系统最近时刻的消息,没什么用处,只是为了和后面对比

1.3 此时再输入 lsusb 指令查看USB相关的接口,也是为了和后面进行对比。

1.4 现在,我们将USB转串口的USB端插入电脑,使用 lsusb 指令可以看到多了一行,记住该ID,后面有用,如下图

1.5 接着,我们还是使用 dmesg | tail 查看系统最近时刻的信息,发现新的USB设备,如下图

1.6 同时,我们可以使用 ls /dev/ttyUSB* 指令查看系统当前是否有USB转串口设备,我现在没有,如下图

1.7 最后,我们使用 sudo modprobe usbserial vendor=0x067b product=0x23c3 指令载入该USB转串口设备,载入后再使用 ls /dev/ttyUSB* 和 lsmod | grep usbserial 和 dmesg | tail 三个指令可发现我们有了usbserial驱动,并且USB转串口名是 /dev/ttyUSB0,而且usb串口的转换器也有了。

1.8 如果经过上面的步骤,没有识别到串口转USB设备,那可能得自己手动安装串口转USB的驱动了,一般来说Ubuntu系统都是集成好的。

 

2. 串口的使用并读取数据

2.1 串口没有操作权限,提示:could not open port, Permission denied,如下图。

这个是因为串口设备的属于dialout用户组,所以要操作tty相关设备,需要成为dialout用户。首先使用 groups 你自己电脑的用户名 指令查看用户是不是位于dialout组别,如下;如果不是,那么执行 sudo gpasswd --add 你电脑的用户名 dialout 指令,将用户添加至dialout组中,如下图;执行结束后,需要注销重新登录

 

3.  使用python的serial和pyserial包读取串口数据

3.1 在成功打开串口,读取串口数据之前,还遇到了一个问题,报错:fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str) IOError: [Errno 22] Invalid argument;如下图。

3.2 原本打开串口的参数是串口号,波特率以及超时时间,现在加上rtscts和dsrdtr两个参数即可,如下图。

# 原先串口类的参数 ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=3)# 修改后的串口类参数 ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=3, rtscts=True, dsrdtr=True)

3.3 现在可以运行自己的python程序,打开串口,读取串口数据了。

# 需要导入serial和pyserial包,一般自带,没有的话,可以使用pip安装 import serial import serial.tools.list_ports# 列出可用的串口 port_list = list(serial.tools.list_ports.comports()) if len(port_list) == 0 :print('no port can use !') else:port = port_list[0][0]bps = 115200 timeout = 3ser = serial.Serial(port, bps, timeout=timeout) # 打开串口bytes_data = ser.readline() # readline函数读到换行符才结束,不然一直等待print(bytes_data)============================= 备用 =============================== 备用1. 检测所使用的字符集 import chardet print(chardet.detect(bytes_data))备用2. 对字符串进行编码,python2默认是ascii,python3默认是utf-8 str(bytes_data, encoding='ascii')

 

总结

以上是生活随笔为你收集整理的Linux下的Ubuntu16.04系统配置并使用USB转串口(串口转USB),最终使用python的serial和pyserial包实现串口的打开并读取数据的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。