使用python pyserial模块串口通信方式
作者:究理观心
这篇文章主要介绍了使用python pyserial模块串口通信方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
python pyserial模块串口通信
最近调试通信模块时,需要用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()
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。