环境
- python版本:3.7
- win10
- pip 18.1
- pyserial 3.4
买了一个小玩具,测空气质量的,数据通过串口传输,所以就想用python写一个读数据的小程序。
前期准备
安装pyserial
serial
就是串口
的意思,用来操作串口名字起的还是很不错的(看谁先下手)
打开cmd
(开始里搜索就能找到),安装pyserial
pip install pyserial
有兴趣的可以去看看pyserial文档
确认安装成功,使用
pip list
如图所示,有pyserial就成功啦,如果速度很慢可以去网上搜搜如何换国内镜像,换完之后重启cmd重新安装即可体验飞速。
查看COM口工具
python -m serial.tools.list_ports -v
,可以列出所有串口名称及属性。
常用的方法函数
导入串口模块import serial;
打开串口ser = serial.Serial(端口名称,…其他参数),ser.open()方法可以在close之后再次打开相应端口;
关闭串口ser.close();
通过串口写入ser.write(b’’),参数需要使用字节bytes类型,如果是str类型,则可以使用encode(‘utf-8’)的方式进行转换;
读取模块信息的方法如下,x = ser.read()读取一个字节,x=read(n)读取n个字节,readline()可以用来读取一行。
port端口名字,windows下为’COM1’等;
baudrate (int)波特率,可以设置的范围9600到115200;
bytesize为每个字节的比特数,设置值为FIVEBITS, SIXBITS,SEVENBITS, EIGHTBITS 5-8比特;parity设置校验位PARITY_NONE, PARITY_EVEN,PARITY_ODD PARITY_MARK, PARITY_SPACE,用来设置校验位;
stopbits停止位,用来指示字节完成,可以选择的设置STOPBITS_ONE,
STOPBITS_ONE_POINT_FIVE, STOPBITS_TWO;
write_timeout(float) 写入超时设置;
timeout (float)读出超时设置;
xonxoff (bool)软件流控开关;
rtscts (bool)硬件RTS/CTS流控开关;
dsrdtr (bool)硬件DSR/DTR流控开关。
关于UART流控两线方式没有硬件流控,四线方式采用DSR、DTR进行流控,而RS232标准中可以有DSR、DTR的流控方式。
RTS-request to send;
CTS- clear to send;
DSR-data set ready;
DTR-Data Terminal Ready。
关键代码
自动连接串口
plist = list(serial.tools.list_ports.comports())
if len(plist) > 0:
comlist_0 =list(plist[0])
ser = serial.Serial(comlist_0[0], 9600, timeout=60)
读取数据
ser.read(16) # 读取16字节数据
关闭串口
ser.close()