Python: Read data via serial port from Velleman k8090

冷暖自知 提交于 2019-12-12 01:17:28

问题


I have a Velleman k8090 Relay Board from which I am trying to read some data. I can write to the board fine, but whenever I output the read data, I get strange characters like a diamond or an upside-down question mark. Here is part of my code:

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()

Why am I getting these strange characters? The documentation states that it should return the year and the week.

EDIT: After some searching and troubleshooting, I am now pretty sure it has something to do with the Python code or data types and not the hardware. This forum contains an example in C which reads from the board. I got that example to properly read from the board so I am fairly sure it has something to do with the Python code and not the hardware itself.


回答1:


After much effort, I finally found the issue. It was a Python encoding issue. The output data was actually being encoded to the strange characters I was getting. Only one line of code was needed to get the output I was expecting:

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

Hopefully this will help some others in the future.



来源:https://stackoverflow.com/questions/17862862/python-read-data-via-serial-port-from-velleman-k8090

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!