È possibile ottenere una comunicazione full duplex utilizzando PySerial? Nello specifico, sarebbe possibile monitorare continuamente la porta per l'input e scrivere quando necessario? Immagino che dovrebbe essere possibile utilizzare i thread (e le interfacce seriali sono full duplex no?). In caso contrario, quale sarebbe l'approccio migliore per monitorare una porta seriale quando non si trasmette? Un timeout?PySerial - Comunicazione full duplex
Modifica: Ecco il mio tentativo. Questo codice è destinato al chip CC LE25 Bluetooth LE di TI. Con l'invio del messaggio di init GATT mi aspetto una risposta (in dettaglio i parametri di funzionamento del chip) ... sto ottenendo nulla se
import serial
import threading
from time import sleep
serial_port = serial.Serial()
GAP_DeviceInit = \
"\x01\x00\xfe\x26\x08\x03\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00"
def read():
while True:
data = serial_port.read(9999);
if len(data) > 0:
print 'Got:', data
sleep(0.5)
print 'not blocked'
def main():
serial_port.baudrate = 57600
serial_port.port = '/dev/ttyACM0'
serial_port.timeout = 0
if serial_port.isOpen(): serial_port.close()
serial_port.open()
t1 = threading.Thread(target=read, args=())
while True:
try:
command = raw_input('Enter a command to send to the Keyfob: \n\t')
if (command == "1"):
serial_port.write(message)
except KeyboardInterrupt:
break
serial_port.close()
Potresti fare un breve esempio? O forse indicare eventuali problemi immediati con il codice di esempio fornito. Il problema con il secondo approccio è che non so quando i dati dovranno essere inviati ... l'utente potrà scegliere quale messaggio inviare in qualsiasi momento – stephenfin
Non hai iniziato il tuo thread letto. Aggiungi 't1.start()' – TJD
Doh! Grazie mille! – stephenfin