如何在API模式下读取XBee RSSI



我正在尝试在接收端测试API模式下的XBee RSSI,如何在arduino中检索接收无线电的RSSI值
我在API-2模式下配置了两个XBee,并通过引脚4-5(rxtx&txrx(连接到arduino到XBee无线电。

发送帧代码如下,两端传输没有问题,

uint8_t data[] = {'H','i'};
XBeeAddress64 addr64 = XBeeAddress64();
addr64.setMsb(0x00000000); // Msb address of receiver
addr64.setLsb(0x00000000); // Lsb address of receiver
ZBTxRequest zbTx = ZBTxRequest(addr64, data, sizeof(data));
xbee.send(zbTx); 
delay(1000);

在接收端,我尝试了arduino的pulseIn和的.getRssi(),前一个函数的结果为"0",而后一个函数为"102",但在我将Xbee无线电相互移开时保持不变。我需要做些什么才能在接收端获得正确的RSSI。。?

希望这个答案能帮助你和其他人
假设您正在使用以下库:https://github.com/andrewrapp/xbee-arduino
并且您有一个系列1模块,您可以使用以下测试代码进行快速诊断。如果需要,当然也可以使用注释部分

#include <XBee.h>
#include <SoftwareSerial.h>
// XBee's DOUT (TX) is connected to pin 8 (Arduino's Software RX)
// XBee's DIN (RX) is connected to pin 9 (Arduino's Software TX)
SoftwareSerial serial1(8, 9); // RX, TX
XBee xbee = XBee();
XBeeResponse response = XBeeResponse();
Rx16Response rx16 = Rx16Response();
Rx64Response rx64 = Rx64Response();
// uint8_t xbeeOption = 0;
// uint8_t xbeeData = 0;
uint8_t xbeeRssi = 0;
void setup() {
Serial.begin(9600);
serial1.begin(9600);
xbee.setSerial(serial1);
}
void loop() {
xbee.readPacket(100);
if (xbee.getResponse().isAvailable())  {
Serial.println("Xbee available");
if (xbee.getResponse().getApiId() == RX_64_RESPONSE || xbee.getResponse().getApiId() == RX_16_RESPONSE)  {
Serial.println("64 or 16");
if (xbee.getResponse().getApiId() == RX_16_RESPONSE)  {
Serial.println("16");
xbee.getResponse().getRx16Response(rx16);
// xbeeOption = rx16.getOption();
//Serial.print("xbeeOption: "); Serial.println(xbeeOption);
//xbeeData = rx16.getData(0);
//Serial.print("xbeeData: "); Serial.println(xbeeData);
xbeeRssi = rx16.getRssi();
Serial.print("xbeeRssi: "); Serial.println(xbeeRssi);
}
else  {
Serial.println("64");
xbee.getResponse().getRx64Response(rx64);
//xbeeOption = rx64.getOption();
//Serial.print("xbeeOption: "); Serial.println(xbeeOption);
//xbeeData = rx64.getData(0);
//Serial.print("xbeeData: "); Serial.println(xbeeData);
xbeeRssi = rx64.getRssi();
Serial.print("xbeeRssi: "); Serial.println(xbeeRssi);
}
}
}

如果使用series2模块,则只有使用硬件pwm信号的方法:为了更新RSSI pwm信号,它需要接收API数据包。此外,对于系列2的Xbee,这只适用于数据包的最后一跳,因此从最后一个路由器到目的地。您需要使用XBee rssi引脚和一些编码,具体取决于您的设备
距离的rssi不是很可靠,在发送数据包时,您可能每10到15米就会看到一次变化。因此,仅仅在你的工作场所移动Xbee并不会改变你的价值观
编辑:当使用系列2模块时,有以下可能性:将xbee(6(的rssi引脚连接到Arduino pwm引脚(如10(,并测量输入信号,然后将其映射到质量或/和距离范围。因此,编写您自己的rssi函数。通常的xbee-lib只支持series1模块。

最新更新