[SOLUCIONADO] nRF24L01. No logro comunicación

Hola buenas tardes,
Después de varias pruebas y varias librerías probadas acudo aquí para ver si hay alguna solución.
Compré estos chips nRF24, conectado arduino nano.
Mi entorno de trabajo: debian con el ide arduino 1.8.8.

He realizado muchísimas pruebas todas, con el mismo resultado. No me envía datos con la tarjeta RF. en un post algo antiguo surbyte recomedaba la librería TMRh20, que ha sido la última que probé, incluso he probado varias versiones de dicha librería. con este ejemplo, extraído de la documentación oficial de dicha librería.
El patillaje realizado es el que indica la documentación

PIN NRF24L01 Arduino UNO ATtiny85 ATtiny85 LittleWire RPI RPi -P1 Connector
1 GND GND pin 4 pin 14 GND rpi-gnd (25)
2 VCC 3.3V pin 8 pin 1 regulator 3.3V required rpi-3v3 (17)
3 CE digIO 7 pin 2 pin 12 pin to 3.3V rpi-gpio22 (15)
4 CSN digIO 8 pin 3 pin 11 RESET rpi-gpio8 (24)
5 SCK digIO 13 pin 7 pin 9 SCK rpi-sckl (23)
6 MOSI digIO 11 pin 6 pin 7 MOSI rpi-mosi (19)
7 MISO digIO 12 pin 5 pin 8 MISO rpi-miso (21)
8 IRQ - - - - - -

Lo curioso, es que si desconecto el pin 7 MISO del rf y lo cojo con la mano, funciona sin ningún problema, si lo dejo desconectado sin tocar, el programa se detiene, quedandose el led integrado en arduino encendido pero tenue.

Cable MISO conectado o desconectado sin tocar con la mano
O bien led integrado se queda tenue y se queda detenido el probgrama

RF24/examples/GettingStarted
*** PRESS 'T' to begin transmitting to the other node
*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
Now sending

O bien. drectamente da errores de envio

Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.
Now sending
failed
Failed, response timed out.

Cable MISO desconectado del chip RF pero tocando el cable con la mano:
RF24/examples/GettingStarted
*** PRESS 'T' to begin transmitting to the other node
*** CHANGING TO TRANSMIT ROLE -- PRESS 'R' TO SWITCH BACK
Now sending

Sent 146203864, Got response 4294967295, Round-trip delay 816 microseconds
Now sending
failed
Sent 147206944, Got response 8388607, Round-trip delay 5872 microseconds
Now sending
Sent 148214544, Got response 4294967295, Round-trip delay 10208 microseconds
Now sending
Sent 149226696, Got response 0, Round-trip delay 10743676 microseconds
Now sending
Sent 160972008, Got response 0, Round-trip delay 158268 microseconds
Now sending
Sent 162131804, Got response 0, Round-trip delay 58352 microseconds

He de decir, que si está desconectado si que envía, pero sólo a veces. Y como último detalle, probé también a poner un condensador electrolítico tal y como dicen muchos manuales de 10uF, dándome exactamente los mismos resultados.
Actualmente estoy conectando los módulos directamente a la salida de 3.3v de arduino, aunque la idea mas adelante sería conectarlos a una fuente de alimentación externa previo paso por regulador de tensión.
Al otro lado, en el receptor, diría que ocurren los mismos problemas, aunque no lo puedo asegurar 100x100 ya que solo he conseguido enviar cuando hago lo explicado.

Edición 27/01/2019
Hola buenas noches, por fin puedo editar el Post y darlo por solucionado
Finalmente no he descubierto el motivo de los mal funcionamiento en cuanto al pin flotante ya que al final no lo está.
Detallo el procedimiento seguido.

En cuanto a los esquemas de montaje y el código utilizado, finalmente he seguido el tutorial de Luís Llamas, ya que me parecía mas claro.
Listado Material:
2x Protoboard pequeña
2x Arduino NANO
2x Step-Down 3.3
2x Condensador electrolítico 10uF
2x Cable USB mini
2x nRF24L01+
El esquema de montaje básicamente he seguido el de el, pero con una modificación, ya que es como lo usaré en el montaje final de mi proyecto:
La tensión para el módulo RF la saco del pin +5V, este lo conecto a un step-down de 3.3V y la salida de este a un condensador de 10uF.

EMISOR

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
//Declaremos los pines CE y el CSN
#define CE_PIN 9
#define CSN_PIN 10
//Variable con la dirección del canal por donde se va a transmitir
byte direccion[5] ={'c','a','n','a','l'};
//creamos el objeto radio (NRF24L01)
RF24 radio(CE_PIN, CSN_PIN);
//vector con los datos a enviar
float datos[3];
void setup()
{
  //inicializamos el NRF24L01 
  radio.begin();
  //inicializamos el puerto serie
  Serial.begin(9600); 
//Abrimos un canal de escritura
 radio.openWritingPipe(direccion);
}
void loop()
{ 
 //cargamos los datos en la variable datos[]
 datos[0]=analogRead(0)* (5.0 / 1023.0);;
 datos[1]=millis();
 datos[2]=5896.6;
 //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.print(datos[1]); 
     Serial.print(" , "); 
     Serial.println(datos[2]); 
  }
  else
  {
     Serial.println("no se ha podido enviar");
  }
  delay(1000);
}

RECEPTOR

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

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

//Variable con la dirección del canal que se va a leer
byte direccion[5] ={'c','a','n','a','l'}; 

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

//vector para los datos recibidos
float datos[3];

void setup()
{
 //inicializamos el NRF24L01 
  radio.begin();
  //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("Dato0= " );
     Serial.print(datos[0]);
     Serial.print(" V, ");
     Serial.print("Dato1= " );
     Serial.print(datos[1]);
     Serial.print(" ms, ");
     Serial.print("Dato2= " );
     Serial.println(datos[2]);
 }
 else
 {
     Serial.println("No hay datos de radio disponibles");
 }
 delay(1000);
}

La librería utilizada es la última versión de RF24 de TMRh20, la 1.3.1.
He usado dos protoboards pequeñas totalmente independientes y con dos equipos independientes uno del otro.
Todas las tensiones están comprobadas con un voltímetro.
Uno de los errores que se seguro que he cometido, es que me he centrado en que el emisor indicaba que no enviaba datos, y buscaba soluciones para ello, pero en muchos casos sin tener en funcionamiento el receptor, en otros casos sí, y tampoco funcionaba, aunque imagino que habría cometido algún error.
Hasta que no he montado todo por separado con sus cables de serie conectados a dos PC distintos para probarlos realmente a la vez no me he dado cuenta de todo esto.
Tal y como me habían comentado en un post intermedio, nunca hay que desesperar la solución a veces es mucho mas sencilla de lo que pensamos
Muchas gracias por vuestra ayuda

Bueno el capacitor de 10uF debe ir.
Lo esas alimentando con los 3.3V del Arduino que en este caso es suficiente.

Esos módulos nunca me han fallado así que tenemos que encontrar que has hecho mal o en que te has equivocado.

para comenzar trabaja con dos Arduino del mismo tipo. Dos NANOs por ejemplo o dos UNOs no hagas cambios, máximo un UNO y un NANO. El ATtiny y RPi para luego.

Dime si tienes dos y si te pasa lo mismo.

Hi,
Tu dices si lo tocas el miso trabaja no. Entonces haz una prueba. Anadele una resistencia de 10K del pin miso al los 3.3 y mira haber si trabaja.

Yo jamás le puse resistencia a MISO.
Lo tengo conectado directo al pin.

Hi,
Surbyte segun la descripcion que el dice parece que el pin esta flotando. Algunos modulos no traen los pullup resistor. Yo dije que es solamente una prueba. Otra cosa a que modulo lo conectas.

Lo que no dice si esta armado en un protoboard ?

Hi,
Buena observacion. Esto tienden a tener malas conecciones.

hola buenas tardes,
justamente esta mañana he recibido la misma respuesta en otro canal, añadir una resistencia 10k en el pin que esta flotando y al parecer funciona. aunque aun no he podido comprobar si el envio es correcto, al menos tiene el funcionamiento deseado.
mi entorno de pruebas sin dos arduino nano en protoboard

mi entorno de pruebas sin dos arduino nano en protoboard

Quisiste decir dos arduinos EN protoboard? Entonces ahi tienes el problema. mala conexion mi amigo.

No uses protoboard. Mi consejo de siempre. Compra placas PCB y sueldas todo con cables finos.
0 problemas a menos que lo tengas mal conectados pero ahora tienes la duda de que no sabes si el contacto esta bien o no. Obviamente no lo esta.

la idea es pasarlo todo a pcb en el montaje final soldando los componentes., utilizo la proto como banco de pruebas para comprobar que todo va como debe ir.
Como os dije, ha sido añadir la resistencia al pin y el funcionamiento ha sido el esperado.
tengo que comprobar que realmente se recibe lo que se envía

Yo como no uso protoboards jamás tengo esos problemas, tengo otros porque puedo conectarlos mal pero jamás mal contacto.

Lo que tu describes me pasó un par de veces con mis protoboards. un dias los separé y decidí no usarlos mas. Si no tengo ganas de armar algo en un pcb de prototipos como este entonces tengo otro problema.

Este es algo exagerado pero sirve para que veas de que hablo

o este video que muestra mas ejemplos

Aca tienes cómo link

otro mas paso a paso

y el último

Hi,
Yo lo que uso para mis prototios es lo que se conoce como wire wrap. Puedes modificar /hacer cambios si nesecidad de soldar/desoldar.Adjunto un link:

https://en.wikipedia.orgwiki/Wire_wrap#/media/File:Wire_Wrapping.jpg

Yo usaba wire wrapping pero los zócalos y demás son caros en Argentina y pasé al método soldado usando el cable de wire wrapping, y la herramienta para pelarlo. Me resulta muy cómodo soldarlo y queda perfecto.
Mis prototipos quedan como la imagen del post anterior. Eso es cable de wire wrapping soldado.

Hi,
Una ventaja de usar el cable wire wrapping que es que esta cubierto de plata y es de un amperio y sirve como fusible

Sigo con los problemas con los rf. Tal y como comenté ayer, al añadir la resistencia en el pin 12 al menos actúa de la manera esperada. Ahora por eso, en el receptor no recibo datos o si los recibo son erróneos.

Sketch del emisor:

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

#define CE_PIN 7
#define CSN_PIN 8

const byte address[6] = "0001";

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

void setup() {
  pinMode(CE_PIN, INPUT_PULLUP);
  Serial.begin (9600);
  radio.begin();                  // inicializamos el NRF24L01 
  radio.openWritingPipe(address); // Abrimos un canal de escritura
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();          // Deja de escuchar para que podamos transmitir.
    
}
void loop() {
  const char text[] = "Hola mundo";
  radio.write(&text, sizeof(text));// Manda mensaje
  Serial.println("Enviado");
  delay(1000);
}

Sketch del receptor

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

#define CE_PIN 7
#define CSN_PIN 8

RF24 radio(CE_PIN, CSN_PIN); // creamos el objeto radio (NRF24L01)
const byte address[6] = "00010";

void setup() {
  
  Serial.begin(9600);       // inicializamos el puerto serie
  Serial.println("#################################");
  Serial.println(" Escuchando datos de radio");
  Serial.println("#################################");
  radio.begin();            // inicializamos el NRF24L01 
  radio.openReadingPipe(0, address); // Abrimos un canal de lectura
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();   // empezamos a escuchar por el canal
}

void loop() {
  if (radio.available()) {
    Serial.println("radio disponible");
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
 
  }else{
    //radio.printDetails();
    Serial.println("No hay datos de radio disponibles");
 }
 delay(1000);
}

Salida en puerto serie:

No hay datos de radio disponibles
No hay datos de radio disponibles
No hay datos de radio disponibles
No hay datos de radio disponibles
radio disponible

No hay datos de radio disponibles
No hay datos de radio disponibles
No hay datos de radio disponibles
No hay datos de radio disponibles
radio disponible
`pppppppppppppppp⸮|
radio disponible

radio disponible

radio disponible

radio disponible

radio disponible

No hay datos de radio disponibles
radio disponible

radio disponible

radio disponible

He probado a añadir una resistencia de 10k al pin 11 y también por probar activar las resistencias PULLUP por software en todos los pins. Realmente lo he probado por probar aunque no se si tenía algún sentido.

pinMode(10,INPUT_PULLUP);

Los sketch los he copiado de internet, sin adaptarlos ya que de momento sólo estoy probando los módulos

Un saludo

Y donde estan los capacitores de 10uF? No los veo!!

Sigue esta guía

y quedará asi

Hi,
Otra sugerencia cuando se usa breadboards es de anadirle un condensador de por lo menos 470uf y uno de .5uf en los +5v del breadboards. Tambien como lo demoestra el link de surbite se le debe de anadir otro en paralelo de .1 uf. este se usa para eliminar el ruido que se produce cuando usa logica digital. como el miro del wifi. Otra observacion es que los cables que tu tienes conectando el nrf24 estan muy largos y debes por lo menos tratar de usar lo mas corto posible.

Los cables no son largos, son como los que puse en el tutorial y si en el tutorial funciona al el también le de debería funcionar pero no veo el capacitor de 10uF que es muy importante.

Tienes razon, hice muchas pruebas y quité los capacitores y no los volví a poner, dentro de un rato pruebo.
otro apunte mis arduino nano son chinos, busqué informacion sobre el spi con arduino nano (por lo del pin flotante) y no vi nada al respecto, por lo qur no se si le pasa a otra gente.

Hi,
Adjunto el esquematico del nrf24. En el puedes ver que las senales no tienen "pullup" resistor.Las de salida no tienen problemas. La que posiblemente tenga problema es la de entrada al arduino pues va estar flotando. Posiblemente la del clock necesite una pero no estoy muy seguro depende quien use el clock.