无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')”
Posted
技术标签:
【中文标题】无法在 Pyserial 中打开串行连接:“termios.error: (22, \'Invalid argument\')”【英文标题】:Can't open serial connection in Pyserial: "termios.error: (22, 'Invalid argument') "无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')” 【发布时间】:2011-03-31 06:51:21 【问题描述】:我在执行以下代码时遇到问题:
import serial
ser = serial.Serial(
port='/dev/tty.FireFly-16CB-SPP',
baudrate=115200,
#parity=serial.PARITY_ODD,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS
)
ser.open()
ser.isOpen()
这昨天有效,我不知道我改变了什么。现在我收到以下错误消息:
Traceback (most recent call last):
File "main.py", line 32, in <module>
bytesize=serial.EIGHTBITS
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialutil.py", line 260, in __init__
self.open()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 280, in open
self._reconfigurePort()
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/serial/serialposix.py", line 409, in _reconfigurePort
termios.tcsetattr(self.fd, TERMIOS.TCSANOW, [iflag, oflag, cflag, lflag, ispeed, ospeed, cc])
termios.error: (22, 'Invalid argument')
我完全是 Python 初学者,无法破译上面的错误信息。我尝试重新安装 Pyserial,但这并没有解决错误。怎么了?
【问题讨论】:
【参考方案1】:端口还在吗?我是/dev/tty.FireFly-16CB-SPP
。今天它可能有一个新名字......
【讨论】:
是的,通过查看 /dev/ 我看到端口仍然存在。 这可能也值得尝试旧的“关闭并再次打开” - 即拔下 USB 并重新插入。这在我的情况下解决了。【参考方案2】:试试这个:
ser = serial.Serial('/dev/tty.FireFly-16CB-SPP',115200)
print "port is open" if ser.isOpen() else "port is closed"
除非您手动更改端口的配置,否则您不必调用 open() 例如:
ser = serial.Serial()
ser.baudrate = 19200
ser.port = 0
ser.open()
完成后不要忘记清理端口
【讨论】:
【参考方案3】:重新安装 Python 并降级到 2.6 解决了所有问题。
【讨论】:
【参考方案4】:我也有同样的问题。
只需从 pySerial 示例 (http://sourceforge.net/projects/pyserial/develop) 运行 miniterm.py。
从 shell 运行良好:python miniterm -p ttyUSB0 -D 但是当试图将它加载到 Eclipse 中时。并从那里运行调试。 它给了我:
pydev debugger: starting
Traceback (most recent call last):
File "/eclipse/plugins/org.python.pydev.debug_2.0.0.2011040403/pysrc/pydevd.py", line 1134, in <module>
debugger.run(setup['file'], None, None)
File "/eclipse/plugins/org.python.pydev.debug_2.0.0.2011040403/pysrc/pydevd.py", line 918, in run
pydev_imports.execfile(file, globals, locals) #execute the script
File "/root/workspace/pyserial/src/examples/miniterm.py", line 120, in <module>
console.setup()
File "/root/workspace/pyserial/src/examples/miniterm.py", line 101, in setup
self.old = termios.tcgetattr(self.fd)
termios.error: (22, 'Invalid argument')
【讨论】:
【参考方案5】:我在 OSX 上遇到了这个问题,问题最终是不支持波特率。将波特率更改为更常见的值,它起作用了!
【讨论】:
【参考方案6】:我遇到了同样的问题,虽然我使用的是一个 5 端口 USB 集线器,其中 3 个不同的 USB 都插入其中,结果发现集线器没有提供足够的电力。一旦我得到了一个外部供电的 USB(不仅仅是从我的计算机端口拔下线的那个),它就可以正常工作了。
【讨论】:
以上是关于无法在 Pyserial 中打开串行连接:“termios.error: (22, 'Invalid argument')”的主要内容,如果未能解决你的问题,请参考以下文章
重新打开后,arduino 和 pyserial 之间的串行连接变慢
无法使用 python 和 pyserial 打开 /dev/ttyusb0
尝试在 WinXP 上使用 pyserial 打开串行端口 - >“拒绝访问”