我有一个要连接到Raspberry Pi并使用GT511C3 fingerprint scanner对其进行编程的设备(Python Serial module)。 GT511设备的默认波特率为9600,并且可以更改它。更改GT511波特率后,它将保持此设置,直到下次重启。

问题是我是否有办法检查所连接设备的当前波特率(如果该设备已被编程并由其他主机连接)。我知道可以使用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-这不是我要的。

最佳答案

也许应该使用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

关于python - pySerial:如何检查当前波特率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38937903/

10-12 04:58