俺言語。

自分にしか理解できない言語で書かれた備忘録

【Java】【xbee】xbeeAPIひたすら受信し続けるプログラム

常にデータを受信し続け,送信元のアドレスとテキストデータを
コンソールに表示するだけのプログラム

大まかな流れは
XBeeクラスのインスタンス

通信ポート,速度の設定

responseクラスで何か反応があるか検出

responseが何であるかをAPI_IDと比較

ByteutilsクラスのtoStringやtoBaseで目的の内容に変換

あとは色々なところでExceptionが起きるので適宜処理が必要。

Receive Packets

Class Description Series API ID Enum

ZNetRxResponse Received on the remote radio after a ZNetTxRequest packet is sent Series 2 ApiId.ZNET_RX_RESPONSE

************************************************************************

//まずはXBeeクラスのインスタンス
try{
   xbee = new XBee();

//次にcomポートと通信速度(PC-xbee)の設定
  xbee.open("COM6", 9600);

//ポートが開いてなかったりするとXBeeExceptionが発生するのでcatchする。
  }catch(XBeeException e_init){
   System.out.println("初期化失敗");
  }

  while(true){
//xbeeに何かしらの反応があればresponseクラスをインスタンス化。
//なければエラーを返す、、、と思う
//タイムアウト=100ms

   try{
        XBeeResponse response = xbee.getResponse(100);

//responseがデータ受信であるか?
    if(response.getApiId() == ApiId.ZNET_RX_RESPONSE){

//responseクラスを受信用のZNetRxResponseにキャストしてインスタンス
     ZNetRxResponse rx = (ZNetRxResponse) response;

//受信したデータの送信元アドレスを表示
//ByteUtils.toBase16で受信したint[]を16進数Stringに変換

     System.out.println(ByteUtils.toBase16(rx.getRemoteAddress64().getAddress()));

//受信したデータを表示
//ByteUtils.toBase16で受信したint[]をStringに変換

     System.out.println(ByteUtils.toString(rx.getData()));
    }

//XBeeResponseにデータがない場合のException
   }catch(XBeeTimeoutException e_timeout){
    System.out.println("データなし");

//XBee全体のException
   }catch(XBeeException e){
    xbee.close();
    System.out.println(e.toString());
    break;
//その他一般のException
   }catch(Exception e2){
    break;
   }
  }
}
}