使用python pyserial模块串口通信

时间:2021-01-23 22:26:55
最近调试通信模块时,需要用UART串口输入AT命令控制模块,手动输入不便于自动化,所以就学习了下使用python进行串口控制。
serial模块安装
pip install pyserial
常用的方法函数
导入串口模块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()可以用来读取一行。
查看COM口工具
python -m serial.tools.list_ports -v,可以列出所有串口名称及属性。
Serial参数说明
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。
一个简单示例
#!usr/bin/python3.6
import serial
import sys
import os
import time
import re

global MAX_LOOP_NUM
global newCmd
MAX_LOOP_NUM = 10

def waitForCmdOKRsp():
maxloopNum = 0
while True:
line = ser.readline()
maxloopNum = maxloopNum + 1

try:
print("Rsponse : %s"%line.decode('utf-8'))
except:
pass

if ( re.search(b'OK',line)):
break
elif(maxloopNum > MAX_LOOP_NUM):
sys.exit(0)

def sendAT_Cmd(serInstance,atCmdStr,waitforOk):
print("Command: %s"%atCmdStr)
serInstance.write(atCmdStr.encode('utf-8'))
#or define b'string',bytes should be used not str
if(waitforOk == 1):
waitForCmdOKRsp()
else:
waitForCmdRsp()

ser = serial.Serial("COM5",9600,timeout=30)
sendAT_Cmd(ser,'AT+CFUN=1\r',1)
ser.close()