es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

pyserial – conectar mientras se transfiere datos

Utilizando Python PySerial y al intentar conectar durante la transferencia de datos, se produce una excepción:

El códec ‘utf-8’ no puede decodificar el byte 0xf7 en la posición 1: byte de inicio inválido

¿Cómo se puede recuperar de esta excepción? Los datos se están transfiriendo continuamente (sin interrupción alguna). El problema ocurre cuando un dispositivo en el otro extremo se conecta “en el lugar equivocado”, se salta el byte de inicio o de parada y decodifica incorrectamente esa secuencia. Pero no hay forma de evitar esa excepción.

No hay problema en pausar el programa durante un tiempo o descartar algunos datos. ¿Cuál es la forma correcta de volver a conectar? Cerrar y abrir el puerto no ayuda, el problema es el mismo, se conecta en el lugar equivocado. El mismo problema ocurre al leer otra secuencia de datos (también conocida como excepción).

El código utilizado es el siguiente:

if serial.in_waiting > 1:
    data = serial.read(serial.in_waiting).decode('utf-8')
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Una posible solución para recuperarse de la excepción es usar un bloque try-except para manejar el error de decodificación y continuar leyendo los datos. Aquí hay un ejemplo de código:

    while True:
        try:
            if serial.in_waiting > 0:
                data = serial.read(serial.in_waiting).decode('utf-8')
                # procesa los datos aquí
        except UnicodeDecodeError:
            # maneja el error de decodificación
            serial.reset_input_buffer()  # descarta los datos no leídos
            time.sleep(1)  # pausa el programa por un momento
    

    En este código, leemos continuamente los datos del puerto serial y los decodificamos como UTF-8. Si ocurre un error de decodificación, capturamos la excepción, restablecemos el búfer de entrada para descartar los datos no leídos y pausamos el programa por un momento. Luego, continuamos leyendo los datos nuevamente. De esta manera, podemos recuperarnos de la excepción y seguir recibiendo los datos a pesar de los errores de decodificación. Sin embargo, es importante tener en cuenta que este enfoque puede no ser adecuado para todos los casos, ya que asume que los datos de entrada están codificados en UTF-8 y puede descartar algunos datos válidos. Por lo tanto, se recomienda ajustar el código según los requisitos específicos y el formato de datos de la aplicación.

Comments are closed.