使用Digi';s XBee Java库,其中XBee处于API 2中(转义模式)
产品系列:XBP24-ZB 函数集:ZigBee协调器API 固件版本:21A7 您好,我目前正在使用Digi的XBee Java库和API(AP=1),它工作正常。 但是,我网络的另一个节点与Arduino关联,我想使用“Arduino库在API模式下与XBee通信”()。 该Arduino库需要API转义操作模式(API 2)。这本不应该是个问题,因为XBee Java库支持API 2。然而,我在尝试打开与XBee的串行连接时出错使用Digi';s XBee Java库,其中XBee处于API 2中(转义模式),java,api,xbee,zigbee,Java,Api,Xbee,Zigbee,产品系列:XBP24-ZB 函数集:ZigBee协调器API 固件版本:21A7 您好,我目前正在使用Digi的XBee Java库和API(AP=1),它工作正常。 但是,我网络的另一个节点与Arduino关联,我想使用“Arduino库在API模式下与XBee通信”()。 该Arduino库需要API转义操作模式(API 2)。这本不应该是个问题,因为XBee Java库支持API 2。然而,我在尝试打开与XBee的串行连接时出错 package com.digi.xbee.example;
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.AbstractXbeedDevice.sendParameter(AbstractXbeedDevice.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之间有什么区别吗?我不确定是否使用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();
}
}
我不确定是否使用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();
}
}
网络中每个模块上的波特率和API模式不需要匹配,它们只是用于与本地主机的串行通信。请注意,XBee模块的
ATAP
设置需要与您试图在主机软件中使用的任何API模式相匹配
继续在Java库中使用工作的ATAP=1
,在Arduino中使用ATAP=2
。API模式2只是一种“转义”模式,其中有效负载中的某些字节被转义,以区别于0x7E帧开始字符
您甚至可以以115200或57600 bps的速度运行Java端,并将Arduino端保持在9600 bps。您可以使用“AT模式”固件运行模块,并使用“API模式”从模块与模块通信。无线模块缓冲数据,并以250kbps的速率通过空中发送,而不管您的主机设置如何。网络中每个模块上的波特率和API模式不需要匹配,它们仅用于与本地主机的串行通信。请注意,XBee模块的
ATAP
设置需要与您试图在主机软件中使用的任何API模式相匹配
继续在Java库中使用工作的ATAP=1
,在Arduino中使用ATAP=2
。API模式2只是一种“转义”模式,其中有效负载中的某些字节被转义,以区别于0x7E帧开始字符
您甚至可以以115200或57600 bps的速度运行Java端,并将Arduino端保持在9600 bps。您可以使用“AT模式”固件运行模块,并使用“API模式”从模块与模块通信。无论您的主机设置如何,无线模块都会缓冲数据,并以250kbps的速率通过无线发送。谢谢您的回复,但这将是我的下一步。现在我只想打开和关闭与本地XBee的串行通信。正如我所说,它可以与API 1正常工作。当我把它改成API2时,我得到了错误。我很好奇,所以我尝试了你的代码,它对我有效。然而,我不得不改变波特率以匹配我的机器人。也许你也需要换一下你的?打开时超时异常通常发生在波特率不正确时。代码和XBee中的波特率为9600。我重置了XBee,并将API 1更改为API 2。仍然没有工作。谢谢你的回复,但这将是我的下一步。现在我只想打开和关闭与本地XBee的串行通信。正如我所说,它可以与API 1正常工作。当我把它改成API2时,我得到了错误。我很好奇,所以我尝试了你的代码,它对我有效。然而,我不得不改变波特率以匹配我的机器人。也许你也需要换一下你的?打开时超时异常通常发生在波特率不正确时。代码和XBee中的波特率为9600。我重置了XBee,并将API 1更改为API 2。仍然不起作用。