如何以API模式读取XBee RSSI?

问题描述 投票:0回答:1

我正在尝试在接收端以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。?

arduino xbee
1个回答
0
投票

希望此答案对您和其他人有帮助。假设您正在使用以下库: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模块。

© www.soinside.com 2019 - 2024. All rights reserved.