为nRF24L01模块开发的这些Arduino代码。它是一个RF模块,提供2点之间的无线通信。我的目的是测量这两点之间的数据传输速率。
这是发射机代码的例子:
<link href="{{asset('css/style.css')}}" rel="stylesheet" type="text/css"/>
此代码基本上发送一个字符串,即&#34; Hello World&#34;通过渠道。首先,我要调用一些与模块相关的库。比我定义模块使用的引脚号。比我命名模块。之后,一些属性,如模块的聆听模式和功率级别设置。最后,消息通过循环发送。接收器代码也在下面提供:
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
const char text[] = "Hello World";
radio.write(&text, sizeof(text));
}
接收器逻辑与发送器相同。
总而言之,问题是我们如何才能将数据速率测量为此无线通信的每秒位数?
答案 0 :(得分:1)
测量两台设备/计算机之间的比特率非常棘手,因为您需要具有同步时钟,或者测量往返行程并测量或估计执行“反射”的节点上的周转时间。
如果您可以设置网络嗅探器或在路由器上进行测量,那么您可能会发现更容易获得一些数据。
例如,使用WireShark(https://www.wireshark.org),您可以在&#34;统计&#34;中看到整个信息。 - &GT; &#34;终点&#34;然后IPV4或IPV6选项卡应该显示设备之间的所有流量,或者更准确地显示这些IP接口之间的流量,因为设备可能有多个端口。其他工具包括nTop(https://www.ntop.org/products/netflow/nprobe/)。路由器供应商通常还包括用于测量此类信息的工具 - 例如,TTCP实用程序(https://en.wikipedia.org/wiki/Ttcp)通常可在Cisco设备上使用。
还值得注意的是,比特率的测量仅告诉您在测量它时的情况,而不是下次尝试时的情况,因为许多因素(包括网络流量,节点上的负载等)都会影响它。
答案 1 :(得分:1)
主要变量是您使用1mb / s还是2mb / s。您可以使用NRF24L01 v2规范第38页和第39页上的公式来结束,但是,测量它的最佳方法是启用auto-ack。正如我所提到的,如果你不能同步两个时钟(Tx和Rx设备),你可以做的最好是使用auto ack让Rx发回数据。由于切换时间固定为130us且IRQ的时间为6ns或8ns,因此可以在发送消息之前将引脚设置为高电平,并在获得ACK IRQ后将其拉低。这将为您提供发送所需的时间和ack(再次使用额外的130us来让每个设备更改角色)。