读取到达串口的数据包

时间:2016-03-07 14:20:30

标签: python runtime-error

在我的Arduino上我收到了Zigbee I / O数据包。每个数据包有26个字节。我试图执行给定的程序,并收到错误。

这是代码:

import serial
ser=serial.Serial('COM17',9600,timeout=1)


while 1:

Data_in=ser.readline().encode('hex')
if Data_in[0:2]=='7e':
    Data_in.split('7e',-1)
    print("===================================")
    print("Found Packet :")
    print(Data_in)
    if Data_in[6:8]=='92':
        print("Packet type = Zigbee I/O Packet")
        AD=Data_in[22:24]
        print ("Device address")
        print(AD)
        SMH=Data_in[34:36]
        SML=Data_in[36:38]
        RH=Data_in[38:40]
        RL=Data_in[40:42]
        PH=Data_in[42:44]
        PL=Data_in[44:46]
        print("Soil moisture")
        print(SMH)
        print(SML)
        print("Rain")
        print(RH)
        print(RL)
        print("PIR")
        print(PH)
        print(PL)
    print("====================================")
print(" ")

我得到的错误是:

Traceback (most recent call last):
  File "C:\Windows\System32\chime2.py", line 5, in <module>
    Data_in=ser.readline().encode('hex')
AttributeError: 'bytes' object has no attribute 'encode'

可能是什么问题?

1 个答案:

答案 0 :(得分:0)

错误是自我解释的: AttributeError:'bytes'对象没有属性'encode'

您使用的是Python 3.x解释器,serial.readline()为您提供了bytes个对象。在Python 3中,字符串是16位unicode字符串,而bytes对象不支持encode方法。

正确的方法是使用codecs.encode,它在Python2和Python3中的工作方式相同:

import codecs
...
Data_in=codecs.encode(ser.readline(), 'hex')

或者,您可以直接处理字节,但需要对剩余的代码进行更多更改。