我有一个Velleman k8090继电器板,我试图读取一些数据。我可以很好地写入电路板,但每当我输出读取数据时,我会得到像钻石或倒置问号这样的奇怪字符。这是我的代码的一部分:
import serial
COM_PORT = 'COM4'
class Velleman8090:
def __init__(self, port=COM_PORT):
self.port = port
self.baud_rate = 19200
self.data_bits = 8
self.parity = 'N'
self.stop_bits = 1
self.flow_control = 'N'
def open_device(self):
self.talk = serial.Serial(self.port, self.baud_rate, self.data_bits, self.parity, self.stop_bits)
def firmware_version(self):
data = packet(0x71, 0x00, 0x00, 0x00)
self.talk.write(data)
print self.talk.read()
def close_device(self):
self.talk.close()
def chksum(cmd,msk,p1,p2):
return (((~(0x04 + cmd + msk + p1 + p2)) + 0x01) & 0xff)
def packet(cmd,msk,p1,p2):
return str(bytearray([0x04, cmd, msk, p1, p2, chksum(cmd, msk, p1, p2), 0x0f]))
def main():
vm8090 = Velleman8090()
vm8090.open_device()
vm8090.firmware_version()
vm8090.close_device()
为什么我会收到这些奇怪的角色?文档说明它应该返回年份和星期。
编辑:经过一些搜索和故障排除后,我现在非常确定它与Python代码或数据类型有关,而不是硬件。 This forum包含C中从板上读取的示例。我得到了那个从板上正确读取的例子,所以我很确定它与Python代码有关,而不是硬件本身。答案 0 :(得分:0)
经过多方努力,我终于找到了问题。这是一个Python编码问题。输出数据实际上被编码为我得到的奇怪字符。只需要一行代码就可以获得我期望的输出:
output = self.talk.read(7)
output = output.encode('hex') #converts the strange characters to hex
print output
希望这将有助于其他人。