NRF24L01 no me recibe valores

Tengo ya una semana de estar lidiando con unas placas nRF24L01 que compré en mi país.

Siguiendo el tutorial de este enlace:

Tanto para el emisori como el receptor, y cambiando el código en los pines 9 y 10 que están al revés, obtengo resultados muy desalentadores:

El emisor lee los datos de un joystick perfectamente y los envía, según la comunicación en serie
Imagen 25-10-21 a las 17.01

Pero, en el caso del receptor, los resultados son estos:
Captura de Pantalla 2021-10-25 a la(s) 16.57.09

El orden de los cables sería el siguiente tanto para el emisor como para el receptor:

VCC (Cable rojo a 3.3); CSN (cable azul a pin 9), MOSI (cable amarillo a pin 11), IRQ ->Libre
GND (Cable negro); CE (cable verde a pin 10) , SCK (cable blanco a pin 13) , MISO (cable naranja a pin 12)

Pongo los colores para llevar mismo orden.

Captura de Pantalla 2021-10-25 a la(s) 17.11.56
Captura de Pantalla 2021-10-25 a la(s) 17.12.08
Captura de Pantalla 2021-10-25 a la(s) 17.12.18
Captura de Pantalla 2021-10-25 a la(s) 17.12.27

Las fotos son del emisor, pero el receptor está exactamente igual cableado.

Además, le puse a los módulos un capacitor de 100 microFaradios y 25 V para evitar las caídas de potencia.

Estoy usando un clon de un arduino nano tanto en emisor como en receptor, luego de que los Arduionos Nano Every me dieran algún problema. Pero también he probado esta misma configuración con un arduino uno original.

Alguna idea de por qué no funcionan?

Código del receptor:

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

//https://naylampmechatronics.com/blog/16_tutorial-basico-nrf24l01-con-arduino.html
//https://forum.arduino.cc/t/simple-nrf24l01-2-4ghz-transceiver-demo/405123/3

 
//Declaremos los pines CE y el CSN
#define CE_PIN 10
#define CSN_PIN 9
 
//Variable con la dirección del canal que se va a leer
byte direccion[5] ={'R','o','b','o','t'}; 

//creamos el objeto radio (NRF24L01)
RF24 radio(10, 9);

//vector para los datos recibidos
int datos[2];

void setup()
{
 //inicializamos el NRF24L01 
  radio.begin();
  radio.setAutoAck(false); 
  //radio.printDetails();
  //inicializamos el puerto serie
  Serial.begin(9600); 
  
  //Abrimos el canal de Lectura
  radio.openReadingPipe(1, direccion);
  
    //empezamos a escuchar por el canal
  radio.startListening();
 
}
 
void loop() {
 uint8_t numero_canal;
 //if ( radio.available(&numero_canal) )
 if ( radio.available() )
 {    
     //Leemos los datos y los guardamos en la variable datos[]
     radio.read(datos,sizeof(datos));
    
     
     //reportamos por el puerto serial los datos recibidos
     Serial.print("Dato 0= " );
     Serial.print(datos[0]);
     Serial.print(", ");
     Serial.print("Dato 1= " );
     Serial.print(datos[1]);
     Serial.println(".");

 }
 else
 {
     Serial.println("No hay datos de radio disponibles");
 }
 delay(1000);
}

Coloca el código del emisor tmb. Asi podemos comparar que no falte algo.

Yo siempre he usado las librerías de Tmrh20 y para comenzar este ejemplo

Que te permite definir a cualquier nodo como emisor o receptor, lo cambias con el monitor serie.
Lo copias en ambos y si como dices los dos estan igualmente cambleados, entonces ambos funcionan.

Hola @Surbyte gracias por la respuesta.

Creo que desde que hice el post lo modifiqué, no recuerdo. Finalmente me di por vencido con esa librería y ahora uso nrfLite y es puro amor.
Igual comparto el código original

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

//Declaremos los pines CE y el CSN
#define CE_PIN 9
#define CSN_PIN 10

//Esto lee el joystick
int horizontal = A7;
int vertical = A6;
int movHor;
int movVer;
 
//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={'R','o','b','o','t'};

//creamos el objeto radio (NRF24L01)
RF24 radio(CSN_PIN, CE_PIN);

//vector con los datos a enviar
int datos[2];

void setup()
{
  //inicializamos el NRF24L01 
  radio.begin();
  radio.setAutoAck(false);
  //inicializamos el puerto serie
  Serial.begin(9600); 
  pinMode(vertical, INPUT);
  pinMode(horizontal, INPUT);
  Serial.begin(9600);
 
//Abrimos un canal de escritura
 radio.openWritingPipe(direccion);
 
}
 
void loop()
{ 
  movHor = analogRead(vertical);
  movVer = analogRead(horizontal);

  
 //cargamos los datos en la variable datos[]
 datos[0]= movHor;
 datos[1]= movVer;
 //enviamos los datos
 bool ok = radio.write(datos, sizeof(datos));

 
  //reportamos por el puerto serial los datos enviados 
  if(ok)
  {
     Serial.print("Datos enviados: "); 
     Serial.print(datos[0]); 
     Serial.print(" , "); 
     Serial.println(datos[1]); 

  }
  else
  {
     Serial.println("no se ha podido enviar");
  }
  delay(200);
}

Un dato curioso de la nueva librería es que no tuve que hacer ninguna modificación al cableado, lo que quiere decir que estaba bien, y que el error es posiblemente de código.

Saludos

Yo trabajo con Tmrh20 como te lo afirmé y jamás tuve problemas.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.