nrf24l01传输问题

时间:2017-03-15 03:51:08

标签: arduino arduino-uno

在我试图找出问题时,我一直在阅读有关nrf24l01和Arduinos的很多问题和答案。我很确定没有人有这个问题,但我可能错了。这是我的问题:

如果我将发送代码上传到 UNO 而接收代码上传到 NANO ,我会不断收到错误消息。没有任何东西传播。但是,如果我执行相反操作并将发送代码上传到 NANO 并将接收代码上传到 UNO ,一切都很好......我一直在抓我的在没有任何想法的情况下连续几天,我想得到其他人的意见,因为我没有想法......

我尝试了不同的nrf24l01模块(我大约20个),看看是否有人炒了。还是一样的。尝试换到不同的针脚......仍然是一样的。改变了代码,使其更简单,更简单,缩小范围......仍然是一样的。也许它需要更多的扫描能力而不是发送一个包而且Nano的3.3v还不够?我非常怀疑......

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

这是我的设置:

Arduino Nano:

Wiring

以下是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:

Wiring

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

这是Receiver代码:

#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);
}

2 个答案:

答案 0 :(得分:0)

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

这些模块需要大量的发射功率,电容器可以帮助它们。我希望它适合你。

答案 1 :(得分:0)

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

如果这样做不起作用,请将nrf24l01从自己的电源上运行,3.3v,但已经看到这些峰值为1A!发送爆发。可怜的Nano 3.3V来自FT232芯片,只有50mA可用。