PROBLEMA COMUNICACION ENTRE 2 NRF24L01

Estimados buen dia!!
Les comento antes que nada que abro este topic ya que me canse de buscar la solucion al problema que tengo:
Tengos 2 arduinos nanos con sus correspondiente NRF24L01 para cumplir el rol de Transmisor/Receptor.
La conexión de NRF con Arduino Nano es el siguiente:
NRF --> Arduino Nano:
CE --> 7
CSN --> 8
MOSI --> 11
MISO --> 12
SCK --> 13
La libreria la descargue de aqui: https://github.com/maniacbug/RF24
El codigo emisor es:

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

int msg[1];
RF24 radio(7,8);
const uint64_t pipe = 0xE8E8F0F0E1LL;


void setup() {

  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(pipe);
  }


void loop() {

for( int x=0;x<255;x++)
{
  msg[0]=x;
  radio.write(msg,1);
  Serial.println(x);
  }

}

Y el codigo del receptor es:

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

int msg[1];

RF24 radio(7,8);
const uint64_t pipe = 0xE8E8F0F0E1LL;

void setup(void){
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(1,pipe);
  radio.startListening();
}
 
void loop(void){
  if (radio.available())
  {
 
    radio.read(msg, 1); 
    Serial.println(msg[0]);
  }
}

El problema que estoy teniendo es que no recibo lo que me envia el emisor:
Al receptor solo llegan un sin fin de "0" y de vez en cuando valores de "255" , "127". Pero en su mayoria valores de 0.
Alguien me puede ayudar a encontrar la falla por favor?
Gracias!!!

Probaste los ejemplos sugeridos?

surbyte:
Probaste los ejemplos sugeridos?

Hola Admin!!! :slight_smile:

De los Example que me da la libreria no se como seleccionar un ejemplo que sea Tx y otro que sea Rx.

Es correcto?

Los ejemplos son duales.
Yo usaría las librerías de Tmrh20 que son basadas en Maniac pero mas actuales y estables.

Ya que por lo visto usas 7 y 8 para CE y CSN no tienes nada que cambiar
El ejemplo GettingStarter.pde ya tiene 4 años y eso nunca es bueno en este mundo, si mal recuerdo presionando T cambias o switcheas d emodo transmisor a Receptor.

Sigo hablando de Maniac
en el ejemplo citado
si estas en modo pong lo usas asi, sino debes descomentar esto que se ve aca y cambiar antes esta línea

  //if ( role == role_ping_out )   
  {
    //radio.openWritingPipe(pipes[0]);
    radio.openReadingPipe(1,pipes[1]);
  }
  //else
  {
    //radio.openWritingPipe(pipes[1]);
    //radio.openReadingPipe(1,pipes[0]);
  }

y para ping cambias esta línea

// The role of the current running sketch
role_e role = role_ping_out;

y descomentas.

 if ( role == role_ping_out )    {
    radio.openWritingPipe(pipes[0]);
    radio.openReadingPipe(1,pipes[1]);
  }
  else  {
    radio.openWritingPipe(pipes[1]);
    radio.openReadingPipe(1,pipes[0]);
  }

Gracias Admin!!!
Para poder repasar en limpio las cosas voy a borrar todas las librerias de NRF24 y te voy a pedir por favor que me envies el link para poder descargar la libreria TMRH20 , las cuales me indicas que son basadas en Maniac pero mas actuales y estables.

Una vez que tenga esa libreria espero q me puedas indicar que example aplicar.

Muchisimas Gracias!!

Hasta q no lo solucione no paro!!! jaja

google: Arduino tmrh20 library
tal como las Normas del Foro que supongo has leído lo indica

De seguro las leí! Me marea el tema de que haya tantas librerias con distintos links de descarga. Entonces para poder unificar queria saber un unico link que use las mismas librerias que el Admin.
Te comento los pasos que hice:
GitHub - nRF24/RF24: OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices
Por las dudas antes de mostrar el codigo que arme de Emisor/Receptor te muestro el PrintDetails:

STATUS = 0xff RX_DR=1 TX_DS=1 MAX_RT=1 RX_P_NO=7 TX_FULL=1
RX_ADDR_P0-1 = 0xffffffffff 0xffffffffff
RX_ADDR_P2-5 = 0xff 0xff 0xff 0xff
TX_ADDR = 0xffffffffff
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0xff
EN_RXADDR = 0x1f
RF_CH = 0x00
RF_SETUP = 0x00
CONFIG = 0xff
DYNPD/FEATURE = 0xff 0xff
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = 16 bits
PA Power = PA_MAX

Bien!! Ahora vamos por el codigo que modifique:
Según tus comentarios de Ping y Pong,en principio yo solo necesito que sea unidireccional (que el emisor envie sin esperar respuesta del receptor y que el receptor reciba sin enviar respuesta al emisor):
Te muestro las lineas de codigo de emisor completas:

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


RF24 radio(7,8);


byte addresses[][6] = {"1Node","2Node"};

void setup() {
  
  Serial.begin(115200);
    
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  
  radio.openWritingPipe(addresses[1]);

}

void loop() 


{
  
     Serial.println(F("sending"));

     unsigned long number = 6;                              
     if (!radio.write( &number, sizeof(unsigned long) ))  // envio el numero 6
       Serial.println(F("failed"));
       
    delay(1000);
 
}

Ahora muestro el del receptor:

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


RF24 radio(7,8);
/**********************************************************/

byte addresses[][6] = {"1Node","2Node"};

// Used to control whether this node is sending or receiving
bool role = 0;

void setup() {
  Serial.begin(115200);
  radio.begin();
  radio.setPALevel(RF24_PA_LOW);
  radio.openReadingPipe(1,addresses[1]);
  radio.startListening();
}

void loop() {
  
 
unsigned long got_number;
    
    if( radio.available()){
                                                                    
      while (radio.available()) {                                   
        radio.read( &got_number, sizeof(unsigned long) );      
      }
     
      Serial.println(got_number);  
   }



}

Como conclusion de esto sigo sin recibir el numero 6!!
En el receptor recibo una secuencia de muchos "0" y de vez en cuando un numero aleatorio de muchas cifras:

Ejemplo:

0
0
0
0
0
4294967295
0
0
0
0
0
4294967295
4286578559
4294967295
0
0
0
0

Agradeceria que partiendo del codigo propuesto me induzcas a la solucion!
Muchas Gracias por el tiempo perdido, el cual es muy valioso para mi.
Saludos!

Agradeceria que partiendo del codigo propuesto me induzcas a la solucion!
Muchas Gracias por el tiempo perdido, el cual es muy valioso para mi.

Para nosotros el tiempo es gratis? Bueno me reservo el comentario ya que tu comentario ha sido poco feliz a mi modo de entender.

Estoy trabajando con alguien a distancia y tiene un problema similar al tuyo. Los nRF24 se comportan de modo extraño.
Para empezar, el printdetails esta mal, porque responde con valores nulos cuando debería hacerlo con valores hexadecimales asignados para toda su configuración.
Algo esta mal cableado asi que repasemos las conexiones.
Busca tu multímetro y con todo apagado, prueba continuidad pin a pin entre Arduino y el RF24.
No me digas que ya lo has hecho porque esto

STATUS = 0xff RX_DR=1 TX_DS=1 MAX_RT=1 RX_P_NO=7 TX_FULL=1
RX_ADDR_P0-1 = 0xffffffffff 0xffffffffff
RX_ADDR_P2-5 = 0xff 0xff 0xff 0xff
TX_ADDR = 0xffffffffff
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0xff
EN_RXADDR = 0x1f
RF_CH = 0x00
RF_SETUP = 0x00
CONFIG = 0xff
DYNPD/FEATURE = 0xff 0xff
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = 16 bits
PA Power = PA_MAX

dice que algo no va bien.
Si las conexiones estan bien coloca un capacitor electrolítico de 10uF o uno de 47uF en ese margen y la tensión mayor a 3.3V que todas lo serán. Tal vez tengas ruido aunque lo dudo pero probemos.
Necesito el printdetails del otro dispositivo. Solo mostraste uno

Como bien dice Surbyte, usando NRF24L01 es imprescindible colocar un condensador, ya sea cerámico o electrolítico. Dependiendo del modelo de NRF24L01 que tengas tendrá que tener un valor u otro, si es amplificado coloca uno de unos 47uF a 100uF mientras que si es el común no amplificado te vale con poner uno de 10uF.

Nooooo totalmente lo contrario!!! Es muy valioso que usen el tiempo de ustedes para solucionar un problema mio.

Bueno les comento lo que hice:

1- Probé continuidad de ambas dispositivos y esta todo OK.
2- Les paso el Print details del receptor y emisor antes de conectar el capacitor:

Receptor:

RF24/examples/GettingStarted
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 = 0x0000000000 0x0000000000
RX_ADDR_P2-5 = 0x7f 0xff 0x7f 0xff
TX_ADDR = 0x0000000000
RX_PW_P0-6 = 0xff 0xff 0xff 0xff 0xff 0xff
EN_AA = 0xff
EN_RXADDR = 0xff
RF_CH = 0xff
RF_SETUP = 0x00
CONFIG = 0x00
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = 16 bits
PA Power = PA_MIN

Emisor:

RF24/examples/GettingStarted
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 = 0x0000000000 0x0000000000
RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00
TX_ADDR = 0x0000000000
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x00
RF_CH = 0x00
RF_SETUP = 0x00
CONFIG = 0x00
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = Disabled
PA Power = PA_MIN

3- Conecto un capacitor electrolitico uniendo el GND del NRF con el negativo del Capa y los 3v3 con el positivo del capacitor.

Luego de esto sigo teniendo el mismo problema:

Emisor:

RF24/examples/GettingStarted
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 = 0x0000000000 0x0000000000
RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00
TX_ADDR = 0x0000000000
RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x00
RF_CH = 0x00
RF_SETUP = 0x00
CONFIG = 0x00
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = Disabled
PA Power = PA_MIN

Receptor:

RF24/examples/GettingStarted
STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0
RX_ADDR_P0-1 = 0x0000000000 0x0000000000
RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00
TX_ADDR = 0x0000000000
RX_PW_P0-6 = 0xff 0x7f 0xff 0x00 0x00 0x00
EN_AA = 0x00
EN_RXADDR = 0x00
RF_CH = 0x00
RF_SETUP = 0xff
CONFIG = 0xff
DYNPD/FEATURE = 0xff 0xff
Data Rate = 1MBPS
Model = nRF24L01
CRC Length = 16 bits
PA Power = PA_MAX

4- El modelo del NRF que tengo (para saber si es amplificado o no) es este:

http://articulo.mercadolibre.com.ar/MLA-623380396-modulo-transceptor-rf-nrf24l01-24ghz-arduino-pic-avr-atmel-_JM

5- Para aportar data para ayudarme a encontrar la falla les comento que mas alla de recibir basura en la recepcion , en un momento dejo de recibir datos (como si el sistema quedara colgado). Ahora cuando levanto con la mano el NRF comienza a funcionar de nuevo (aunque sigue recibiendo basura).

Agradezco su ayuda para solucionar la falla!! Saludos

Me falto aclarar que el Capacitor que coloque fue de 47 uF.

Saludos

Tienes algo mal en ambos extremos emisor/receptor.
Verifica todo.. 3.3V medidos entre gnd y 3.3V del nRF24L01 y luego cada conexión al arduino.
El software funciona y te lo aseguro porque lo uso todos los días.
Son conexiones y si tienes protoboard verifica cada conexión en el proto

surbyte:
Tienes algo mal en ambos extremos emisor/receptor.
Verifica todo.. 3.3V medidos entre gnd y 3.3V del nRF24L01 y luego cada conexión al arduino.
El software funciona y te lo aseguro porque lo uso todos los días.
Son conexiones y si tienes protoboard verifica cada conexión en el proto

Me da verguenza decirlo.... pero tenia los pines CE y CSN invertidos :frowning:

Ahora me da valores racionales:

RF24/examples/GettingStarted
STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1 = 0xe7e7e7e7e7 0x65646f4e32
RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6
TX_ADDR = 0xe7e7e7e7e7
RX_PW_P0-6 = 0x00 0x20 0x00 0x00 0x00 0x00
EN_AA = 0x3f
EN_RXADDR = 0x02
RF_CH = 0x4c
RF_SETUP = 0x03
CONFIG = 0x0f
DYNPD/FEATURE = 0x00 0x00
Data Rate = 1MBPS
Model = nRF24L01+
CRC Length = 16 bits
PA Power = PA_LOW

Te das cuenta. Estoy justo justo trabajando con ellos y el único problema que presentan es la necesidad del capacitor adecuado y luego funcionan 10 puntos.
Me alegro que lo resolvieras.
Gran parte de las veces el problema es de cableado y lo peor es que uno al darlo vuelta se confunde.
Yo por eso recomiendo usar el tester/multímetro y chequear conexiones del lado que estamos mirando o sea del lado componentes, no del lado soldadura.
Si no tienes mas preguntas de este tema agrega SOLUCIONADO.

surbyte:
Te das cuenta. Estoy justo justo trabajando con ellos y el único problema que presentan es la necesidad del capacitor adecuado y luego funcionan 10 puntos.
Me alegro que lo resolvieras.
Gran parte de las veces el problema es de cableado y lo peor es que uno al darlo vuelta se confunde.
Yo por eso recomiendo usar el tester/multímetro y chequear conexiones del lado que estamos mirando o sea del lado componentes, no del lado soldadura.
Si no tienes mas preguntas de este tema agrega SOLUCIONADO.

Gracias! Por el momento no agregue capacitor porque me funciona bien!!

Agregalo va a funcionar mejor.