我正在尝试在接收端以API模式测试XBee RSSI,如何在arduino中检索接收无线电的RSSI值。我将两个XBee配置为API-2模式,并通过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不会改变价值。编辑:使用Series 2模块时,存在以下可能性:将xbee的rssi引脚(6)连接到Arduino pwm引脚(例如10)并测量输入信号,然后可以将其映射到质量或/和距离范围。因此,编写您自己的rssi函数。通常的xbee库仅支持series1模块。