serial libreria lib index for python linux qt serial-port pyserial

libreria - pyserial 3.3 python package index



pyqt4 y pyserial (1)

Quiero hacer una aplicación constantemente mirando el puerto serie y cambiando la interfaz de usuario de acuerdo con la entrada recibida del puerto. He logrado leer líneas del puerto con pyserial en Linux, pero no estoy seguro de cómo hacerlo de forma regular: ¿crear un hilo por separado y verificar la entrada en un evento de temporizador? ¿Cómo me aseguro de no perderme nada? (La implementación de algún tipo de protocolo / apretón de manos parece una exageración para esto ...) Y lo más importante: ¿cómo lo hago con las facilidades de qt4?

Editar: Esto es lo que estoy haciendo ahora (quiero hacer esto periódicamente con el resto de la aplicación ejecutándose y no esperando)

class MessageBox(QtGui.QWidget): def __init__(self, parent=None): QtGui.QWidget.__init__(self, parent) ser = serial.Serial(''/dev/ttyS0'', 9600, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=None, xonxoff=0, rtscts=0, interCharTimeout=None) self.label = QtGui.QLabel(ser.readline(), self) self.label.move(15, 10) ser.close() self.setGeometry(300, 300, 250, 150) self.setWindowTitle(''Authentication'') self.color = QtGui.QColor(0, 0, 0) self.square = QtGui.QWidget(self) self.square.setGeometry(120, 20, 100, 100) self.square.setStyleSheet("QWidget { background-color: %s }" % self.color.name())


No perderá ningún byte, cualquier entrada pendiente se almacenará en el búfer.

Tienes varias opciones:

  1. utilice un hilo que sondee el puerto serie con PySerial / inWaiting ()

  2. Use un temporizador en el hilo principal que sondea el puerto serie con PySerial / inWaiting.

  3. encuentre el controlador del puerto y páselo a QSocketNotifier. Esto funciona solo en Linux, pero en ese caso, QSocketNotifier observará el archivo asociado con su puerto serie y enviará una señal cuando haya algo disponible.

Los métodos 2 y 3 son mejores porque no necesitas un hilo.