如何使用arduino uno在一个数据包传输中向xbee路由器发送多个命令

How to send multiple commands to xbee router in one data packet transmission using arduino uno

我想知道我是否可以通过协调器的一个命令远程控制 xbee 上的多个 IO 引脚。

我可以轻松地将一个 IO 引脚发送高电平或低电平,如下所示

xB.write((byte)0x7E);
xB.write((byte)0x0);
xB.write((byte)0x10);
xB.write((byte)0x17);
xB.write((byte)0x0);  // Frame ID
xB.write((byte)0x00); // first byte
xB.write((byte)0x13); // 2
xB.write((byte)0xA2); // 3
xB.write((byte)0x00); // 4
xB.write(addy5); // 5
xB.write(addy6); // 6
xB.write(addy7); // 7
xB.write(addy8);// 8
xB.write((byte)0xFF);
xB.write((byte)0xFE);
xB.write((byte)0x02);
xB.write('D');
xB.write('0');
xB.write(val);
long sum = 0x17 + 0x13 + 0xA2 + addy5 + addy6 + addy7 + addy8 + 0xFF + 0xFE + 0x02 + 'D' + '0' + val;
xB.write((byte)0xFF - (sum & 0xFF));

但我似乎不能像这样一次发送多个数字引脚更改。

xB.write((byte)0x7E);
xB.write((byte)0x0);
xB.write((byte)0x1F);
xB.write((byte)0x17);
xB.write((byte)0x0);  // Frame ID
xB.write((byte)0x00); // first byte
xB.write((byte)0x13); // 2
xB.write((byte)0xA2); // 3
xB.write((byte)0x00); // 4
xB.write(addy5); // 5
xB.write(addy6); // 6
xB.write(addy7); // 7
xB.write(addy8);// 8
xB.write((byte)0xFF); // "10"67
xB.write((byte)0xFE);// 10"66"
xB.write((byte)0x02);

xB.write('D');
xB.write('1');
xB.write(bin[0]);

xB.write('D');
xB.write('0');
xB.write(bin[1]);

xB.write('D');
xB.write('2');
xB.write(bin[2]);

xB.write('D');
xB.write('3');
xB.write(bin[3]);

xB.write('D');
xB.write('5');
xB.write(bin[4]);

xB.write('D');
xB.write('4');
xB.write(bin[5]);

long sum = 0x17 + 0x13 + 0xA2 + addy5 + addy6 + addy7 + addy8 + 0xFF + 0xFE + 0x02 + 'D' + '1' + bin[0] + 'D' + '0' + bin[1] + 'D' + '2' + bin[2] + 'D' + '3' + bin[3] + 'D' + '5' + bin[4] + 'D' + '4' + bin[5];
xB.write((byte)0xFF - (sum & 0xFF));

我可能做错了什么?谢谢!

正如您从 Remote AT Command Frame 的 API 参考中看到的那样,命令 (D0) 之后的字节是该命令的值。 XBee 模块没有用于多个 AT 命令的帧类型,但您可以发送一系列排队的命令,并在设置 options 字段的 "Apply Changes" 位时立即应用它们.

因此,在 AT 命令之前发送 0x02 的地方,您将为要排队的命令发送 0x00,并且只发送 0x02让它立即应用所有更改的最后一个命令。

此外,考虑编写一些例程来简化您的帧发送。例如,采用指向具有长度的缓冲区的指针的单个函数可以自动发送帧的开头 (0x7E 0x00 <length>) 和帧末尾计算的校验和字节。