Python serial – 尝试使用未打开的端口

我仍然是 python中的新手,所以请耐心等待,所以我正在尝试用python2-pyserial写一个脚本但是我一直在收到错误尝试使用一个未打开的端口这是脚本:

#!/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运行脚本,但我仍然有同样的错误.我如何解决它 ?

解决方法

你的代码的第一部分是错误的,你正在为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了解更多信息

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...