Advertisement
AntonioVillanueva

Lectura de datos de un puerto serie

May 9th, 2022
1,035
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.39 KB | None | 0 0
  1. """
  2. Antonio Villanueva Segura
  3. Lectura de los datos de una bascula en RS232
  4. """
  5. import time
  6. import threading
  7. from tkinter import *
  8. from tkinter import ttk
  9. import serial
  10.  
  11. port='/dev/ttyACM0' #Puerto para comunicar con Tanita
  12. bps=9600 #Velocidad
  13.  
  14. dato="" #Lectura bruta de los datos del puerto serie
  15.  
  16. #Sistema grafico
  17. ventana = Tk()
  18. ventana.title("TANITA")
  19. ventana.resizable( False, False )
  20.  
  21. def leeSerie():
  22.     """ Lectura del puerto serie """
  23.     global dato
  24.    
  25.     with serial.Serial(port, bps, timeout=1) as ser:
  26.         dato = ser.readline()   # lee una linea terminada en \n
  27.          
  28. def actualizaDatos():
  29.     """ Actualiza el peso en el GUI , desde un thread """
  30.     global datos
  31.     global dato  
  32.  
  33.     while (True):
  34.         leeSerie() #Lee el puerto serie actualiza la variable datos
  35.        
  36.         #Afecta la variable datos , que a su vez afectara la variable peso
  37.         datos.set((dato.decode("utf-8")).strip('\n').strip('\r') )
  38.         time.sleep(1)
  39.  
  40. if __name__ == '__main__':
  41.   """ Bucle principal """
  42.   global datos
  43.  
  44.   ventana = ttk.Frame(ventana, padding=10)
  45.   ventana.grid() # Ventana tipo rejilla
  46.   text = Text(width = 65, height = 5)
  47.  
  48.  
  49.   ventana = ttk.Frame(ventana, padding=10)
  50.   ventana.grid() # Ventana tipo rejilla
  51.  
  52.   #Etiqueta para mostrar el puerto tty ...es un ejemplo
  53.   puerto=ttk.Label(ventana,text=port).grid(column=0, row=0)
  54.  
  55.   #Etiqueta para mostrar la velocidad bps
  56.   velocidad=ttk.Label(ventana, text=str(bps)).grid(column=1, row=0)
  57.  
  58.   #Etiqueta informativa Peso
  59.   ttk.Label(ventana, text="Peso ").grid(column=0, row=1)
  60.  
  61.   #2a. Etiqueta para leer el peso de TANITA desde el RS232
  62.   datos = StringVar() #Variable para leer datos desde  el puerto serie  
  63.   peso=ttk.Entry( ventana, state="disable",textvariable=datos , width=6 ).grid(column=1, row=1)
  64.  
  65.   #Un boton para salir p.e ...
  66.   boton=ttk.Button(ventana, text="salir",command=ventana.destroy).grid(column=0, row=2)
  67.  
  68.   #threads , proceso paralelo al hilo principal para leer el RS232
  69.   t2 = threading.Thread(target = actualizaDatos)
  70.   #t2.daemon = True
  71.   t2.start()
  72.  
  73.   ventana.mainloop()
  74.  
  75.  
  76. """
  77. /*
  78.  Bascula TANITA virtual , genera pesos aleatorios en el ttyACM0
  79.  codigo para el Arduino
  80. */
  81.  
  82. int peso=0;
  83. void setup() {Serial.begin(9600);}
  84.  
  85.  
  86. void loop() {
  87.  // Envia un peso aleatorio hacia el RS232
  88.  Serial.print(random(1,150));//Peso aleatorio
  89.  Serial.println ("Kg");//Anade Kg al final
  90.  
  91.  delay (1000);
  92.  
  93. }
  94. """  
  95.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement