Motywacyjnegopyserial nie gra dobrze z portem wirtualnym
Chcę zacząć leraning jak korzystać z biblioteki Pythona Pyserial. Wygląda to na naprawdę fajną bibliotekę, która działa dla wielu ludzi. Chcę go użyć do nadchodzącego projektu, w którym muszę zautomatyzować komunikację szeregową.
Środowisko
Używam Ubuntu 15.04. Używam Pythona 2.7.
Konfigurowanie portów wirtualnych
nie mam obecnie urządzenia, które mogę się porozumiewać przez port szeregowy. Używam aplikacji socat utworzyć dwa wirtualne porty, które są połączone ze sobą za pomocą szybkość transmisji od 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
Wielkiej! Wygląda na to, że porty działają!
Prosty skrypt pyserial
zainstalować pyserial użyciu pip
$ sudo pip install pyserial
Wtedy pisałem trochę serialtest.py
#!/usr/bin/env python
import serial
ser = serial.Serial('/dev/pts/2', 9600)
czyli całość serialtest.py
Uruchamianie skryptu i napotyka błąd
$ 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
Co z tego?
Nieudane próby debugowania
This guy powiedział, że sukces podczas korzystania z Pythona 2.6. Nie mogłem zmusić Pyserial do pracy z 2.6.
This guy miał kłopoty z jest szybkość transmisji. I dokładnie sprawdzić moje baudrate z poleceniem $stty -F /dev/pts/2
i potwierdził, że to było w rzeczywistości, na szybkość transmisji od 9600.
This guy również twierdzi, że ma problemy z szybkość transmisji i przypisuje go do jądra. To było w 2012 roku, więc nie sądzę, by było to już istotne.
Moje pytanie
Jak mogę dostać mój skrypt serialtest.py uruchomić bez błędu?
Zobacz https://github.com/pyserial/pyserial/issues/59. –
@AustinPhillips jesteś jednym fajnym gościem. Nie wiem zbyt wiele na temat komunikacji szeregowej i RS-232 oraz readytosend/cleartosend, więc kwestia, którą poruszyliście na stronie Pyserial, nie była dla mnie jasna. Jednak na ślepo odwróciłem logikę na liniach 310 i 312 pliku serialposix.py i ponownie wypróbowałem mój skrypt. Zadziałało! Mogę teraz czytać i zapisywać do moich wirtualnych portów za pomocą Pyserial. Nawet jeśli wygląda na to, że nie jesteś w 100% pewny swojej poprawki, jestem gotów z tym skończyć. Dziękuję za Twój czas! –