【问题标题】:Xbee communication using Digi xbee-java api使用 Digi xbee-java api 进行 Xbee 通信
【发布时间】:2015-10-20 09:59:19
【问题描述】:

我已将一台 xbee pro 配置为协调器(API 模式),另一台配置为路由器(API 模式)。我试图使用 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);
        }
      }
   }

【问题讨论】:

    标签: java api embedded xbee zigbee


    【解决方案1】:

    在路由器上,您需要有一个循环来检查消息并将其打印出来。 API 应该有一个方法,您可以在调用readDataFrom() 之前调用它来检查消息(或者您可能只是忽略空响应)。在每次检查之间休眠几毫秒。目前,在程序退出之前,您的信息没有太多机会传达。

    在调试这样的事情时,首先要隔离您的问题。哪一方出现故障,协调器还是路由器?您确定 XBee 模块已经相互连接并且在同一个网络上吗?

    一个测试是在连接到路由器的串行端口上运行一个简单的终端仿真器,您是否看到任何帧通过?如果您查看字节的十六进制转储,您是否看到您的“Helloww”消息?如果没有,您需要先让协调器工作,然后再调试路由器。

    【讨论】:

      【解决方案2】:

      发现问题,我没有以正确的格式转换收到的消息。添加了以下几行

      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");
      

      现在工作:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-06
        • 1970-01-01
        • 2017-11-29
        • 1970-01-01
        • 1970-01-01
        • 2021-06-28
        • 1970-01-01
        相关资源
        最近更新 更多