2016-01-20 7 views
0

Семейство продуктов: XBP24-ZB Функция набор: ZigBee координатор API Версия прошивки: 21A7Использование XBee Java библиотеки Digi в с XBee в API 2 (Сбежал режим)

Здравствуйте, Я в настоящее время использую XBee Java Library Digi в с API (AP = 1), и он работает правильно. Однако другой узел моей сети связан с Arduino, и я хочу использовать «Arduino Library для связи с XBee в режиме API» (https://github.com/andrewrapp/xbee-arduino). Для библиотеки Arduino требуется API с экранированным режимом работы (API 2). Это не должно было быть проблемой, поскольку XBee Java Library поддерживает API 2. Тем не менее, я получил сообщение об ошибке при попытке открыть последовательное соединение с XBee.

package com.digi.xbee.example; 

import com.digi.xbee.api.XBeeDevice; 
import com.digi.xbee.api.exceptions.XBeeException; 

public class MainApp { 
    /* Constants */ 
    // TODO Replace with the port where your sender module is connected to. 
    private static final String PORT = "COM4"; 
    // TODO Replace with the baud rate of your sender module. 
    private static final int BAUD_RATE = 9600; 

    private static final String DATA_TO_SEND = "Hello XBee World!"; 

    public static void main(String[] args) { 
     XBeeDevice myDevice = new XBeeDevice(PORT, BAUD_RATE); 
     byte[] dataToSend = DATA_TO_SEND.getBytes(); 

     try { 
      myDevice.open(); 

      System.out.format("Sending broadcast data: '%s'", new String(dataToSend)); 

      myDevice.sendBroadcastData(dataToSend); 

      System.out.println(" >> Success"); 

     } catch (XBeeException e) { 
      System.out.println(" >> Error"); 
      e.printStackTrace(); 
      System.exit(1); 
     } finally { 
      myDevice.close(); 
     } 
    } 
} 

Ошибка com.digi.xbee.api.exceptions.TimeoutException: Был таймаут при выполнении запрошенной операции. на com.digi.xbee.api.AbstractXBeeDevice.sendXBeePacket (AbstractXBeeDevice.java:989) в com.digi.xbee.api.AbstractXBeeDevice.sendATCommand (AbstractXBeeDevice.java:806) в com.digi.xbee.api. AbstractXBeeDevice.sendParameter (AbstractXBeeDevice.java:1983) на com.digi.xbee.api.AbstractXBeeDevice.getParameter (AbstractXBeeDevice.java:1925) в com.digi.xbee.api.AbstractXBeeDevice.readDeviceInfo (AbstractXBeeDevice.java:365) на com.digi.xbee.api.XBeeDevice.open (XBeeDevice.java:219) в com.digi.xbee.example.MainApp.main (MainApp.java:20)

Есть ли разница между API и API 2 при программировании с помощью этой библиотеки Java?

ответ

0

Скорость передачи и режим API на каждом модуле в сети не должны совпадать, они просто используются для последовательной связи с локального хоста. Обратите внимание, что настройка ATAP модуля XBee должна соответствовать любому режиму API, который вы пытаетесь использовать в своем хост-программном обеспечении.

Продолжайте использовать рабочий ATAP=1 с библиотекой Java и используйте ATAP=2 с Arduino. API-режим 2 - это просто «экранированный» режим, когда определенные байты в полезной нагрузке экранируются как способ рассказать им, кроме символа начала кадра 0x7E.

Вы можете даже запустить конец Java со скоростью 115200 или 57600 бит/с, а конец Arduino - 9600 бит/с. Вы можете запускать модули с прошивкой «Режим AT» и обмениваться данными с ними с помощью модуля «Режим API». Радиомодуль буферизует данные, и он передается по воздуху со скоростью 250 Кбит/с, независимо от настроек вашего хоста.

0

Я не уверен в использовании библиотеки Arduino, но я вижу, что вы открываете свое устройство и никогда не сообщаете ему подключаться к другому xbee.

Вам необходимо указать xbee, к какому устройству вы хотите подключиться.

public void connect(String REMOTE_NODE_IDENTIFIER) 
{ 
//REMOTE_NODE_IDENTIFIER is the name of the xbee device you want to connect to. 
    try 
    { 
     myDevice.open(); 
     // Obtain the remote XBee device from the XBee network. 
     XBeeNetwork xbeeNetwork = myDevice.getNetwork(); 
     RemoteXBeeDevice remoteDevice = xbeeNetwork.discoverDevice(REMOTE_NODE_IDENTIFIER); 
     if (remoteDevice == null) 
     { 
      //Unable to connect to device 
      System.out.println("Couldn't find the remote XBee device with '" + REMOTE_NODE_IDENTIFIER + "' Node Identifier."); 
     } 

     else 
     { 
      //Successfully connected 
     } 

    } catch (XBeeException e) 
     { 
      e.printStackTrace(); 
     } 
} 
+0

Спасибо за ваш ответ, но это будет мой следующий шаг. Теперь я просто хочу открыть и закрыть последовательную связь с местным XBee. И, как я сказал, он работает правильно с API 1. Когда я меняю его на API 2, я получаю ошибку. –

+0

Мне было любопытно, поэтому я попробовал ваш код, и это сработало для меня. Однако мне пришлось изменить скорость передачи в бодах, чтобы соответствовать скорости моего робота. Может быть, вам тоже нужно изменить? Исключения для таймаута при открытии обычно возникают, когда скорость передачи данных неверна. – Bone

+0

Скорость передачи данных - 9600 в коде и в XBee.Я сбросил XBee и изменил с API 1 на API 2. Все еще не работает. –