2017-02-10 17 views
0

シリアルポートからデータを読む: 以下のコードのreadline()は、ヌルベクトルを返します。シリアルポートからの読み込みデータは、AABB00EFのような16進数です。あなたが持っている場合(無\rまたは\nが、それは永遠に待つことになるが存在しない場合Pythonシリアルポートをヌル文字列に戻す

#!/usr/bin/python 

import serial, time 

ser = serial.Serial() 
ser.port = "/dev/ttyUSB0" 
ser.baudrate = 115200 
#ser.bytesize = serial.EIGHTBITS 
#ser.parity = serial.PARITY_NONE 
#ser.stopbits = serial.STOPBITS_ONE 
#ser.timeout = None   
ser.timeout = 1    
#ser.xonxoff = False  
#ser.rtscts = False  
#ser.dsrdtr = False  
#ser.writeTimeout = 2  
try: 
    ser.open() 
except Exception, e: 
    print "error open serial port: " + str(e) 
    exit() 

if ser.isOpen(): 

    try: 
     #ser.flushInput() 
     #ser.flushOutput() 
     #time.sleep(0.5) 
     # numOfLines = 0 

     # f=open('signature.txt','w+') 

     while True: 
      response = ser.readline() 
      print len(response) 
      #f=ser.write(response) 
      print response 
     # numOfLines = numOfLines + 1 


     f.close() 
     ser.close() 
    except Exception, e1: 
     print "error communicating...: " + str(e1) 

else: 
    print "cannot open serial port " 

答えて

0

のreadlineは、行の終わりに達するまで読みしようとします。作業が、何もパイソンここ を経由して動作しますされていないことは、コードですタイムアウトになる可能性があります...)代わりにこのようなものを試してください

ser.setTimeout(1) 
result = ser.read(1000) # read 1000 characters or until our timeout occures, whichever comes first 
print repr(result) 

ちょうどあなたがreaduntilメソッドを作成することができ、このコード

ser = serial.Serial("/dev/ttyUSB0",115200,timeout=1) 
print "OK OPENED SERIAL:",ser 
time.sleep(1)# if this is arduino ... wait longer time.sleep(5) 
ser.write("\r") # send newline 
time.sleep(0.1) 
print "READ:",repr(ser.read(8)) 

を使用

def read_until(ser,terminator="\n"): 
    resp = "" 
    while not resp.endswith(terminator): 
     tmp = ser.read(1) 
     if not tmp: return resp # timeout occured 
     resp += tmp 
    return resp 

そしてちょうど

read_until(ser,"\r") 
+0

それでもなっゼロ – hassan

+0

何版画のようにそれを使うのか?あなたが期待している支店に行っても...ここにコピーしてこのコードをコピーし、何が印刷されているか教えてください –

+0

上記のコードは私にこのREADを与えます: '' – hassan

関連する問題