我要開始leraning如何使用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一起工作。
This guy有問題是波特率。我使用命令$stty -F /dev/pts/2
再次檢查我的波特率,並確認它實際上是9600的波特率。
This guy也聲稱有波特率問題並將其歸因於其內核。那是在2012年,所以我不認爲它是相關的了。
我的問題
我怎樣才能讓我的serialtest.py腳本運行沒有錯誤?
見https://github.com/pyserial/pyserial/issues/59。 –
@AustinPhillips你是一個很酷的傢伙。我不太瞭解串行通信和RS-232,並且已經準備好了,因此你在Pyserial wiki上提出的問題在我看來並不清晰。但是,我盲目地顛倒了serialposix.py的第310行和第312行的邏輯,並再次嘗試了我的腳本。有效!我現在可以使用Pyserial讀取和寫入我的虛擬端口。儘管看起來你對解決方案並不是100%自信,但我願意與它一起運行。謝謝你的時間! –