使用Python进行串口通讯

#! python3
import serial #导入模块
import time
import sys
# 传入参数,当传入的参数只有命令时,默认测试超时为2秒
argvs = sys.argv[1:]
command = sys.argv[1] + "\r\n"
timeOut = 2
if len(argvs)>1:
  timeOut = int(sys.argv[2])

try:

  #端口,GNU / Linux上的/ dev / ttyUSB0 等 或 Windows上的 COM3 等
  portx="/dev/cu.usbserial-Fixture"
  #波特率,标准值之一:50,75,110,134,150,200,300,600,1200,1800,2400,4800,9600,19200,38400,57600,115200,230400
  bps=115200
  #超时设置,None:永远等待操作,0为立即返回请求结果,其他值为等待超时时间(单位为秒)
  timex=5
  # 打开串口,并得到串口对象
  ser=serial.Serial(portx,bps,timeout=timex)

  print("串口名称:",ser.port)#获取到当前打开的串口名
  print("串口波特率:",ser.baudrate)#获取波特率

  result=ser.write(command.encode("gbk"))#写数据

  #print(ser.read())#读一个字节
  # print(ser.read(10).decode("gbk"))#读十个字节
  #print(ser.readline().decode("gbk"))#读一行
  #print(ser.readlines())#读取多行,返回列表,必须匹配超时(timeout)使用
  #print(ser.in_waiting)#获取输入缓冲区的剩余字节数
  #print(ser.out_waiting)#获取输出缓冲区的字节数

  result = ""
  startTime = time.time()
  while True:
    endTime = time.time()
    if endTime - startTime > timeOut:   #超时时,测试结束
      break
    if ser.in_waiting:
      str=ser.read(ser.in_waiting).decode("gbk")
      if str.find(">>")>-1:   #检测到“>>”时,测试结束
        result = result + str
        break
      else:
        result=result+str
  print("读取串口数据:",result)
  print("读取时间:",startTime-endTime)
  print("------ end --------")
  ser.close()   #关闭串口

except Exception as e:
    print("---异常---:",e)

 终端中运行:1. cd到文件所在目录

                       2.python3 serialport.py 参数1 参数2

你可能感兴趣的:(Python,python,串口通讯,Serial,终端)