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:
- en el programa principal obtengo todos los puertos seriales abiertos, los abro y anexo el objeto serial a serialobjects
- 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!