使用Digi的XBee Java库和API 2中的XBee(转义模式)

时间:2016-01-20 15:22:41

标签: java api xbee zigbee

产品系列:XBP24-ZB 功能集:ZigBee协调器API 固件版本:21A7

您好,我目前正在使用Digi的带有API(AP = 1)的XBee Java库,它可以正常运行。 但是,我的网络的另一个节点与Arduino相关联,我想使用Arduino Library在API模式下与XBee通信' (https://github.com/andrewrapp/xbee-arduino)。 Arduino库需要API Escaped操作模式(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)

  

使用此Java库编程时API和API 2之间是否有任何区别?

2 个答案:

答案 0 :(得分: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();
        }
}

答案 1 :(得分:0)

网络中每个模块的波特率和API模式不需要匹配,它们仅用于与本地主机的串行通信。请注意,XBee模块的ATAP设置需要与您尝试在主机软件中使用的API模式相匹配。

继续将工作ATAP=1与Java库一起使用,并将ATAP=2与Arduino一起使用。 API模式2只是一个"转义"模式,其中有效载荷中的某些字节被转义,以便将它们与0x7E帧起始字符分开。

您甚至可以以115200或57600bps运行Java端,并将Arduino端保持在9600bps。您可以使用" AT模式运行模块"固件并使用" API模式"从模块与它们通信。无线电模块可缓冲数据,无论您的主机设置如何,它都以250kbps的速度通过无线方式发送。