我正在尝试通过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);
}
答案 0 :(得分:2)
如果AP = 1,则无法发送一些特殊字节,如:
如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。
希望这有帮助