Python reads zeros from ZigBee frame

743 views Asked by At

I am trying to read frames sent to a ZigBee module plugged in the USB. Every frame gets discarded by the Python xBee package because the delimiter is 0x00 when it should be 0x7E. Actually it seems that every byte is also zero.

XCTU receives the frames perfectly.

I work with OS X, PyCharm, Python 3.4 and borrowed this code from Internet:

    # Open serial port
ser = serial.Serial(PORT, BAUD_RATE)

# Create API object
xbee = ZigBee(ser,escaped=True)

# Continuously read and print packets
while True:
    try:
        response = xbee.wait_read_frame()
        sa = hex(response['source_addr_long'][4:])
        rf = hex(response['rf_data'])
        datalength=len(rf)
        # if datalength is compatible with two floats
        # then unpack the 4 byte chunks into floats
        if datalength==16:
            h=struct.unpack('f',response['rf_data'][0:4])[0]
            t=struct.unpack('f',response['rf_data'][4:])[0]
            print (sa,' ',rf,' t=',t,'h=',h)
        # if it is not two floats show me what I received
        else:
            print (sa,' ',rf)
    except KeyboardInterrupt:
        ser.close()
        break

ser.close()

The program executes the xbee.wait_read_frame() call and waits there forever because no frame arrives.

I have tracked the call to "base.py" from the xBee package:

        while True:
            if self._callback and not self._thread_continue:
                raise ThreadQuitException

            if self.serial.inWaiting() == 0:
                time.sleep(.01)
                continue

            byte = self.serial.read()

            if byte != APIFrame.START_BYTE:
                continue

The call to serial.read() always returns a zero.

1

There are 1 answers

0
pmod On BEST ANSWER

I can't see anything wrong in code fragments you have provided. If you are reading just zeroes (are you?) from that serial port - there most likely something is wrong with serial port settings (e.g. you are reading at 115200 while data is being transmitted at 9600). What is the BAUD_RATE that you are using?

It's also could be a worth to test if you can access device with just dumb terminal.