write works serial sensores recibir puerto proyectos method lock leer how guardar graficar datos con como adquisicion python serialization serial-port nonblocking python-multiprocessing

works - recibir datos bluetooth python



Los datos de lectura Pyserial de Python forman mĂșltiples puertos serie al mismo tiempo (1)

Primero cambie ReadCOM.py para recibir argumentos

import sys import serial ser = serial.Serial(port=sys.argv[1],baudrate=int(sys.argv[2])) while True: # The program never ends... will be killed when master is over. # sys.stdin.readline() ser.write(''serial command here/n'') # send command to serial port output = ser.readline() # read output sys.stdout.write(output) # write output to stdout sys.stdout.flush()

y después de pasarlo en main.py :

from subprocess import Popen, PIPE # call subprocess # pass the serial object to subprocess # read out serial port # HOW TO PASS SERIAL OBJECT HERE to stdin p1 = Popen([''python'', ''./ReadCOM.py'', "COM1", "9600"], stdin=PIPE, stdout=PIPE, stderr=PIPE) # read COM1 permanently p2 = Popen([''python'', ''./ReadCOM.py'', "COM2", "9600"], stdin=PIPE, stdout=PIPE, stderr=PIPE) # read COM2 permanently for i in range(10): print "received from COM1: %s" % p1.stdout.readline() # print output from ReadCOM.py for COM1 print "received from COM2: %s" % p2.stdout.readline() # print output from ReadCOM.py for COM2

Estoy tratando de leer múltiples puertos seriales al mismo tiempo con Python 2.7 y PySerial.
Las características deben ser:

  1. en el programa principal obtengo todos los puertos seriales abiertos, los abro y anexo el objeto serial a serialobjects
  2. Quiero leer cada puerto serie de datos en un subproceso para la paralelización

El gran problema es: ¿cómo paso el objeto del puerto serie al subproceso?
O:
¿Existe otra solución (y tal vez mejor) para esto? (Quizás esto : ¿Cómo aplico puertos seriales retorcidos a mi problema?)

EDITAR

Creo que no estaba totalmente claro lo que quiero lograr.
Quiero leer 2 o más puertos seriales al mismo tiempo. Debido a los tiempos de espera y lectura, no es posible leerlos al mismo tiempo en un solo proceso.
El siguiente enfoque

ser1 = serial.Serial(port="COM1",baudrate=9600) ser2 = serial.Serial(port="COM2",baudrate=9600) ser1.write(''command for reading out device 1'') output1 = ser1.readline() ser2.write(''command for reading out device 2'') # now you have to wait at least 100ms for device 2 to respond output2 = ser2.readline()

no sirve a mis necesidades

Otro enfoque es paralelizar las lecturas seriales en subprocesos.

main.py

import serial # serial communication from subprocess import Popen, PIPE ports = ["COM1", "COM2"] for port in ports: ser = serial.Serial() ser.port=port ser.baudrate=9600 # set parity and ... serialobjects.append(ser) # call subprocess # pass the serial object to subprocess # read out serial port # HOW TO PASS SERIAL OBJECT HERE to stdin p1 = Popen([''python'', ''./ReadCOM.py''], stdin=PIPE, stdout=PIPE, stderr=PIPE) # read COM1 permanently p2 = Popen([''python'', ''./ReadCOM.py''], stdin=PIPE, stdout=PIPE, stderr=PIPE) # read COM2 permanently for i in range(10): print "received from COM1: %s" % p1.stdout.readline() # print output from ReadCOM.py for COM1 print "received from COM2: %s" % p2.stdout.readline() # print output from ReadCOM.py for COM2

ReadCOM.py (tomado de la publicación relacionada y editado)

import sys while True: # The program never ends... will be killed when master is over. # sys.stdin.readline() ser.write(''serial command here/n'') # send command to serial port output = ser.readline() # read output sys.stdout.write(output) # write output to stdout sys.stdout.flush()

¡Gracias por adelantado!