我在python中仍然是新手,所以请耐心等待我,所以我尝试用python2-pyserial
编写脚本,但我一直收到错误Attempting to use a port that is not open
这里有#s脚本:
#!/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做错了归因。请尝试以下方式:
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()
你必须确定这不是你电脑上的虚拟端口,如果是,你必须改变这个:
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了解详情