2015-10-20 3 views
1

Я настроил один xbee pro как координатор (режим API) и другой как маршрутизатор (режим API). Я пытаюсь отправить данные от координатора на маршрутизатор с помощью xbee java api, но в коде маршрутизатора я все равно получаю null, я делаю что-то неправильно. Ниже приведен код для передачи данных (координатор):Связь Xbee с использованием Digi xbee-java api

public class MainApp { 
private static final String PORT = "/dev/ttyUSB0"; 
private static final int BAUDRATE = 9600; 

public static void main(String[] args) 
{ 
    String data = "Helloww"; 

    XBeeDevice mycord = new XBeeDevice(PORT, BAUDRATE);  

    try { 
     mycord.open(); 
     System.out.println("Port is opened\n"); 
     System.out.println("remote device connection\n"); 
     //mac of my router 
     RemoteXBeeDevice router = new RemoteXBeeDevice(mycord, 
       new XBee64BitAddress("0013A20040DD9BDD")); 
     System.out.println("Sending data\n"); 
     mycord.sendData(router, data.getBytes()); 

    } catch (XBeeException e) { 
     e.printStackTrace(); 
     mycord.close(); 
     System.exit(1); 
    } 
} 

}

код на стороне маршрутизатора

public class RecvApp { 
private static final String PORT = "/dev/ttyUSB1"; 
private static final int BAUDRATE = 9600; 

public static void main(String[] args) 
{ 
    XBeeDevice myrouter = new XBeeDevice(PORT, BAUDRATE); 

     try { 
      myrouter.open(); 
      System.out.println("router port opened\n"); 
      //mac of coordinator 
      RemoteXBeeDevice remotecord = new RemoteXBeeDevice(myrouter, new XBee64BitAddress("0013A20040D96FE5")); 
      XBeeMessage msg = myrouter.readDataFrom(remotecord); 
      System.out.print(msg); 

     } catch (XBeeException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
      myrouter.close(); 
      System.exit(1); 
     } 
     } 
    } 

ответ

0

Обнаружена проблема, я не преобразовал сообщение, полученное в правильном формате. Добавлены строки ниже

String content = HexUtils.prettyHexString(HexUtils.byteArrayToHexString(xbeeMessage.getData())); 
    System.out.println("Hex data" + "" + content + "\n"); 
    String value = new String(xbeeMessage.getData()); 
    System.out.print("Actual msg" + " " + value + "\n"); 

теперь работает :)

0

На маршрутизаторе необходимо иметь цикл, который проверяет наличие сообщений и гравюр их. API должен иметь метод, который вы можете вызывать для проверки сообщений перед вызовом readDataFrom() (или, может быть, вы просто игнорируете нулевой ответ). Сон в течение нескольких миллисекунд между каждой проверкой. Прямо сейчас у вас не так много возможностей для вашего сообщения, прежде чем программа завершится.

Когда вы отлаживаете что-то вроде этого, начните с выделения вашей проблемы. Какая сторона терпит неудачу, координатор или маршрутизатор? Вы уверены, что модули XBee подключены друг к другу и находятся в одной сети?

Один тест должен состоять в том, чтобы запустить простой эмулятор терминала на последовательном порту, подключенном к маршрутизатору, видите ли какие-либо кадры? Если вы посмотрите на шестнадцатеричный дамп байтов, вы видите сообщение «Helloww»? Если нет, вам нужно, чтобы координатор работал первым, прежде чем отлаживать маршрутизатор.

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