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可用。
当我试图找出我的问题时,我已经阅读了很多关于 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可用。