ubuntu16.04下Python串⼝通信配置与代码实现(PL2303串⼝)
⽂章⽬录
最近项⽬需要利⽤OBD模块读取车机数据,作为⼀个⼀直看到硬件就绕开的算法党,也不得不开启了ubuntu下配置、读取、分析PL2303串⼝通信之路,开始了之后,发现果然有好多坑,感谢遇到问题时⽹上各博主之前写的帖⼦,都帮了⼤忙。这⾥我也记录分享下。
安装配置PL2303的串⼝驱动
在Ubuntu下利⽤minicom进⾏嵌⼊式开发时可能会⽤到USB转串⼝,这时就会⽤到USB转串⼝驱动,以前的Ubuntu是直接将此驱动编译进内核,但不知道从哪个版本开始Ubuntu将其从内核去掉了,所以要⽤到Ubuntu的minicom时只能由我们⾃⼰安装USB转串⼝驱动,⽅法如下:
(1)⾸先将PL2303驱动从/lib/modules/4.15.0-45-generic/kernel/drivers/usb/serial/下的pl2303.ko⽂件拷贝
到/usr/src/Linux-headers-4.15.0-45-generic/drivers/usb/serial下:
sudo cp /lib/modules/4.2.0-27-generic/kernel/drivers/usb/serial/pl2303.ko /usr/src/linux-headers-4.2.0-27-generic/drivers/usb/serial
这⾥需要加上sudo, 要不然会报错Permission denied.
注意,内核如果不⼀样,此处路径也可能不同,要去你的本机电脑上到安装的内核。
cd /usr/src/linux-headers-4.2.0-27-generic/drivers/usb/serial
(2)然后使⽤命令
sudo modprobe usbserial
(3)再使⽤命令
sudo modprobe pl2303
这时将USB转串⼝插⼊电脑USB,使⽤命令dmesg | tail可看到usb pl2303等信息。说明驱动安装成功。
给项⽬⽂件夹赋予权限
cu xiao
// 输⼊密码
sudo chown xiao /dev/ttyUSB0
安装minicon
sudo apt-get install minicom
安装过程中,若是报错:
dpkg 被中断,您必须⼿⼯运⾏ sudo dpkg –configure -a解决此问题
可以使⽤命令 sudo dpkg –configure -a,运⾏过后再执⾏ sudo apt-get install minicom⼀般就可以成功安装了。
python怎么读取串口数据若还是解决不了,可尝试以下解决⽅案
运⾏下⾯的命令即可解决
sudo rm /var/lib/dpkg/updates/*
sudo apt-get update
sudo apt-get upgrade
在Ubuntu系统⾥minicom的开启、USB串⼝的调整及minicom的退出
在Ubuntu系统⾥,通过 Ctrl+Alt+t 打开终端,输⼊ sudo minicom 打开串⼝显⽰ 如果设备仍显⽰USB未连接,问题可能是USB接⼝设置错误。⼀般USB有:USB0,USB1,USB2,USB3.可以通过输⼊ sudo minicom -s 修改USB串⼝如下图所⽰:输⼊ A 便可修改USB串⼝,如果不知道⾃⼰的串⼝是USB⼏,本⼈只能说⼀个⼀个试(欢迎⼤神提供更好的办法)最后⼀定要选择 Save setup as df
然后 选择 exit 退出。此时 你便可以在终端查看⾃⼰的串⼝变化了。
注意红框中最初为/dev/tty8,需要插⼊USB串⼝之后,跟你你的串⼝进⾏修改,修改为
/dev/ttyUSB*
退出串⼝的快捷键是Ctrl+A 然后再按 X。
sudo apt-get install lrzsz
ubuntu 中查看串⼝信息
提⽰Permission denied,就是需要转换为超级⽤户打开
sudo su
1.使⽤ls -l ttyS*命令显⽰如下
crw-rw----. 1 root dialout 4, 64 5⽉ 17 02:24 /dev/ttyS0
crw-rw----. 1 root dialout 4, 65 5⽉ 17 02:24 /dev/ttyS1
crw-rw----. 1 root dialout 4, 66 5⽉ 17 02:24 /dev/ttyS2
crw-rw----. 1 root dialout 4, 67 5⽉ 17 02:24 /dev/ttyS3
但你不知到哪个是真实的串⼝,虽然⼀般都是ttyS0,但也不敢妄然确定。
2.使⽤cat /proc/tty/driver/serial
serinfo:1.0 driver revision:
0: uart:16550A port:000003F8 irq:4 tx:0 rx:0
1: uart:unknown port:000002F8 irq:3
2: uart:unknown port:000003E8 irq:4
3: uart:unknown port:000002E8 irq:3
我们发现串⼝0的uart值时16550A,tx值为0,rx值也为0,因此我们断定本机只有⼀个串⼝,是串⼝0,即ttyS0
3.也可以⽤dmesg | grep ttyS*,但这个不是很好⽤,当然你可以⾃⼰使⽤正则法则取到。
注意:还应查看是否有USB转串⼝,这个就很简单了:ls ttyUSB*,全部搞定。
显⽰串⼝接受的数据命令
1.1 在终端输⼊ lsusb 显⽰所有连接的usb设备
1.2 在终端输⼊ ls /dev/ttyA* 显⽰所有连接的虚拟USB设备端⼝号
1.3 在终端输⼊ ls /dev/ttyU* 显⽰所有连接的USB设备端⼝号
1.4 显⽰串⼝信息的操作如下:
根据1.2 和 1.3 操作,查看⾃⼰的设备是 USB(端⼝号ttyUSB*)还是虚拟USB(端⼝号ttyACM*),假设是虚拟USB,则进⾏如下操作⼀个终端下输⼊如下命令:
echo -e “at \r” >/dev/ttyA* //{echo -e可以发送回车等特殊字符;
这个是发送字符"at "到/dev/ttyS0即串⼝0;
新开⼀个终端下输⼊如下命令:
cat /dev/ttyA*
ubuntu16.04上Python串⼝编程
通过 ubuntu桌⾯串⼝软件 CuteCom与 程序端的实现串⼝通信。
硬件连接采⽤2条 USB转485的线,对连。 两条USB转485线: T/R+ ---------T/R+ , T/R- ---------T/R-
查询从系统启动到现在串⼝插拔的信息,显⽰串⼝Ubuntu连接的端⼝号:
在终端输⼊:
dmesg | grep ttyS*
ubuntu软件CuteCom桌⾯端:
sudo cutecom
在Ubuntu下装了CuteCom,但当打开 /dev/ttyUSB0 时,总提⽰错误,打开失败时:⽤ Minicom 可以正常读取 ttyUSB0。
sudo chmod 666 /dev/ttyUSB0
这样修改后, CuteCom 就可以正常打开 USB 串⼝了。
python程序端代码-例程1:
#usr/bin/python3
# -*- coding: utf-8 -*-
import serial
from time import sleep
ser = serial.Serial('/dev/ttyUSB0', 57600, timeout=0.5)
def recv(serial):
global data
while True:
data = ad(30)
#data = serial .readline()
if data == '':
continue
else:
break
sleep(0.02)
return data
while True:
data = recv(ser)
ser.write(data)
例程2:
#usr/bin/python3
# -*- coding: utf-8 -*-
import serial
//打开串⼝0, 9600,8N1,连接超时0.5秒
ser=serial.Serial("/dev/ttyUSB0",57600,timeout=0.5) #使⽤USB连接串⾏⼝
ser=serial.Serial("/dev/ttyAMA0",57600,timeout=0.5) #使⽤树莓派的GPIO⼝连接串⾏⼝ser=serial.Serial(1,9600,timeout=0.5)#winsows系统使⽤com1⼝连接串⾏⼝
ser=serial.Serial("com1",9600,timeout=0.5)#winsows系统使⽤com1⼝连接串⾏⼝
ser=serial.Serial("/dev/ttyS1",9600,timeout=0.5)#Linux系统使⽤com1⼝连接串⾏⼝
print ser.name#打印设备名称
print ser.port#打印设备名
ser.open() #打开端⼝
s = ad(10)#从端⼝读10个字节
ser.write("hello")#向端⼝些数据
ser.close()#关闭端⼝
data = ad(20) #是读20个字符
data = adline() #是读⼀⾏,以/n结束,要是没有/n就⼀直读,阻塞。
data = adlines()和adlines()#都需要设置超时时间
ser.baudrate = 9600 #设置波特率
ser.isOpen() #看看这个串⼝是否已经被打开
serial 获取串⾏⼝的状态

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。