2014-11-28 2 views
1

USB에 연결된 ZigBee 모듈로 보낸 프레임을 읽으려고합니다. 모든 프레임은 Python xBee 패키지에 의해 버려집니다. 구분 기호는 0x7E 일 때 0x00입니다. 실제로 모든 바이트도 0 인 것으로 보입니다.Python은 ZigBee 프레임에서 0을 읽습니다.

XCTU는 프레임을 완벽하게 수신합니다.

내가 OS X, PyCharm, 파이썬 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() 호출을 실행하고 더 프레임이 도착하지 않기 때문에 영원히 기다립니다.()는 항상이 0을 반환

 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하기 :

나는 xBee 패키지에서 "base.py"에 대한 호출을 추적했다.

+0

지그비 디바이스는 무엇입니까? 직렬 포트 설정을 확인 했습니까? "escaped = true"없이 시도 했습니까? – pmod

+0

XBee PRO S2 (Digi에서), 예 및 예. – luna1999

+0

직렬 포트에서 단지 0을 읽는다면 여기에있는 코드 조각은 그 문제와 관련성이 거의 없습니다. 포트 설정이 있습니다 (예 : 데이터가 9600에서 전송되는 동안 115200에서 읽는 중입니다). 사용중인 BAUD_RATE은 무엇입니까? 방금 바보 터미널에 접근하려 했습니까? – pmod

답변

1

제공 한 코드 조각에는 이상한 점이 없습니다. 해당 직렬 포트에서 0을 읽는 경우 직렬 포트 설정에 문제가있을 가능성이 큽니다 (예 : 데이터가 9600에서 전송되는 동안 115200에서 읽는 중입니다). 사용중인 BAUD_RATE은 무엇입니까?

멍청한 단말기로 장치에 액세스 할 수 있는지 테스트하는 것도 가치가 있습니다.

관련 문제