PySerial发送和接收

时间:2018-01-10 08:22:23

标签: python serial-port pyserial

我使用pyserial编写了一个基本程序来发送和接收数据。

import serial
ser = serial.Serial()
ser.port='COM9'
ser.open()
ser.write(b'hello\n')
data = ser.read()
print data

但是程序不打印任何输出而不是在命令提示符下终止。

3 个答案:

答案 0 :(得分:1)

串行连接有一个Tx线(发送)和一个Rx线(接收)。这些没有连接。因此,如果您使用write(...)在Tx上发送某些内容,则不会在带有read()的Rx行上看到该消息。

如果你想要一个循环,你需要两个串行COM上的两个串行对象并连接两个串行端口。然后你可以从一个对象发送并从另一个对象读取。

答案 1 :(得分:1)

所有进入Linux串口的数据都存储在文件中。因此,有必要以一定的频率检查文件。您可以使用for循环执行此操作。 您的错误是您发送数据并尝试在同一端口上获取数据。这是不可能的。您需要1到2个串行端口之间的物理连接。 这是一个例子: physical connection of serial ports 因此,您的1个串行端口TX必须连接2个串行端口RX,反之亦然2 SP RX和1个SP TX

有一些python3代码可以侦听串口并在另一个串口上写入数据。

write.py:

import serial

#init serial port and bound
# bound rate on two ports must be the same
ser = serial.Serial('/dev/ttyS2', 9600)
print(ser.portstr)

#send data via serial port
ser.write("012345688902341")
ser.close()

listen.py:

import serial
serBarCode = serial.Serial('/dev/ttyS1', 9600, timeout=1)

while True:

    #read data from serial port
    serBarCode = serBarCode.readline()

    #if there is smth do smth
    if len(serBarCode) >= 1:
        print(dataBarCode.decode("utf-8"))

首先执行listen.py,然后执行write.py

答案 2 :(得分:0)

如果您像使用一些可用的COM端口仿真器(https://freevirtualserialports.com/)一样使用通用的COM端口网桥,则可以创建一个网桥将一个端口发送到另一个BUT,listen.py有两个错误:

您需要ser.readline(),而不是serBarCode.readline()

以及最后一行中的serBarCode.decode("utf-8"),因为从未在其他任何地方定义dataBarCode