我有一个设备(GT511C3 fingerprint scanner),我正在连接到Raspberry Pi并使用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
- 这是不我要问的内容。
答案 0 :(得分: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
答案 1 :(得分:0)
在搜索时发现了您的问题,这对我很有用:
import serial
def baud_rate_test(serial_port, packet = b' '):
ser = serial.Serial(serial_port)
ser.timeout = 0.5
for baudrate in ser.BAUDRATES:
if 300 <= baudrate <= 57600:
ser.baudrate = baudrate
ser.write(packet)
resp = ser.readall()
if resp == packet:
return baudrate
return 'Unknown'
a = baud_rate_test('/dev/ttyUSB1')
print(a)
到目前为止我已经检查过的设备没有问题地回显“b''”。随着时间的推移,我确实计划在更多设备上对其进行测试,我想我可能需要更改“测试数据包”和响应标准。 resp != '': 行对我不起作用 - 因为以不同的波特率返回不同的“奇怪”字符。