Arduino通过XBee发送HEX值

时间:2016-08-28 17:01:04

标签: arduino xbee

我正在尝试通过XBee从Arduino向Digi的Xbee程序XCTU发送HEX值。但我有些问题,我无法发送一些字节

我无法发送的字节列表: 为0x11 0×13 0x7D 的0x7E 0×81 0xEC 0xEE

如果我使用任何其他字节,我可以在XCTU控制台窗口中看到它,我得到一个回复​​给Arduino

我已经在两个Xbee上启用了API模式(AP = 1)。我使用从Arduino网站链接的XBee lib(https://www.arduino.cc/en/Reference/Libraries) 我的代码如下所示:

#define XBEE_RX_PIN 8
#define XBEE_TX_PIN 9
SoftwareSerial xbeeSerial(XBEE_RX_PIN, XBEE_TX_PIN);

void setup()
{
    Serial.begin(9600);
    xbeeSerial.begin(9600);
    xbee.begin(xbeeSerial);

}

void loop()
{
    Serial.println("Send next 255 msg:");
    uint8_t testMsg[1] = { 0x0 };
    for (uint8_t i = 0; i <= 0xFF; i++)
    {
        test2[0] = i;
        Tx16Request testTx = Tx16Request(0xFFFF, testMsg, sizeof(testMsg));

        xbee.send(testTx);
        Serial.print("Message send: ");
        Serial.println(test2[0], HEX);

        if (xbee.readPacket(5000)) {      
            Serial.println("SUCCESS");
        }
        else if (xbee.getResponse().isError()) {
            Serial.println("isError");
        }
        else {
            Serial.println("No Response");
        }
    }
    Serial.println("");
    delay(3000);
}

1 个答案:

答案 0 :(得分:2)


如果AP = 1,则无法发送一些特殊字节,如:

  • 0x7E(帧开始)
  • 0x11 / 0x13(XOn XOff)
  • ...

如XBee文档(XBee®XBee-PRO®ZBRF模块手册90000976_W.pdf,从第112页开始)中所述,您应该使用AP = 2模式,它允许您通过转义它们来传输这些特殊字节:

  

逃脱角色。
  发送或接收UART数据帧时,必须具有特定的数据值   转义(标记),以便它们不会干扰数据帧排序   要转义干扰数据字节,请插入0x7D并跟随要转义的字节与0x20进行异或运算。
  请注意,如果没有转义,则按原样发送0x11和0x13   
  需要转义的数据字节:
   - 0x7E - 帧分隔符
   - 0x7D - 逃生
   - 0x11 - XON
   - 0x13 - XOFF
  
  示例 - 原始UART数据帧(在转义干扰字节之前):
   - 0x7E 0x00 0x02 0x23 0x11 0xCB
  需要转义0x11,这会产生以下帧:
   - 0x7E 0x00 0x02 0x23 0x7D 0x31 0xCB
  注意在上面的示例中,原始数据的长度(不包括校验和)是0x0002,未转义数据的校验和(不包括帧分隔符和长度)计算如下:
  0xFF - (0x23 + 0x11)=(0xFF - 0x34)= 0xCB。

希望这有帮助