2016-08-13 28 views
0

私はラズベリーパイに接続し、Python Serial moduleを使ってプログラミングしているデバイス(GT511C3 fingerprint scanner)を持っています。 GT511デバイスのデフォルトボーレートは9600で、変更可能です。 GT511ボーレートを変更すると、次回の再起動時までこの設定が保持されます。pySerial:現在のボーレートを確認する方法

問題は、接続されたデバイスの現在のボーレートをチェックする方法があるかどうかです(デバイスが既にプログラムされていて、別のホストによって接続されている場合)。

$> stty < /dev/ttyAMA0 
speed 57600 bud; line = 0 
... 

Pythonのシリアルまたは他のモジュールを使用して、それを行う方法があるか、私はそれを見つけるために、反復チェック手順を記述する必要がありません。私はsttyを使用して、それを行うことが可能である知っていますか?

UPDATE 1:私は受け入れられてボーレートを見つけるために使用 現在のソリューション:

ser = serial.Serial('/dev/ttyAMA0') 
ser.timeout = 0.5 
for baudrate in ser.BAUDRATES: 
    if 9600 <= baudrate <= 115200: 
     ser.baudrate = baudrate 
     ser.write(packet) 
     resp = ser.read() 
     if resp != '': 
      break 
if ser.baudrate > 115200: 
    raise RuntimeError("Couldn't find appropriate baud rate!") 

UPDATE 2: してください、serial.baudrateを示唆して停止する - これは私が求めています何ませです。

+0

...あなたがしようとしていない答えを探していますpySerialメソッドを使用しますか? – theQuestionMan

+1

'serial.baudrate'は、私がすでに知っているものを私に与えるので、私が探しているものではありません。私はどのデバイスがリモートに応答するかを調べようとしています。 – RafazZ

答えて

1

もっと良い方法が見つかるまで、sttyを使ってください。 Pythonコードから呼び出すことができ、結果を解析して必要なものを得ることができます。ここ は、基本的な例(テストしていません)です:あなたは、更新1で、あなた自身の質問に答えのような更新2は、私には意味がありません見える

import subprocess 
import shlex 

def get_baudrate(device): 
    command = 'stty < {0}'.format(device) 
    proc_retval = subprocess.check_output(shlex.split(command)) 
    baudrate = int(proc_retval.split()[1]) 
    return baudrate 
関連する問題