如何使用Pyserial发送和接收数据?

时间:2019-03-06 10:07:19

标签: python pyserial serial-communication can-bus

我想在两个串行端口之间发送和接收数据。我使用CANtact工具包作为串行设备。我使用了以下代码

write.py:

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

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

listen.py

import serial
serBarCode = serial.Serial('/dev/ttyACM0', 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"))

我收到以下错误:

hp @ HP笔记本电脑:〜$ cd / home / hp / Desktop

hp @ HP-Notebook:〜/ Desktop $ python3 write.py

/ dev / ttyACM1

hp @ HP-Notebook:〜/ Desktop $ python3 listen.py

回溯(最近通话最近一次):

文件“ listen.py”,位于

的第7行

serBarCode = serBarCode.readline()

AttributeError:“字节”对象没有属性“ readline”

hp @ HP笔记本:〜/台式机

2 个答案:

答案 0 :(得分:1)

serBarCode = serBarCode.readline()

您正在用从其读取的数据覆盖串行对象serBarCode。 因此,循环首次可以正常运行,但是在接下来的迭代中,您的串行对象已替换为您先前从中读取的字节

执行此操作:

data = serBarCode.readline()
if len(data) >= 1:
    print(dataBarCode.decode("utf-8"))

答案 1 :(得分:0)

您写道您正在使用CANtact设备。

这些设备不了解"012345688902341"

设备使用某种协议。例如。对于发送CAN消息,命令以t开头,后跟CAN-ID,然后是DLC,然后是数据,依此类推。

其他命令以FK等开头。

您的消息很可能仅被CANtact设备忽略。

您绝对应该使用pyvit之类的高级库来使用设备。