首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Digi xbee-java api的Xbee通信

使用Digi xbee-java api的Xbee通信
EN

Stack Overflow用户
提问于 2015-10-20 09:59:19
回答 2查看 562关注 0票数 1

我已经配置了一个xbee作为协调器(API模式),另一个作为路由器(API模式)。我试图使用xbee从协调器发送数据到路由器,但是在路由器代码中,我总是获得null,我做错了什么吗?下面是发送数据的代码(协调器):

代码语言:javascript
复制
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);
    }
}

}

路由器端代码

代码语言:javascript
复制
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);
        }
      }
   }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-10-24 09:08:25

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

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2015-10-21 16:58:19

在路由器上,您需要一个检查消息并打印出来的循环。API应该有一个方法,您可以在调用readDataFrom()之前调用它来检查消息(或者忽略空响应)。每次检查之间睡几毫秒。现在,在程序退出之前,您的消息没有多少机会通过。

在调试类似的东西时,从隔离问题开始。哪一方失败了,协调器还是路由器?您确定XBee模块已经相互连接并且在同一个网络上吗?

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33233591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档