Не удается открыть последовательное соединение в Pyserial: "termios.error: (22, 'Недопустимый аргумент')" - PullRequest
4 голосов
/ 31 марта 2011

У меня проблема с выполнением следующего кода:

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, но это не исправило ошибку. Что не так?

Ответы [ 6 ]

0 голосов
/ 17 марта 2017

У меня была та же проблема, хотя я использовал 5-портовый USB-концентратор с 3 различными USB-портами, подключенными к нему, и оказалось, что концентратор не обеспечивает достаточную мощность.Как только я получил USB с внешним питанием (тот, который не просто отключал линию от порта моего компьютера), он работал просто отлично.

0 голосов
/ 12 октября 2013

У меня была эта проблема на OSX, и проблема закончилась тем, что скорость передачи не поддерживалась. Изменили скорость передачи данных на что-то более распространенное, и это сработало!

0 голосов
/ 13 апреля 2011

У меня такая же проблема.

Просто запустите miniterm.py из примеров pySerial (http://sourceforge.net/projects/pyserial/develop).

Он отлично работал из оболочки: 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')
0 голосов
/ 31 марта 2011

Переустановил Python и понизил до 2.6, который решил все.

0 голосов
/ 31 марта 2011

Попробуйте:

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()

и не забудьте об этом.порт, когда вы закончите с ним

0 голосов
/ 31 марта 2011

Порт еще там?Я имею в виду /dev/tty.FireFly-16CB-SPP.Сегодня у него может быть новое имя ...

...