是否可以使用PySerial实现全双工通信?具体来说,是否有可能在需要时连续监视端口的输入和写入?我想应该可以使用线程(并且串行接口(interface)是全双工的吗?)。如果不是,在不传输时监视串行端口的最佳方法是什么?超时吗?
编辑:这是我的尝试。此代码针对TI的CC2540蓝牙LE芯片。在发送GATT初始化消息时,我希望得到答复(详细说明芯片的工作参数)...虽然我什么也没收到
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()
最佳答案
是的,串行端口硬件是全双工的。是的,您可以使用线程同时执行Rx和Tx。或者,您可以使用单线程循环,该循环确实会以较短的超时进行读取,并在读取和写入之间交替。