Spe*_*rto 9 python serial-port virtual-serial-port pyserial socat
动机
我想开始学习如何使用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
Run Code Online (Sandbox Code Playgroud)
大!好像港口有效!
一个简单的pyserial脚本
我使用pip安装pyserial
$ sudo pip install pyserial
Run Code Online (Sandbox Code Playgroud)
然后我写了一个小的serialtest.py
#!/usr/bin/env python
import serial
ser = serial.Serial('/dev/pts/2', 9600)
Run Code Online (Sandbox Code Playgroud)
这是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
Run Code Online (Sandbox Code Playgroud)
那是怎么回事?
调试尝试失败
这家伙说他在使用python 2.6时取得了成功.我无法让Pyserial与2.6一起工作.
这家伙遇到麻烦是波特兰.我用命令仔细检查我的波特率,$stty -F /dev/pts/2并确认它实际上是波特率为9600.
这家伙还声称有波特率问题并将其归因于他的内核.那是在2012年,所以我认为它不再相关了.
我的问题
如何让我的serialtest.py脚本无故障运行?
Seb*_*ian 16
为了完成此问答,这是一个解决方案(如Austin Philips链接中所示):
#!/usr/bin/env python
import serial
ser = serial.Serial('/dev/pts/2', 9600, rtscts=True,dsrdtr=True)
Run Code Online (Sandbox Code Playgroud)
有关更多说明,请参阅此PySerial Github问题.
| 归档时间: |
|
| 查看次数: |
6267 次 |
| 最近记录: |