我想在两个串行端口之间发送和接收数据。我使用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笔记本:〜/台式机
答案 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,然后是数据,依此类推。
其他命令以F
,K
等开头。
您的消息很可能仅被CANtact设备忽略。
您绝对应该使用pyvit
之类的高级库来使用设备。