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