Python:通过Velleman k8090的串口读取数据

时间:2013-07-25 15:49:08

标签: python python-2.7 io serial-port

我有一个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代码有关,而不是硬件本身。

1 个答案:

答案 0 :(得分:0)

经过多方努力,我终于找到了问题。这是一个Python编码问题。输出数据实际上被编码为我得到的奇怪字符。只需要一行代码就可以获得我期望的输出:

 output = self.talk.read(7)
 output = output.encode('hex')  #converts the strange characters to hex
 print output

希望这将有助于其他人。