在我的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'
可能是什么问题?
答案 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')
或者,您可以直接处理字节,但需要对剩余的代码进行更多更改。