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

Posted

技术标签:

【中文标题】如何使用arduino uno在一个数据包传输中向xbee路由器发送多个命令【英文标题】:How to send multiple commands to xbee router in one data packet transmission using arduino uno 【发布时间】:2019-10-13 11:25:57 【问题描述】:

我想知道我是否可以通过来自协调器的一个命令远程控制 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));

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

【问题讨论】:

【参考方案1】:

从Remote AT Command Frame 的 API 参考中可以看出,命令 (D0) 之后的字节是该命令的值。 XBee 模块没有针对多个 AT 命令的帧类型,但您可以发送一系列排队的命令,并在您设置 options 字段的“Apply Changes”位时将它们全部应用。

因此,如果您在 AT 命令之前发送 0x02,则您将发送 0x00 以获取要排队的命令,并且仅在最后一个命令上发送 0x02 以使其应用所有立即更改。

另外,考虑编写一些例程来简化帧发送。例如,一个单独的函数接收一个长度为缓冲区的指针,它可以自动发送帧的开始 (0x7E 0x00 <length>) 和计算的校验和字节在帧的末尾。

【讨论】:

太棒了,试过了,这正是我想要的。谢谢。 很高兴它成功了!请将此答案标记为“已接受”,因为它对您有用,这样在 SO 上搜索的其他人就会知道这是一个已回答的问题。 已将其标记为已回答,但由于我自己没有投票,因此无法投票。嘘。

以上是关于如何使用arduino uno在一个数据包传输中向xbee路由器发送多个命令的主要内容,如果未能解决你的问题,请参考以下文章

arduino uno 如何对模拟口得到的数据进行处理得到平滑的曲线,用到相关的库也行,想要详细的程序。

ardiuno怎么将蓝牙串口中调试的数据提取出来

如何给Arduino UNO下载Bootloader?

如何使用Arduino UNO开发板编程ATtiny85

如何在我的 Arduino Uno (Mac OSX) 上保持串行地址一致?

Arduino UNO驱动合宙1.8‘TFT SPI屏幕示例演示(含资料包)