2016-05-18 303 views
2

我仍然是新的python所以请忍受我,所以我想写一个脚本python2-pyserial,但我不断收到错误Attempting to use a port that is not open这里的脚本:Python串行 - 试图使用一个未打开的端口

#!/usr/bin/python 

import serial, time 
#initialization and open the port 
#possible timeout values: 
# 1. None: wait forever, block call 
# 2. 0: non-blocking mode, return immediately 
# 3. x, x is bigger than 0, float allowed, timeout block call 
ser = serial.Serial() 
ser.port = "/dev/ttyUSB2" 
ser.baudrate = 115200 
ser.bytesize = serial.EIGHTBITS #number of bits per bytes 
ser.parity = serial.PARITY_NONE #set parity check: no parity 
ser.stopbits = serial.STOPBITS_ONE #number of stop bits 
#ser.timeout = None   #block read 
ser.timeout = 1   #non-block read 
#ser.timeout = 2    #timeout block read 
ser.xonxoff = False  #disable software flow control 
ser.rtscts = False  #disable hardware (RTS/CTS) flow control 
ser.dsrdtr = False  #disable hardware (DSR/DTR) flow control 
ser.writeTimeout = 2  #timeout for write 
try: 
    ser.open() 
    print ("Port has been opened") 
except Exception, e: 
    print ("error open serial port: ") + str(e) 
    exit() 

if ser.isOpen(): 
    try: 
     ser.flushInput() #flush input buffer, discarding all its contents 
     ser.flushOutput() 
     ser.write("ATI") 
     print("write data: ATI") 
     time.sleep(1) #give the serial port sometime to receive the data 
     numOfLines = 0 
     while True: 
      response = ser.readline() 
      print("read data: " + response) 
      numOfLines = numOfLines + 1 
      if (numOfLines >= 5): 
       break 
       #pass 
      ser.close() 
    except Exception, e1: 
     print ("error communicating...: ") + str(e1) 
else: 
    print ("cannot open serial port ") 

我试过用sudo python2 ser运行脚本,但我仍然有同样的错误。我如何解决它 ?

+0

您是否尝试过使用下面的代码段? –

回答

1

你的代码的第一部分是错误的,你正在为服务做出错误的归因。请尝试以下方法:

ser = serial.Serial(
port = "/dev/ttyUSB2", 
baudrate = 115200, 
bytesize = serial.EIGHTBITS, 
parity = serial.PARITY_NONE, 
stopbits = serial.STOPBITS_ONE, 
timeout = 1, 
xonxoff = False, 
rtscts = False, 
dsrdtr = False, 
writeTimeout = 2 
) 

在我的环境,端口已经在这之后开放的,但如果它不是你可以尝试打开它:

ser.open() 
ser.isOpen() 

而且你必须确保这是不是您的PC上的虚拟端口如果是这样,你必须改变这一点:

ser.rtscts = False #disable hardware (RTS/CTS) flow control 
ser.dsrdtr = False #disable hardware (DSR/DTR) flow control 

对于这一点:

ser.rtscts = True 
ser.dsrdtr = True 

查看详情issue了解更多信息

相关问题