我正在尝试使用PySerial来接受来自RFID读取器的输入。根据答案here:,我尝试使用WinObj,发现了一些奇怪的东西:在GLOBAL???文件夹中没有指向“更特定于驱动程序”的COM3端口。但是,当我运行命令python -m serial.tools.list_ports时,它确实抛出了COM3。当我尝试一个简单的程序时,比如:
import serial
ser = serial.Serial()
ser.port = 2
print(ser)
ser.open()我得到以下输出:
Serial<id=0x45e8198, open=False>(port='COM3', baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False)
serial.serialutil.SerialException: could not open port 'COM3': FileNotFoundError(2, 'The system cannot find the file specified.', None, 2)所以,我知道PySerial在正确的地方寻找我的阅读器,并且根据两个不同的来源(设备管理器和命令行),设备正在注册。然而,我仍然得到这个错误。怎么一回事?我在Windows 8.1上使用Python 3.3。
编辑:这个错误实际上是我从python的命令行得到的。我从编写和运行类似上面的程序中得到的结果是:
AttributeError: 'function' object has no attribute 'Serial.'我也会感谢你对此的想法。
发布于 2017-09-26 00:38:45
我首先要检查的是你连接的com端口是什么,以及当前正在使用的是什么:
import serial.tools.list_ports
import sys
list = serial.tools.list_ports.comports()
connected = []
for element in list:
connected.append(element.device)
print("Connected COM ports: " + str(connected))
# compliments of https://stackoverflow.com/questions/12090503/listing-available-com-ports-with-python#14224477
""" Lists serial port names
:raises EnvironmentError:
On unsupported or unknown platforms
:returns:
A list of the serial ports available on the system
"""
if sys.platform.startswith('win'):
# !attention assumes pyserial 3.x
ports = ['COM%s' % (i + 1) for i in range(256)]
elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
# this excludes your current terminal "/dev/tty"
ports = glob.glob('/dev/tty[A-Za-z]*')
elif sys.platform.startswith('darwin'):
ports = glob.glob('/dev/tty.*')
else:
raise EnvironmentError('Unsupported platform')
result = []
for port in ports:
try:
s = serial.Serial(port)
s.close()
result.append(port)
except (OSError, serial.SerialException):
pass
print("Availible COM Ports: " + str(result))然后,确保使用所需的参数调用串行端口构造函数:
ser = serial.Serial(
port="com2", # assumes pyserial 3.x, for 2.x use integer values
baudrate=19200,
bytesize=8,
parity="E", # options are: {N,E,O,S,M}
stopbits=1,
timeout=0.05)当您在不带任何参数的情况下调用"serial.Serial()“,然后添加端口ID时,我不能完全确定它将做什么,我总是显式地引用我想要在那里使用的端口。
发布于 2019-06-05 06:35:08
您的问题在于串行对象正在查找字符串"COMXX“,否则它将无法工作。我不知道它是否需要大写。
确保您像这样配置它。
serial.Serial(port = "COM2")https://stackoverflow.com/questions/27004683
复制相似问题