Timeout de linha de leitura Python Pytherial
Pergunta
Estou usando o Pyseial para me comunicar com um dispositivo incorporado.
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
z = ser.readline(eol='\n')
Por isso, enviamos CMD para o dispositivo e ele responde com uma série de comprimento de varejamento terminando em um '\n'
Se o dispositivo não puder reproduzir, então readline()
Times e z=''
Se o dispositivo for interrompido ou falhas, estará enviando os dados, então readline()
Times e z serão uma corda sem um '\n'
no final.
Existe uma boa maneira de verificar se readline()
Executou o tempo além de verificar o estado de z.
Solução
Eu acho que o que você gostaria de fazer é ..
import re
import time
import serial
def doRead(ser,term):
matcher = re.compile(term) #gives you the ability to search for anything
tic = time.time()
buff = ser.read(128)
# you can use if not ('\n' in buff) too if you don't like re
while ((time.time() - tic) < tout) and (not matcher.search(buff)):
buff += ser.read(128)
return buff
if __name__ == "__main__":
ser = serial.Serial(PORT, BAUD, timeout = TOUT)
ser.write(CMD)
print doRead(ser,term='\n')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow