2015-06-23 88 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()