我们如何测量nrf24l01模块在Arduino中的数据传输速率?

我们如何测量nrf24l01模块在Arduino中的数据传输速率?,arduino,wireless,telecommunication,Arduino,Wireless,Telecommunication,这些Arduino代码是为nRF24L01模块开发的。它是一个射频模块,提供两点之间的无线通信。我的目的是测量这两点之间的数据传输速率 这是变送器代码的示例: #include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN const byte address[6] = "00001"; void setup() { radio.begin();

这些Arduino代码是为nRF24L01模块开发的。它是一个射频模块,提供两点之间的无线通信。我的目的是测量这两点之间的数据传输速率

这是变送器代码的示例:

#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));      
}
#包括
#包括
#包括
RF24无线电(7,8);//行政长官
常量字节地址[6]=“00001”;
无效设置(){
收音机。开始();
radio.openWritingPipe(地址);
无线电设置电平(RF24\u PA\u MIN);
停止收听;
}
void循环(){
const char text[]=“你好,世界”;
radio.write(&text,sizeof(text));
}
这段代码基本上是通过频道发送一个字符串“Hello World”。首先,我调用一些与模块相关的库。然后定义模块使用的pin码。然后我给模块命名。然后,设置模块的一些属性,如侦听模式和功率级别。最后通过循环发送消息。下面还提供了接收器代码:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(7,8);

const byte address[6] = "00001";
void setup() {


  radio.begin();
  radio.openReadingPipe(0,address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
  Serial.begin(9600);
  // put your setup code here, to run once:

}

void loop() {

  if (radio.available()){

    char text[32] = "";
    radio.read(&text,sizeof(text));
    Serial.println(text);

  }

  // put your main code here, to run repeatedly:
}
#包括
#包括
#包括
RF24无线电(7,8);
常量字节地址[6]=“00001”;
无效设置(){
收音机。开始();
radio.openReadingPipe(0,地址);
无线电设置电平(RF24\u PA\u MIN);
收音机;
Serial.begin(9600);
//将安装代码放在此处,以便运行一次:
}
void循环(){
if(radio.available()){
字符文本[32]=“”;
radio.read(&text,sizeof(text));
Serial.println(文本);
}
//将主代码放在此处,以便重复运行:
}
接收机逻辑与发射机相同


总之,问题是我们如何测量这种无线通信的数据速率(以每秒比特数计)

测量两台设备/计算机之间的比特率很棘手,因为您要么需要同步时钟,要么测量往返行程,要么测量或估计进行“反射”的节点上的周转时间

如果你可以设置一个网络嗅探器或在路由器上进行测量,那么你可能会发现更容易得到一些数据

例如,使用WireShark(),您可以在“统计信息”->“端点”中查看所有信息,然后IPV4或IPV6选项卡应显示设备之间的所有通信量,或者更准确地显示这些IP接口之间的所有通信量,因为设备可能有多个端口。其他工具包括nTop()。路由器供应商通常还包括测量此类信息的工具——例如,TTCP实用程序()通常在Cisco设备上可用


同样值得注意的是,比特率的测量只会告诉你测量时的情况,而不会告诉你下次尝试时的情况,因为很多因素都会影响它,包括网络流量、节点负载等。

测量两台设备/计算机之间的比特率很棘手,因为你要么需要同步时钟,或者测量往返行程,并测量或估计进行“反射”的节点上的周转时间

如果你可以设置一个网络嗅探器或在路由器上进行测量,那么你可能会发现更容易得到一些数据

例如,使用WireShark(),您可以在“统计信息”->“端点”中查看所有信息,然后IPV4或IPV6选项卡应显示设备之间的所有通信量,或者更准确地显示这些IP接口之间的所有通信量,因为设备可能有多个端口。其他工具包括nTop()。路由器供应商通常还包括测量此类信息的工具——例如,TTCP实用程序()通常在Cisco设备上可用


同样值得注意的是,比特率的测量只会告诉你测量时的比特率,而不会告诉你下次尝试时的比特率,因为很多因素都会影响它,包括网络流量、节点负载等。

主要变量是你使用的是1mb/s还是2mb/s。您可以使用NRF24L01 v2规范第38页和第39页上的公式接近,但是,最好的测量方法是启用自动确认。正如我提到的Mick,如果你不能同步两个时钟(Tx和Rx设备),你能做的最好的事情就是使用自动确认让Rx发送数据返回。由于切换时间固定为130us,IRQ的时间为6ns或8ns,因此您可以在发送消息之前将pin设置为高,并在收到ACK IRQ后将其拉低。这将为您提供发送和确认所需的时间(再加上130U,让每个设备更改角色)。

主要变量是您使用的是1mb/s还是2mb/s。您可以使用NRF24L01 v2规范第38页和第39页上的公式接近,但是,最好的测量方法是启用自动确认。正如我提到的Mick,如果你不能同步两个时钟(Tx和Rx设备),你能做的最好的事情就是使用自动确认让Rx发送数据返回。由于切换时间固定为130us,IRQ的时间为6ns或8ns,因此您可以在发送消息之前将pin设置为高,并在收到ACK IRQ后将其拉低。这将为您提供发送和确认所需的时间(再加上130U,让每个设备更改角色)