[Python] leer puerto serie desde PyQt5 y arduino y mostrase interfaz grafica

Iniciado por jenju302, 30 Octubre 2016, 02:01 AM

0 Miembros y 1 Visitante están viendo este tema.

jenju302

Buenos dias, estoy realizando pruebas con un sensor de temperatura en arduino, estoy utilizando la libreria PySerial para mostrar los datos en python. Pero estos datos son muy planos. Y quiero mostrarlos en una interfas grafica de PyQt5, pero no lo he logrado.En el campo ldt_sensor debo mostrar el dato leído por el sensor. Si alguien me pudiera dicir que estoy haciendo mal le agradeceria. Este es el codigo en PyQt5. Gracias.

Código (python) [Seleccionar]
import sys
import serial
import time
import pylab
from PyQt5.QtWidgets import (QApplication, QWidget,QToolTip,
                            QPushButton, QMessageBox, QLabel, QLineEdit)
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import QCoreApplication
serie = serial.Serial('COM3', 9600, timeout = 1)
class Ejemplo(QWidget):

   def __init__(self):
       super().__init__()

       self.initUI()


   def initUI(self):

       QToolTip.setFont(QFont('Arial', 10))

       self.setToolTip('Es un mensaje de prueba <b>QWidget</b> widget')
       # En este ejemplo, creamos un botón de salida. Al hacer clic en el botón, la aplicación termina.
       qbtn = QPushButton('Salir', self)
       qbtn.clicked.connect(QCoreApplication.instance().quit)
       qbtn.resize(qbtn.sizeHint())
       qbtn.move(50, 50)
       #Colocamos un mensaje en el boton
       btn = QPushButton('Boton', self)
       btn.setToolTip('Boton de prueba <b>QPushButton</b> widget')
       btn.resize(btn.sizeHint())
       btn.move(50, 80)

       #Creamos un Label para escribir testo
       lbl = QLabel('Prueba label 1', self)
       lbl.resize(lbl.sizeHint())
       lbl.move(45, 120)            
       #creamos un cajon para ingresar datos
       ldt = QLineEdit('Prueba Texto 1', self)
       ldt.resize(ldt.sizeHint())
       ldt.move(120, 120)
       #Segundo label
       lbl_sensor = QLabel('Prueba Sensor', self)
       lbl_sensor.resize(lbl_sensor.sizeHint())
       lbl_sensor.move(45, 170)
       #segundo cajon
   def sensor(): # Funcion para mostrar los datos en la interfas grafica
       
       while True:
           
           dato = serie.readline()# comunicacion serial.
           ldt_sensor = QLineEdit(self) # caja donde se muestra el dato enviado por el sensor.
           ldt_sensor.resize(ldt_sensor.sizeHint())
           ldt_sensor.move(120, 165)
           ldt_sensor = dato
           
       
   #definimos la ventana medidas, Titulo de la ventana, colocamos un icono.    
       self.setGeometry(300, 300, 300, 220)# X y Y situan la ventana metodo setGeometry
       self.setWindowTitle("Mostrar icono en la ventana") #muestra el titulo en la ventana
       self.setWindowIcon(QIcon('F:\PyQt\ventana_icono\pyserial.png'))#muestra un icono en la parte izquierda de la ventana    
       self.show()
   #definimos una clase para crear un mensaje de confirmacion si queremos salir
   def closeEvent(self, event):
       reply = QMessageBox.question(self, 'Mensaje',
           "Deseas Salir de la aplicacion?", QMessageBox.Yes |
           QMessageBox.No, QMessageBox.No)

       if reply == QMessageBox.Yes:
           event.accept()
       else:
           event.ignore()        

if __name__=='__main__':

   app = QApplication(sys.argv)
   ex = Ejemplo()
   sys.exit(app.exec_())

   
MOD: etiqueta GeSHi.


tincopasan

la verdad que no entiendo bien que querés saber, pero mirando a vuelo de pájaro tu código, aún te falta algo importante entre la línea 77 y 78:
Código (python) [Seleccionar]

ex.show()

jenju302

Deseo que la lectura del arduino se muestre en el campo ldt_sensor...eso seria todo pero no lo he logrado.

tincopasan

el problema para mi es que no tengo ni uso arduino, por lo tanto no se como lee los datos, ahora si sabes como toma los datos y de que forma los recupera, si querés ponelos en un archivo de texto y a partir de ahí vemos como mostrarlos. Lo siento por no disponer de otra forma de ayudarte.

Once

Hola, justo también estoy trabajando con Python y Arduino aunque no majeno QT. Lo que veo es que no estás llamando en ninguna parte a la función sensor()

Saludos!