2015-06-23 51 views
2

我想写一个python程序,它可以通过如下通信使用PySerial模块的串行接口:
PySerial客户端无法写入数据

import serial 
if __name__ == '__main__': 
    port = "/dev/tnt0" 
    ser = serial.Serial(port, 38400) 
    print ser.name 
    print ser.isOpen() 
    x = ser.write('hello') 
    ser.close() 
    print "Done!" 

但如果我执行上面我得到以下错误:

/dev/tnt0 
True 
Traceback (most recent call last): 
File "/home/root/nested/test.py", line 15, in <module> 
x = ser.write('hello') 
File "/usr/local/lib/python2.7/dist-packages/serial/serialposix.py", line 518, in write 
raise SerialException('write failed: %s' % (v,)) 
serial.serialutil.SerialException: write failed: [Errno 22] Invalid argument 

我提到的pyserial文件,并根据这应该没有问题工作。请让我知道我在这做错了什么。
TIA!

+1

如果你在你的终端执行发生这种情况:'回声 “测试”>的/ dev/tnt0'? –

+0

它给了我同样的错误! 'bash:echo:写入错误:无效参数'我正在使用'tty0tty'串口来模拟一个串口,因为我的机器没有串口...... – Nachiketh

+0

显然,'/ dev/tnt0'不是一个串口设备。仅供参考,串行设备*通常*具有名称'/ dev/ttyX'或'/ dev/ttySX',但不是必需的。 –

回答

0

很显然,/dev/tnt0不是一个串口设备,或者有什么问题。否则,你的代码看起来有效。

2

出于某种原因,为了使用该模块tty0tty,你需要打开两个/dev/tnt0/dev/tnt1,或任何其他对(例如/dev/tnt2/dev/tnt3)的。下面

代码工作:

import time 
import serial 

def main(): 
    vserial0 = serial.Serial(port='/dev/tnt0', baudrate=9600, bytesize=8, parity=serial.PARITY_EVEN, stopbits=1) 
    vserial1 = serial.Serial(port='/dev/tnt1', baudrate=9600, bytesize=8, parity=serial.PARITY_EVEN, stopbits=1) 

    n_bytes = 0 

    while n_bytes == 0: 
      vserial0.write('test') 
      n_bytes = vserial1.inWaiting() 
      time.sleep(0.05) 

    print vserial1.read(n_bytes) 

if __name__ == '__main__': 
    main()