2014-11-28 2 views
1

Я пытаюсь читать фреймы, отправленные на модуль ZigBee, подключенный к USB. Каждый кадр отбрасывается пакетом Python xBee, потому что разделитель равен 0x00, когда он должен быть 0x7E. На самом деле кажется, что каждый байт также равен нулю.Python читает нули из кадра ZigBee

XCTU получает рамы отлично.

Я работаю с OS X, PyCharm, Python 3.4 и позаимствовал этот код из Интернета:

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

Программа выполняет вызов xbee.wait_read_frame() и ждет там навсегда, потому что ни одного кадра не приходит.

Я отслеживал вызов "base.py" из пакета XBee:

 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 

Вызов serial.read() всегда возвращает ноль.

+0

Какое у вас устройство ZigBee? Вы проверяли настройки последовательного порта? Вы пробовали без «escaped = True»? – pmod

+0

XBee PRO S2 (от Digi), да и да. – luna1999

+0

Если вы читаете только нули (вы?) Из этого последовательного порта, фрагменты кода здесь не очень важны. Есть что-то с настройками порта (например, вы читаете на 115200, а данные передаются на 9600). Что такое BAUD_RATE, что вы используете? Вы пытались получить доступ к простому терминалу? – pmod

ответ

1

Я не вижу ничего плохого в фрагментах кода, которые вы предоставили. Если вы читаете только нули (вы?) Из этого последовательного порта - скорее всего, что-то не так с настройками последовательного порта (например, вы читаете на 115200, а данные передаются на 9600). Что такое BAUD_RATE который вы используете?

Это также может быть целесообразно проверить, если вы можете получить доступ к устройству с просто тупым терминалом.

Смежные вопросы