Arduino通过XBee发送十六进制值
我正试图通过XBee将十六进制值从Arduino发送到digi的XBee程序XCTU。但是我有一些无法发送的字节问题 无法发送的字节列表: 0x11 0x13 0x7D 0x7E 0x81 0xEC 0xEE 如果我使用任何其他字节,我可以在XCTU控制台窗口中看到它,并得到Arduino的响应 我在两个Xbee上都启用了API模式(AP=1)。我正在使用从Arduino网站()链接的XBee库 我的代码如下所示:Arduino通过XBee发送十六进制值,arduino,xbee,Arduino,Xbee,我正试图通过XBee将十六进制值从Arduino发送到digi的XBee程序XCTU。但是我有一些无法发送的字节问题 无法发送的字节列表: 0x11 0x13 0x7D 0x7E 0x81 0xEC 0xEE 如果我使用任何其他字节,我可以在XCTU控制台窗口中看到它,并得到Arduino的响应 我在两个Xbee上都启用了API模式(AP=1)。我正在使用从Arduino网站()链接的XBee库 我的代码如下所示: #define XBEE_RX_PIN 8 #define XBEE_TX_PI
#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);
}
#定义XBEE_RX_引脚8
#定义XBEE_TX_引脚9
软件串行xbeeSerial(XBEE_RX_引脚、XBEE_TX_引脚);
无效设置()
{
Serial.begin(9600);
xbeeSerial.begin(9600);
开始(xbeeSerial);
}
void循环()
{
Serial.println(“发送下一个255消息:”);
uint8_t testMsg[1]={0x0};
对于(uint8_t i=0;i
AP=1时,无法发送某些特殊字节,如:
- 0x7E(帧的开始)
- 0x11/0x13(XOn XOff)
如XBee文档(XBee®XBee PRO®ZB RF模块手册90000976_W.pdf,起始页112)所述,您应使用AP=2模式,该模式允许您通过转义来传输这些特殊字节:
转义字符。
发送或接收UART数据帧时,必须指定特定的数据值
已转义(标记),因此它们不会干扰数据帧排序。
要转义干扰数据字节,请插入0x7D,并在其后面加上要转义的字节与0x20异或。
请注意,如果未转义,0x11和0x13将按原样发送。
需要转义的数据字节:
-0x7E–帧分隔符
-0x7D–转义
-0x11–XON
-0x13–XOFF
示例-原始UART数据帧(转义干扰字节之前):
-0x7E 0x00 0x02 0x230x110xCB
0x11需要转义,这将导致以下帧:
-0x7E 0x00 0x02 0x230x7D 0x310xCB
注意,在上述示例中,原始数据的长度(不包括校验和)为0x0002,非转义数据的校验和(不包括帧分隔符和长度)计算为:
0xFF-(0x23+0x11)=(0xFF-0x34)=0xCB
希望这有帮助