这是从z1 mote读取的代码。
while True:
if not ser.isOpen():
try:
ser = serial.Serial(z1port, z1baudrate,timeout=0, parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS)
except:
sys.exit("Error connecting device")
queue = ser.inWaiting()
if queue > 0:
data = ser.read(1000)
print data
time.sleep(0.2)这是我用它来写的代码
# some event-driven code here so that whenever a message is received then do:
print(str(msg.payload))
ser = serial.Serial("/dev/ttyUSB1")
print ser.isOpen()
ser.write(msg.payload)第二个代码的输出应该是如果msg.payload = "hello":
hello
True 但是,读取的代码将停止从串口读取(代码将运行,但没有输入)。我该如何解决这个问题?
发布于 2016-03-28 12:25:06
我使用@mhopeng的思想编写了一个实现多线程编程的代码,其中一个函数处理读取,另一个函数处理写入。在调用它们之前,我将连接到串行端口,并将其传递给两个线程。
我不得不使用多线程,因为我需要一个独立的线程,随时从用户输入写入。
发布于 2016-03-27 19:03:33
只能创建一个到设备的串行连接。问题中的代码创建了两个连接,一个在主例程中,一个在子例程中。在主例程中,创建一个连接以建立与设备的通信:
ser = serial.Serial(z1port, z1baudrate) # I assume z1port='/dev/ttyUSB1'然后,在子程序中还创建了一个连接:
ser = serial.Serial("/dev/ttyUSB1")因此,现在有两个连接试图使用同一个端口。这不管用。
相反,您应该在整个程序中使用原始连接,并将子程序定义为接收连接作为输入参数。例如:
ser = serial.Serial(z1port, z1baudrate)
# do whatever to make connection to the device
getMessage(ser) # call subroutine to read data *with the existing connection*
ser.close() # close connection when finished
def getMessage(serConn):
# read data
data = serConn.read(1000)
# send ack
serConn.write(b'OK')另一种选择是在需要进行通信时,在代码中打开和关闭串行连接。这样做的效率通常要低得多,而且只有在只有断断续续地与设备通信的情况下才有意义。
https://stackoverflow.com/questions/36222823
复制相似问题