2016-08-13 98 views
0

我有一個設備(GT511C3 fingerprint scanner),我正在連接到Raspberry Pi並使用Python Serial module進行編程。 GT511設備的默認波特率爲9600,並且可以更改它。一旦你改變了GT511波特率,它會保持這個設置,直到下一次重啓。pySerial:如何檢查當前的波特率

問題是,如果有方法可以檢查連接設備的當前波特率(如果設備已經編程並且由不同的主機連接)。我知道這是可能使用stty做到這一點:

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

有沒有辦法使用Python串行或任何其他模塊做,或做我必須寫一個反覆的檢查過程發現它呢?

更新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!") 

更新2: 請停止提示serial.baudrate - 這是不是什麼,我問。

+0

看起來你在更新回答了自己的問題1.更新2沒有意義的,我......你尋找答案不嘗試使用pySerial方法? – theQuestionMan

+1

'serial.baudrate'不是我正在尋找的,因爲它會給我我所知道的。我試圖找出遠程設備將響應哪些設備。 – RafazZ

回答

1

也許你可以使用stty,直到找到更好的選擇。 您可以從Python代碼中調用它並解析結果以獲取所需內容。 這是一個基本的例子(未測試):

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