nrf24l01 传输问题

nrf24l01 Transmission problems

当我试图找出我的问题时,我已经阅读了很多关于 nrf24l01 和 Arduinos 的问题和答案。我相当确定还没有人遇到过这个问题,但我可能是错的。这是我的问题:

如果我将发送代码上传到 UNO 并将接收代码上传到 NANO,我会不断收到错误消息。什么都不会被 t运行 所迷惑。但是,如果我做相反的事情,我将发送代码上传到 NANO 并将接收代码上传到 UNO,一切都很好......几天来我一直在摸不着头脑,我想听听其他人的意见,因为我 运行 没有想法...

我尝试了不同的 nrf24l01 模块(我得到了大约 20 个),看是否有一个被炸了。还是一样。试过换不同的别针……还是一样。更改了代码以使其越来越简单以缩小范围..仍然是同一件事。也许扫描比发送包裹需要更多的功率,而 Nano 的 3.3v 还不够吗?我很怀疑..

我真的很好奇你们是否能解决这个问题。我想我提供了很多信息。如果您需要更多,请随时询问。

这是我的设置:

Arduino 纳米:

这里是 printDetails() 函数的日志:

STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0

RX_ADDR_P0-1 = 0xb01dfacece 0xb01dfacece

RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6

TX_ADDR = 0xb01dfacece

RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00

EN_AA = 0x3f

EN_RXADDR = 0x02

RF_CH = 0x73

RF_SETUP = 0x07

CONFIG = 0x0e

DYNPD/FEATURE = 0x00 0x00

Data Rate = 1MBPS

Model = nRF24L01+

CRC Length = 16 bits

PA Power = PA_MAX

Arduino Uno:

STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0

RX_ADDR_P0-1 = 0xb01dfacece 0xb01dfacece

RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6

TX_ADDR = 0xb01dfacece

RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00

EN_AA = 0x3f

EN_RXADDR = 0x02

RF_CH = 0x73

RF_SETUP = 0x07

CONFIG = 0x0e

DYNPD/FEATURE = 0x00 0x00

Data Rate = 1MBPS

Model = nRF24L01+

CRC Length = 16 bits

PA Power = PA_MAX

接收者代码如下:

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

RF24 myRadio (7,8);
const uint64_t pipe = 0xB01DFACECEL;
struct package
{
  int id=0;
  int code = 0;
  char text[100] = "";
};

typedef struct package Package;
Package data;

void setup() {
 Serial.begin(115200);
 printf_begin();
 delay(1000);

 myRadio.begin();
 myRadio.setChannel(115);
 myRadio.openReadingPipe(1,pipe);
 myRadio.printDetails();
 myRadio.startListening();

 Serial.println("Set-Up Done");
 delay(1000);
}

void loop() {
  if(myRadio.available())
 {
  while(myRadio.available())
   {
     myRadio.read(&data, sizeof(data));
     Serial.print("\nPackage");
     Serial.println(data.id);
     Serial.println(data.code);
     Serial.println(data.text);
   }
 }
 delay(500);
}    

发送代码如下:

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

RF24 myRadio (7,8);
const uint64_t pipe = 0xB01DFACECEL;

struct package
{
  int id=1;
  int code = 2;
  char text[100] = "text";
};

typedef struct package Package;
Package data;

void setup() {
 Serial.begin(9600);
 printf_begin();
 delay(1000);

 myRadio.begin();
 myRadio.setChannel(115);
 myRadio.openWritingPipe(pipe);
 myRadio.setRetries(15,15);
 myRadio.printDetails();
 myRadio.stopListening();

 Serial.println("Set-Up Done");
 delay(1000);
}

void loop() {
   if(!myRadio.write(&data, sizeof(data)))
   {
    Serial.println("error!!");
    myRadio.printDetails();
   }
   Serial.print("\nPackage");
   Serial.println(data.id);
   Serial.println(data.code);
   Serial.println(data.text);
   data.id += 1;
   data.code += 1;
   delay(3000);
}

尝试在每个 nRF24L01 模块的 +3.3v 和 gnd 之间放置一个 10uf 电容器。

这些模块需要电容器提供的大量发送功率。希望对你有用。

尝试在每个 nRF24L01 模块的 +3.3v 和 gnd 之间放置一个 10uf 电容器。

如果那不起作用,运行 nrf24l01 关闭自己的电源,3.3v,但已经看到这些峰值为 1A!发送突发。而可怜的Nano的3.3V来自FT232芯片,只有50mA可用。