产品系列: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之间是否有任何区别?
答案 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的速度通过无线方式发送。