我要开始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%自信,但我愿意与它一起运行。谢谢你的时间! –