Мотивация
Я хочу начать обучение использованию библиотеки Python Pyserial. Кажется, это действительно хорошая библиотека, которая работает для многих. Я хочу использовать его для будущего проекта, в котором мне нужно автоматизировать последовательную связь.
Окружающая среда
Я использую Ubuntu 15.04. Я использую Python 2.7.
Настройка виртуальных портов
В настоящее время у меня нет устройства, с которым я мог бы общаться через последовательный порт. Я использую приложение socat для создания двух виртуальных портов, которые соединены друг с другом с помощью скорость 9600 бод.
$ socat -d -d pty,raw,echo=0,b9600 pty,raw,echo=0,b9600
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/2
2016/01/16 12:57:51 socat[18255] N PTY is /dev/pts/4
2016/01/16 12:57:51 socat[18255] N starting data transfer loop with FDs [5,5] and [7,7]
$ echo "hello" > /dev/pts/2
$ cat /dev/pts/4
hello
Большой! Вроде порты работают!
Простой скрипт pyserial
Я устанавливаю pyserial с помощью pip
$ sudo pip install pyserial
Потом написал немного serialtest.py
#!/usr/bin/env python
import serial
ser = serial.Serial('/dev/pts/2', 9600)
Это все serialtest.py
Запуск сценария и обнаружение ошибки
$ python serialtest.py
Traceback (most recent call last):
File "serialtest.py", line 4, in <module>
ser = serial.Serial('/dev/pts/2')
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialutil.py", line 180, in __init__
self.open()
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialposix.py", line 311, in open
self._update_dtr_state()
File "/home/sbl/.local/lib/python2.7/site-packages/serial/serialposix.py", line 605, in _update_dtr_state
fcntl.ioctl(self.fd, TIOCMBIS, TIOCM_DTR_str)
IOError: [Errno 22] Invalid argument
Что с этим?
Неудачные попытки отладки
Этот парень сказал, что добился успеха при использовании python 2.6. Мне не удалось заставить Pyserial работать с 2.6.
У этого парня возникли проблемы с baudrate. Я дважды проверил свою скорость передачи с помощью команды $stty -F /dev/pts/2
и подтвердил, что на самом деле она была на скорости 9600 бод.
Этот парень также утверждает, что у него проблемы со скоростью передачи, и приписывает это своему ядру. Это было еще в 2012 году, поэтому я не думаю, что это актуально.
Мой вопрос
Как я могу заставить мой скрипт serialtest.py работать без ошибок?