2014-05-10 1 views
1

모드 API 2에서 두 개의 XBee Series 2 설정이 있습니다. 하나는 컨트롤러로 설정되고 다른 하나는 끝 노드로 설정됩니다. 끝 노드는 arduino에 연결되어 있으며 지금은 아날로그 센서의 가치를 취하여 보내고 있습니다.패킷 수신을 시도 할 때 XBee 시리즈 2가 멈추고 시간 초과 됨

지금 X-ctu를 통해 XBees를 실행하면 모든 것이 작동합니다. 새 버전에서는 컨트롤러 모듈을 USB 탐색기에 추가합니다. 그런 다음 다른 네트워크 장치를 검색하는 장치의 가운데 단추를 클릭하십시오. 그런 다음 콘솔 모드를 클릭하십시오. 연결 버튼을 클릭하면 즉시 "수신 패킷"수신을 시작합니다. 프레임 세부 정보를 살펴본 후 모든 것이 순서대로 이루어집니다.

xbee-api 자바 라이브러리 또는 python-xbee 라이브러리를 사용하려고하는 순간 문제가 발생하기 시작합니다. 내가 사용하고있는 코드는 예제에서 완전히 복사 한 복사본입니다 (작업하기에 완벽하게 합리적인 것처럼 보입니다). 다음은 파이썬 코드의 예입니다 (Windows 및/dev에/ttyUSB1 장치에 미치는 COM3가. 두 운영체제가 같은 문제가 있습니다.)

from xbee import XBee 
import serial 
s = serial.Serial('COM3', 9600) 
xbee = XBee(s) 
while True: 
    try: 
    response = xbee.wait_read_frame() 
    print(response) 
except KeyboardInterrupt: 
    break 
s.close() 

응용 프로그램은 xbee.wait_read_frame에 달려(). Java 코드는 코드가 결국 "sendAtCommand (new AtCommand ("AP ")) 줄에 도착할 때 Xbee.open()을 호출 할 때와 동일한 방식으로 작동합니다." (또는 sendSynchronous 대안을 사용하여). 메서드가 타임 아웃 해, 예외를 Throw합니다.

이 시점에서 나는 다음에 어디로 갈지 전혀 모른다. XCTU 내부에서 작동하지만 API는 포함하지 않습니다. 두 가지를 함께 연결하기 위해 wait_read_frame 전에해야 할 일이 더 있습니까? (나는 그들이 동일한 팬 ID를 가지고 있기 때문에 그렇지 않은 것으로 간주합니다. 사실 펌웨어 이외의 모든 설정은 동일합니다)

어떤 도움을 주셔서 감사합니다!

+0

당신이 API 모드 2의 두 라이브러리를 구성? 그것들은 모드 1을 디폴트로하고있을 수도 있습니다. – tomlogic

+0

두가지가 모두 모드 2에 있다고 체크했습니다. – Mike

+0

XBee 객체를 생성 할 때 파이썬 예제에 이스케이프 된 파라미터가 포함되지 않습니다 :'xbee = XBee (s, escaped = 사실)'. Java 라이브러리는 사용자가 특별히 구성하지 않는 한'ATAP = 1 '을 기대할 수도 있습니다. 'ATAP = 2'를 사용해야 만하지 않는 한,'ATAP = 1'로 전환하면 코드가 제대로 작동하는지 알 수 있습니다. – tomlogic

답변

1

XBee 모듈에는 두 가지 API 모드가 있습니다. ATAP=1이 표준 모드이고 ATAP=2이 이스케이프 모드입니다.

사용중인 코드 라이브러리가 XBee 모듈에서 프로그래밍 한 모드와 일치하도록 구성해야합니다.

python-xbee의 경우 생성자에 escaped=True을 추가해야합니다. 자바 라이브러리는 아마 비슷한 것을 가지고있을 것이다.

하지만 내 의견으로는 이스케이프 처리 된 API 모드를 사용하면 아무런 이점이 없습니다. 이스케이프 된 모드로 라이브러리를 구성하는 대신 모듈에 ATAP=1을 설정하는 것이 좋습니다.

0

XBee를 ZigBee로 대체하십시오.
Windows 컴퓨터에서 Python 2.7.5를 사용하고 있습니다.
아래 예제를 시도해보십시오.

코드 :

from xbee import ZigBee 
import serial 
import time 

port = serial.Serial(port='COM16',baudrate=9600,timeout=0) 


xbee = ZigBee(port,escaped=True) 

def filewrite(rcv): 
    logfile = open("c:\\templog.txt","a") 
    logfile.write(rcv) 
    logfile.close 



while True: 

    recv = port.readline().strip() 
    if (len(repr(recv)) > 2): 
    try: 
     response = xbee.wait_read_frame() 
     filewrite(repr(response)) 
     print repr(response) 
    except KeyboardInterrupt: 
     break 
관련 문제