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

问题描述 投票:0回答:2

我想在两个串口之间发送和接收数据。我使用CONtact工具包作为我的串口设备。我使用下面的代码

write.朋友:

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.朋友

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-Notebook:〜$ cd / home / hp / Desktop

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

的/ dev / ttyACM1

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

Traceback(最近一次调用最后一次):

文件“listen.py”,第7行,in

serBarCode = serBarCode.readline()

AttributeError:'bytes'对象没有属性'readline'

HP @ HP-笔记本:〜/桌面$

python pyserial serial-communication can-bus
2个回答
1
投票
serBarCode = serBarCode.readline()

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

改为:

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

0
投票

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

这些设备不了解"012345688902341"

该设备说一定的协议。例如。对于发送CAN消息,命令以t开头,后跟CAN-ID,然后是DLC,然后是数据,依此类推。

其他命令以FK等开头。

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

你绝对应该使用像pyvit这样的高级库来使用该设备。

© www.soinside.com 2019 - 2024. All rights reserved.