Artículos recientes

Promociones especiales

Novedades

Tutorial básico NRF24L01 con Arduino

Tutorial básico NRF24L01 con Arduino

En este tutorial se realizará la comunicación inalámbrica entre dos Arduino usando los módulos transceiver NRF24L01, explicaremos lo básico de estos transceptores y como usar su librería en Arduino.

  

Módulo NRF24L01   ódulo NRF24L01 con Antena

  

En el mercado existen varios modelos de módulos del NRF24L01, todos operan en la banda de 2.4GHz, son muy usados por su funcionalidad, bajo consumo y bajo costo, los más populares son los que se muestran en la imagen anterior, El más básico  y económico es el que se muestra en la imagen de la izquierda, básicamente es el chip NRF24L01 y sus componentes necesarios para su funcionamiento. El otro modelo es más completo, aparte del NRF24L01 posee un circuito amplificador de potencia (PA), un circuito amplificador de bajo ruido (LNA) además de una antena SMA que en conjunto le permiten lograr un rango de hasta 1000m

Existe bastante información en Internet sobre el uso de estos transceptores, en el caso de Arduino, existen varias librerías (aquí las recomendadas) Pero para nuestro tutorial usaremos la librería RF24.

Lo primero que tienes que hacer es descargar la última versión librería RF24 e importarla a tu IDE de Arduino, para esto en la barra de menús vas a Sketch>Importar Librería>Add Library, y seleccionas la carpeta o archivo ZIP descargado, después de esto deberás cerrar y volver a abrir el IDE.

  
Ahora explicaremos las funciones que usaremos de la librería; solo se explicaran las usadas en este tutorial.

  

RF24 (uint8_t _cepin, uint8_t _cspin)


Función Constructor: Crea una nueva instancia (Objeto) de este dispositivo. La instancia se crea con los pines de comunicación SPI pero es necesario especificar los pines de control que están conectados al módulo.

Parámetros

_cepin  : Pin del Arduino conectado al pin Chip Enable (CE) del módulo

_cspin  : Pin del Arduino conectado al pin  Chip Select (CS) del módulo

Ejemplo:

  

#define CE_PIN 9
#define CSN_PIN 10

RF24 radio(CE_PIN, CSN_PIN);

     

void begin(void )           

Inicializa el objeto creado, generalmente se llama a esta función en setup (), antes de llamar a cualquier otro método.

Ejemplo:

radio.begin();

  

void openWritingPipe(const uint8_t * address)

Abre un canal de comunicación de escritura. La dirección se asigna a través de una matriz de 5 byte de longitud.

Parámetros

Address : La dirección del canal para abrir.

Ejemplo

byte direccion[5] ={'c','a','n','a','l'};

radio.openWritingPipe(direccion);
  

bool escribir(const void * buf ,uint8_t  len )

Envía un dato por el canal definido en openWritingPipe(), el dato es de máximo 32bytes

Parámetros

Buf: Puntero al datos que se enviará

Len: Número de bytes a enviar


Devuelve

True si la carga útil fue entregada con éxito y falso si no se logró enviar

ejemplo:

int dato=65;

bool ok = radio.write(&dato, sizeof(dato));
  

void openReadingPipe( uint8_t number, const uint8_t * address )      

Abre un canal de comunicación de lectura. La direccion se asigna a través de una matriz de 5 byte de longitud. Se pueden abrir hasta 6 canales de lectura pero sus direcciones solo pueden ser diferentes en el primer byte


Parámetros

Number : número de canal  del 0-5 (canal 0 generalmente reserva para escritura).

Address : Dirección del canal para abrir.

Ejemplo:

byte direccion[5] ={'c','a','n','a','l'};

radio.openReadingPipe(1, direccion);
  

void startListening(void )

Al llamar esta función se empieza a escuchar por los canales definidos como lectura, después de  llamar a esta función no podemos hacer escrituras, para esto antes debemos llamar a stopListening ()

Ejemplo:

radio.startListening();
  

bool available (void )   

Compruebe si hay bytes disponibles para ser leídos

Devuelve

True si existen datos disponibles en el canal de lectura y falso si no hay ningún dato recibido

Ejemplo

if(radio.available()){

  radio.read(&data,sizeof(data));

}
  

void read( void * buf, uint8_t len )

Leer los datos disponibles en el canal de lectura

Parámetros

Buf : Puntero a un buffer donde los datos deben ser escritos

Len : El número de bytes a leer en el búfer

Ejemplo

int dato;

if(radio.available()){

  radio.read(&dato,sizeof(dato));

}

    

    
Una vez explicado lo necesario para empezar a usar los NRF24L01, vamos a ver un ejemplo:

Enviar variables desde un arduino a otro usando NRF24L01


Se enviaran desde un Arduino hacia otro Arduino tres datos, estos serán: el voltaje leído por el pin analógico A0, el valor de millis(), y un dato adicional que podría ser el de cualquier sensor.

Para esto necesitamos 2 Arduinos, dos módulos NRF24L01 (con o sin antena), un potenciómetro y cables Dupont

  

Empecemos haciendo las conexiones entre el arduino y el NRF24L01

Las conexiones serán las mismas tanto en el Emisor y Receptor, con la única diferencia que en el receptor no usaremos el potenciómetro.

  

NRF24L01Arduino UNO,NanoArduino Mega
1: GNDpin GNDpin GND
2: VCCpin 3V3pin 3.3V
3: CEpin 9pin 9
4: CSNpin 10pin 10
5: SCKpin 13pin 52
6: MOSIpin 11pin 51
7: MISOpin 12pin 50

  

conexiones NRF24L01y Arduino

  

Como se observa en la imagen el pin 2 del NRF24L01 (VCC) va conectado al pin 3V3 del Arduino, esto porque el modulo funciona con 3.3V. NO conectar a 5V porque podemos quemar al módulo, los pines de datos lo estamos conectando directamente al Arduino a pesar que los niveles lógicos del NRF24L01 son también de 3.3V, esto con el tiempo podría afectar al NRF24L01 por lo que se recomienda usar un adaptador para que trabaje con valores de 5V 


El código para el emisor es el siguiente:

  

#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]=3.14;
 //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);
}
 

  

Y el código Para el recetor:

  

#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);
}


    


Si analizamos el código lo que hacemos es inicialmente configurar el módulo y luego enviar o leer los datos transmitidos por el módulo NRF24L01, la variable que se va a transmitir puede ser un solo dato o un array de datos como se lo está haciendo en este tutorial, pero siempre la variable o vector que se va a recibir tiene que ser del mismo tamaño y tipo que la variable enviada, de lo contrario se perderán datos.

Si han hecho bien todo lo descrito en el tutorial, al abrir el monitor serial les debería mostrar los siguientes resultados

Monitor serial del Emisor:

  

monitor serial del emisor

   

Monitor serial del receptor

  

monitor serial del receptor

  
La distancia o alcance entre módulos NRF24L01 dependerá del modelo que están usando y del lugar en donde están trabajando, si hay muros, ruido, o si estan en lugares abiertos. Los que vienen sin antena son de poco alcance un poco menos que la señal WIFI, pero los modelos que vienen con antena y amplificador de potencia pueden comunicarse hasta un 1km de distancia.

Pueden adquirir los materiales usados en este tutorial en nuestra tienda

         Módulo NRF24L01 2.4 GHz

         Módulo NRF24L01+PA+LNA 2.4 GHz con Antena

         Arduino Uno R3

         Cable Dupont, hembra a macho 20cm x 20Und

144 Comments

    • Avatar
      Diego Marin
      sep 13, 2016

      Hola, estoy intentando realizar esto, pero no consigo que me funcione. El emisor envia los datos, pero el receptor muestra:Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00 Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00 Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00 todo el tiempo esto. el codigo es el mismo que el suyo.

      • Avatar
        Naylamp
        sep 14, 2016

        Hola diego, si el código es exactamente el mismo entonces puede ser un problema de hardware o de la librería, vuelve a realizar tus conexiones y/o vuelve a instalar la librería. Apaga el emisor y en el receptor te debe mostrar “No hay datos de radio disponibles”.

        • Avatar
          Diego Marin
          sep 14, 2016

          he visto en algun sitio que la libreria tmrh20 tiene definidos los pines 7 y 8 para ce y csn respectivamente. lo he cambiado a 7 y 8 y sigue igual. y con 9 y 10 tambien me pasaba.

          • Avatar
            Emanuel Dimier
            may 10, 2017

            Me funcionaba perfecto y de un momento para oto me aparecio el mismo problema. Pudiste solucionarlo?

            • Avatar
              Juan Perozo
              oct 11, 2017

              Como haria para enviar los datos de un sensor con salida digital, digitalRead? algo asi?

              • Avatar
                Cristian Diaz
                nov 15, 2018

                hola que tal tenia el mismo problema, yo queria enviar valores de sensores, pero lo conecte a una fuente con mayor amperaje y me funciono, tal vez tu fuente no esta dando el amperaje que se necesita

        • Avatar
          kendra
          nov 26, 2016

          Tengo el mismo probema el emisor envia los datos y el receptor o los lee y ya hice cambio de librerias. ¿me podria ayudar?

        • Avatar
          JOSELE RENDON
          oct 26, 2017

          Disculpe, tengo exactamente el mismo problema no recibo los datos pero si los envió, ya revise las conexiones ya revise la librería e intente con otros tutoriales y diferentes códigos pero para todo es lo mismo, tengo un arduino uno y un Mega,recibo todos los datos en 0 y envió todos los datos correctamente, ya leí todos los comentarios y no encontré una solución, ya intente varias cosas pero no sale nada, la librería según yo es la mas reciente, podría ayudarme por favor?

      • Avatar
        Naylamp
        sep 14, 2016

        Cuando creas el objeto RF24 radio (); si no se especifica los pines la librería toma los pines 7 y 8, de lo contrario trabaja con los pines que se especifica.

      • Avatar
        Rodrigo
        oct 25, 2016

        A mi también me paso lo mismo pero ya esta arreglado. Solo me di cuenta que en la imagen de conexión en fritzing el pin "SCK" esta conectado a "GND" cuando tendría que ir conectado al pin "13" del Arduino. Entonces si lo conectaste basándote en la imagen tal vez sea ese error solo cambia los pines y estaria arreglado.

      • Avatar
        Naylamp
        oct 26, 2016

        La imagen ya fue corregida. Gracias Rodrigo por la observación

      • Avatar
        PETER
        ago 27, 2019

        no me funciona amigo, el receptor me da esto Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00que sucede que llega algo pero llega 0 en vez del valorquedo atento gracias

    • Avatar
      Hanuka
      sep 28, 2016

      Oye disculpa ya te funciono para ver si puedes decirme a qué le modificaste que yo tengo el mismo error

    • Avatar
      bj luis
      oct 17, 2016

      buenas tengo el mismo problema que diego alguien ya puedo solucionarlo?

      • Avatar
        Naylamp
        oct 26, 2016

        Realiza las conexiones nuevamente, hubo un error en la imagen de conexiones que ya fue corregido. Saludos

    • Avatar
      Cristian
      nov 23, 2016

      hola buenas tardes muy buen post te felicito, te hago una consulta, si quiero activar 4 reles mediante esta implementacion como lo tendria que hacer? desde ya muchas gracias

      • Avatar
        Naylamp
        nov 26, 2016

        Estimado Cristian, podrías usar una de las variables para especificar los estado para los 4 relés, o usar una variable independiente para cada relé, por ejemplo en el receptor agregarías:
        radio.read(datos,sizeof(datos));
        if (datos[0]==1);{ digitalWrite(2,HIGH); }
        if (datos[0]==0);{ digitalWrite(2,LOW); }
        if (datos[1]==1);{ digitalWrite(3, HIGH); }
        …etc
        Y en el emisor enviarías los datos (0 o 1) respectivos.

    • Avatar
      Juan Carlos Calderon Castro
      nov 23, 2016

      No es necesario conectar los pines5: SCK 6: MOSI 7: MISOdel modulo cierto? En la programacion no tienen nada.

      • Avatar
        Naylamp
        nov 26, 2016

        Hola Juan, Si se tienen que conectar porque los pines SCK, MOSI y MISO son del SPI del arduino, y lo define el hardware, por eso dependiendo de la placa las conexiones son diferente. En el programa no se especifican porque esos pines no se pueden cambiar.

    • Avatar
      Sebastian
      nov 30, 2016

      Hola, muy buen tutorial, muchas gracias por hacerlo. Me queda aun asi una duda. Cuando hablas de la funcion openReadingPipe, comentas que "Abre un canal de comunicación de lectura. La direccion se asigna a través de una matriz de 5 byte de longitud. Se pueden abrir hasta 6 canales de lectura pero sus direcciones solo pueden ser diferentes en el primer byte". No termino de entender eso de abrir 6 canales de lectura. En mi caso tengo que tener un arduino maestro que indique a los esclavos cuando prenderse, y que reciba luego datos del esclavo que está prendido. Me puedes ayudar con esto? Muchas gracias, Sebastian

      • Avatar
        Naylamp
        dic 14, 2016

        Hola Sebastián, cuando decimos que podemos abrir hasta 6 canales de lectura, significa que podemos escuchar como máximo a 6 NRF24L01 a la vez. En tu caso si todos van a enviar información a la vez tendrías que trabajar con varios canales abiertos, pero si los esclavos no van a transmitir a la vez, podrías programar en el maestro que cambie de dirección cada vez que va a escuchar la respuesta del esclavo correspondiente y usarías un solo canal.

    • Avatar
      Ronaldo Montelongo
      dic 1, 2016

      Hola, buenas tardes, me preguntaba donde puedo encontrar las librerias para el nrf24l01

    • Avatar
      santi
      dic 14, 2016

      Buenas tardes! Es necesario tener siempre un emisor y receptor? Estoy realizando un proyecto y me gustaría poder enviar datos de un arduino a otro y viceversa.

      • Avatar
        Naylamp
        dic 14, 2016

        Hola, Si puedes usar un NRF24L04 como transmisor y receptor a la vez, usa radio.openReadingPipe() y radio.openWritingPipe() para poder recibir y enviar desde el mismo arduino. Para poder enviar, antes tienes que usar radio.stopListening(); y después de enviar radio.startListening(). Mejor dicho mientras envías no puedes escuchar datos.

    • Avatar
      luiz cancela
      feb 10, 2017

      boa tarde tem como me algum circuito que funcione com nrf 2401 e um sr 04 ultrasonico e o seu programa

    • Avatar
      jean
      feb 11, 2017

      buenas noches. Estoy realizando un proyecto y me gustaría poder enviar datos a un exclavo cuando este lo reciba se active un audio ya establecido con estos modulos usted cree que pueda realizarlo o como podria realizarlo, soy nueo en esto

      • Avatar
        Naylamp
        feb 13, 2017

        Hola Jean, con estos módulos si puedes enviar el dato para que se active el audio en el esclavo, pero no puedes transmitir el audio. Para reproducir el audio en el receptor puedes usar un módulo mp3 o similares.

    • Avatar
      Manuel Eduardo Camberos
      mar 20, 2017

      Hola, no puedo recibir datos, mas si puedo mandar, tengo una duda en un codigo de linea, para que sirve este: uint8_t numero_canal; ¿asi debe ir?. ¿en que consiste "numero_canal"? saludos!

      • Avatar
        Naylamp
        mar 31, 2017

        Hola Manuel, La línea que mencionas no la utilizamos, nos faltó comentar dicha línea, pero así como esta no afecta en el funcionamiento pues nuca utilizamos esa variable, Numero canal, se pensó para usar cunado necesitamos recibir datos de más de un NRF24L01, de esta forma tendríamos que indicar en que canal deseamos verificar si hay datos presentes, esto se realiza con la línea que esta comentada después de uint8_t numero canal.

    • Avatar
      Andres Felipe Camargo Ripoll
      mar 22, 2017

      hola, muy bueno, gracias por el aporte pero tengo un pequeño inconveniente el trasmisor envia los datos y en el receptor los puedo ver pero el trasmisor no muestra los datos enviados al devolver if(ok) lo toma como false lo probe con if(ok==false) y hay si muestra es decir el trasmisor toma como si no enviara los datos. que podria ser esto ? aclaro en el receptor si llegan los datos perfectamente

    • Avatar
      Andrés
      mar 22, 2017

      Hola, veo que en el tutorial usa las placas que traen la antena en zig-zag incorporada (de baja potencia). Si se usan de las que traen antenas externas (de alta potencia), que tienen un mayor consumo, aún así se pueden alimentar desde la salida del arduino 3.3V, o tendría que usar una fuente externa?

      • Avatar
        Naylamp
        mar 31, 2017

        Hola Andrés, La salida de 3.3V podría hacer funcionar el NRF24L01 con antena externa, pero estarías sobrecargando dicha salida. Es mejor Usar un regulador o una fuente de 3.3v

    • Avatar
      Cristian Julián
      mar 22, 2017

      Buenas noches me funciona el programa para los módulos sin antena pero utilizo modelos con amplificador y antena y ya no funciona porque ?

      • Avatar
        Andrés
        mar 23, 2017

        Seguramente porque consumen mas potencia y necesitas alimentarlos desde una fuente externa de 3.3 V.

      • Avatar
        nery
        abr 25, 2019

        yo tengo un par de nrf24l01 con antenas y solo envía señal pero el que recibe lo deja en 0. Tal vez es como dicen por falta de voltaje la verdad que no sé porque en todo página que reviso me dicen q solo se consumen 3.3 v y es lo que estoy recibiendo porque lo medí con un multitester.

    • Avatar
      Horacio palacios
      abr 4, 2017

      Hola..muy bueno el trabajo. Una pregunta. Hay forma de poner 30 direcciones de recepción? Pq tengo que tomar datos de 30 modos distintos o tendría que hacer un barrido por cada uno ? Gracias

      • Avatar
        Naylamp
        abr 12, 2017

        Hola Horacio, Por cada módulo puedes configurar un canal para escribir (transmitir) y un máximo de 6 canales para escuchar, Pero en tu caso tendrías que trabajar uno principal como si fuera un Maestro, y los 30 como esclavos, cada esclavo tendría su propio canal (dirección). El proceso sería similar al siguiente secuencia : radio.openWritingPipe(direcion1w); radio.openReadingPipe(1,direcion1r); radio.stopListening(); radio.write(datos, sizeof(datos)); radio.startListening(); if(radio.available()) {radio.read(datosRespuesta,sizeof(datosRespuesta))} Todo en un for cambiado la dirección para cada esclavo.

    • Avatar
      Manuel Leal
      abr 6, 2017

      Buenos días. Me gustaría que el recepto también pudiese usar una shield Eth pero cuando se la coloco deja de recibir datos, me parece que es un problema con el BUS SPI, ¿es así? ¿se puede resolver? mi idea es consolidar todos los datos en un servidor con Openhab y mosquitto

      • Avatar
        Naylamp
        abr 12, 2017

        Hola Manuel, El problema debe ser porque el Shield Ethernet aparte de los pines SPI usa también el pin 10 como el SS del W5500 y el pin 4 como el SS de la SD. Intenta cambiando el pin CSN del NRF24L01 a otro pin diferente del 10 y el 4 que ya estarían ocupados por el Shield Ethernet.

    • Avatar
      Leandro
      abr 10, 2017

      Hola estoy compilando el código para el receptor pero me dice que "clase RF24 has nomember named "startListening"" como lo puedo solucionar?

      • Avatar
        Leandro
        abr 10, 2017

        Lo tenia mal escrito

    • Avatar
      Lider
      abr 10, 2017

      Hola, me funciono de maravilla, una duda disculpa, en el lado del receptor como podría hacer para que me lea dos datos distintos es decir, en un emisor envio una variable datos y en el otro una que diga solo datos. en lado del receptor lo tengo asi. Lo que quiero es que me diferencie que estoy mandando, por un lado si es que estoy mandando "datos" y si no es asi entonces que diferencie que estoy mandando "dato", la variable "datos" es un vector osea datos[2] y "dato" solo es un flotante, dato = -12.10; entonces en un emisor solo envio con un pulsador "datos" y con otro pulsador envio "dato", es decir sólo el flotante. Como hacer para que el receptor me diferencie eso. O entonces en el emisor que solo me envie de "datos[2]", la posicion que quiera por ejemplo solo quiero enviar "datos[1]" sin que me mande todo completo.
      if ( radio.available() )
      {
      radio.read(datos, sizeof(datos));
      radio.read(&dato, sizeof(dato));
      //acum=acum+1;
      //Leemos los datos y los guardamos en la variable datos[]
      //if(ok)
      //{
      //reportamos por el puerto serial los datos recibidos
      if(datos[0] == 12.10)
      {
      Serial.print("C1 OK" );
      digitalWrite(LedPin, HIGH);
      Serial.print(" ENCENDIDO");
      }
      if(dato == -12.10)
      {
      Serial.println("C2 OK");
      digitalWrite(LedPin, LOW);
      Serial.print(" APAGADO");
      acum = 0;
      }

      gracias de antemano!

      • Avatar
        Naylamp
        abr 12, 2017

        Hola, trasmitir diferentes tipos de datos en diferentes tiempos es difícil, pues el receptor no sabría diferencial cuál de todos es y podría generar confusión en tamaño y tipo de dato. Por eso en este tutorial todos los datos se los agrupa en un vector y se envían todos a la vez, tener en cuenta que el tamaño máximo de una trama es de 32bytes, Otra forma seria convertir el dato a enviar a una cadena, de esta forma podríamos enviar diferentes variables y usar un inicio de trama diferente para cada variable. También puedes usar estructuras de datos typedef struct{ int data1; float data2;} datos;

    • Avatar
      Alvaro
      abr 10, 2017

      Hola que tal, queria consultarte como deberia modificar el codigo para agregar 4 nrf24l01 tanto al esclavo como al maestro. para poder generar una red de sensores de temperatura 18b20 ,ya lo pude modificar pero solo tengo un esclavo con tu ejemplo me faltarian sumarle 4 saludos

      • Avatar
        Naylamp
        abr 12, 2017

        Hola Alvaro, una configuracion podria ser que tengas 4 arduinos transmisores y un principal receptor, los 4 estarian enviando periodicamente los datos de los sensores. Esto, aprovechando que un NRF24L01 puede estar escuchando hasta por 6 canales. Las definicines serian: radio.openReadingPipe(1, direccion1); radio.openReadingPipe(2, direccion2); radio.openReadingPipe(3, direccion3); etc, y en el void loop seria: if(radio.available(1)) {....} if(radio.available(2) ) {....} if(radio.available(3) ) {....} etc

    • Avatar
      Alvaro
      may 1, 2017

      Gracias desde Uruguay saludos!

    • Avatar
      Juan Ignacio
      may 7, 2017

      Hola, he seguido el ejemplo del tutorial y no consigo que se transmitan los datos. Sólo se transmite una vez cuando reinicio la placa y sólo algunas veces. La Alimentación de las placas la realizo a través de USB de PC. El Programa compila pero arriba aparece este mensaje:
      Warning: invalid conversion from 'byte* {aka unsigned char*}' to 'unit64_t {aka long long unsigned int}' [-fpermissive] radio.openWritingPipe(direccion);
      Le agradezco cualquier ayuda posible

      • Avatar
        Naylamp
        may 14, 2017

        Hola Juan, es un problema de librería, posiblemente estas trabajando con otra librería u otra versión, verifica si es la misma que usamos en el tutorial.

    • Avatar
      andres
      may 29, 2017

      Hola, para el Arduino mega no se utiliza el pin 10 sino el 53.

      • Avatar
        Encendio
        jun 28, 2017

        En serio?, a mi el mega me funciona bien como receptor usando el pin 10 y dejando libre el 53.Un salu2

    • Avatar
      Wilian Delgado
      may 30, 2017

      Tengo el siguiente error invalid conversion from 'byte* {aka unsigned char*}' to 'uint64_t {aka long long unsigned int}' [-fpermissive] segun es en el: radio.openWritingPipe(direccion);Estoy haciendo el ejemplo que esta en este blockGracia

      • Avatar
        Naylamp
        jun 18, 2017

        Hola Wilian, solo es problema de librería, instálala de nuevo y verifica que sea la misma que la que nosotros usamos en el tutorial.

    • Avatar
      Jhonny
      jun 3, 2017

      Muy buen post, me ha servido de mucho.Me podrías decir como modificar ese código para poder enviar 3 paquetes de datos de 32 bytes cada uno?

    • Avatar
      Jhonny
      jun 3, 2017

      Y que los 3 paquetes se reciban en una misma línea de datos en el receptor.

      • Avatar
        Naylamp
        jun 18, 2017

        Hola Jhonny, el máximo tamaño del paquete a enviar es de 32 bytes, para enviar cadenas o paquetes más grandes tienes que implementar tu propio algoritmo, la forma mas fácil es agregando un inicio y fin de trama, cuando el receptor recibe el inicio de trama, los siguientes paquetes lo concatena hasta que llegué el fin de trama.

    • Avatar
      Michael
      jul 4, 2017

      Buenas, estoy intentando mandar informacion para que mueva un servo motor pero no esta funcionando que podría ser?

    • Avatar
      ariel
      jul 9, 2017

      Buenas, me parece muy interesante la implementación de este módulo. Necesitaría hacer llegar datos de 20 arduinos con 2 pulsadores cada uno a un arduino maestro o a una raspberry que a su vez activen distintos sonidos. La pregunta es si me convienen estos módulos o mejor seria usar algo wifi. Muchas gracias desde ya.

      • Avatar
        Naylamp
        jul 17, 2017

        Hola Ariel, si puedes usar estos módulos pero teniendo en cuenta que el maestro no podrá conectarse a los 20 emisores a la vez, puesto solo puedes escuchar a 6 a la vez, tendrás que armar tu red con topología árbol o anillo. También puedes usar los wifi, teniendo en cuenta que estos consumen energía y tendrías que evaluar si trabajas con http.

    • Avatar
      tona
      jul 13, 2017

      una pregumnta para que pueda enviar datos y me muestre en la pantalla los 2modulos receptor y emisor deben de estar prendidos o solo el puro transmisor puede mostrar en el puerto serial lo que manda lo que pasa que uso un arduino mega pero me pone que no se ha podido enviar datos ayuda

      • Avatar
        Naylamp
        jul 17, 2017

        Hola, ambos módulos tiene que estar encendidos, si el receptor está apagado te saldrá que el emisor no ha podido enviar la información.

    • Avatar
      kmilo
      jul 13, 2017

      Hola tengo una duda, el modulo NRF con antena consume 115mA como emisor segun el datasheet y los pines de arduino entregan maximo 50mA... Como puedo conectar el modulo para que no tenga problemas con la corriente??? Gracias por la publicación

      • Avatar
        Naylamp
        jul 17, 2017

        Hola, Si te refieres a la salida de 3.3V del arduino lo recomendable es trabajar como máximo 50mA, pero no siempre el NRF consume 115mA, la corriente es variable, posiblemente cuando el módulo NRF tenga bastante carga de trabajo podría fallar, lo recomendable es usar una fuente externa de 3.3V o un adaptador para el NRF, con los demás pines no hay problema de corriente.

    • Avatar
      jcast
      jul 28, 2017

      Hola, puedo poner una antena de mayor potencia pero de la misma frecuencia para obtener un rango mayor de alcance? o se quemaría el módulo?

      • Avatar
        Naylamp
        jul 30, 2017

        Hola, si puedes usar otra antena de la misma frecuencia.

    • Avatar
      Miguel Angel
      ago 14, 2017

      alguien em podria apoyar con esta codigo ya que no me trasmite las distancias no se si estoy mal en el codigo o en la conexion
      #include < SPI.h>
      #include < nRF24L01.h>
      #include < RF24.h>
      #include < NewPing.h>
      #define CE_PIN 9
      #define CSN_PIN 10
      #define TRIGGER_PIN 2
      #define ECHO_PIN 3
      #define MAX_DISTANCE 200
      const uint64_t pipe = 0xE8E8F0F0E1LL;
      RF24 radio(CE_PIN, CSN_PIN);
      NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);
      int jarak[1];
      void setup(){
      Serial.begin(9600);
      radio.begin();
      radio.openWritingPipe(pipe);
      }
      void loop() {

      jarak[0] = sonar.ping_cm();
      Serial.print("Nivel: ");
      Serial.print(jarak[0]);
      Serial.println(" cm");
      radio.write( jarak, sizeof(jarak) );
      delay(100);
      }

      • Avatar
        Naylamp
        ago 22, 2017

        Hola Miguel, para descartar si es problema del hardware primero prueba si los ejemplos del tutorial te funcionan normal, de ser así no es problema de los NRF y el código relacionado a estos, podría ser las conexiones o el código cunado integras el ultrasónico, posiblemente la librería, prueba realizando medidas sin la librería, para descartar si la librería newping.h afecta al del NRF24.h

    • Avatar
      Yeray Torres
      ago 29, 2017

      Buenas que tal, una pregunta cuantos es el número máximo de arduino podemos conectar entre sí con este sistema me refiero números de emisores a un solo receptor gracias

      • Avatar
        Naylamp
        sep 19, 2017

        Hola Yeray, Cada receptor puede escuchar solo a 6 NRF24L01 a la vez, si deseas conectar más tienes que implementar una red tipo malla o árbol ( https://tmrh20.github.io/RF24Network/Tuning.html ). Pero si todos los NRF24L01 no van a tener una comunicación constante o el receptor hace un papel de Maestro, en el receptor podrías implementar una rutina para que cambia la dirección del canal y puedo comunicarse con determinado NRF.

    • Avatar
      Felipe Saavedra
      sep 2, 2017

      Hola buenas, genial el tutorial pero tengo un problema, he probado distintas librerias, distintos conexionados y nada. Con el mismo programa de arriba y conexiones, no manda nada, pero cuando retiro el ce del pin 9 comienza a decir datos enviados por monitor serial (obviamente no llega al receptor). Si tienen algún consejo o algo que me pueda ayudar se los agradeceria mucho estoy utilizando 2 Arduino UNO y 2 nrf24l01 + pa + lna

      • Avatar
        Naylamp
        sep 19, 2017

        Hola Felipe, para descartar problemas de energía, puesto que los 3.3V de arduino es de poca corriente, usa una fuente externa de 3.3V o de algún otro regulador. Prueba con un tercer NRF, uno de tus NRF podría estar defectuoso, puedes comunicar un NRF24L01(sin antena) con un NRF24L01+PA+LNA (con antena) sin problemas

      • Avatar
        Gustavo
        ene 23, 2019

        Hola Felipe, ahora que lo mencionas yo también le vengo dando vueltas al asunto varios días y nada, pero hice lo mismo que tu, desconecte el pin_CE = 9 y comenzó a emitir señal intermitente entre enviar los datos cargados en la matriz de datos, y no envío de datos. Hice lo mismo con el receptor, desconecte pin_CE = 9 y empece a recibir estas cadenas Dato0= nan V, Dato1= nan ms Dato3= nan.

    • Avatar
      walter
      sep 3, 2017

      Buenas noches, tengo un problema con el programa, el emisor no funciona y ya revise las conexiones y también cambie la placa de arduino tengo dos megas pero por algún motivo se bloquea al entrar al "bool" el copio el codigo pues ya lo he revisado y no encuentro la falla agradezco a la persona que me pueda ayudar

      #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]=3.14;
      //enviamos los datos
      //Serial.println(datos[1]);
      int dato=65;
      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);
      }

      • Avatar
        Naylamp
        sep 19, 2017

        Hola Walter, ten en cuenta que la conexión para un Arduino Mega es diferente al de la imagen. Para descartar si tu NRF24L01 está defectuoso, intercambie el Receptor por el Emisor, y ya no debería bloquearse en el Loop, de todas formas es mejor probar con un tercer NRF para descartar si es un problema de hardware

      • Avatar
        fernando
        oct 7, 2019

        Walter, no se si estoy a tiempo pero. Probá: 1) cambiar byte direccion[5] ={'c','a','n','a','l'}; por byte direccion[5] ={'c','a','n','a','l','1'}; [5] significa que son 5 datos 2) bool isChipConnected(); para saber si el chip está funcionando 3) en lugar de bool ok = radio.write(datos, sizeof(datos)); utilizá:radio.write(datos, sizeof(datos)); bool ok = txStandBy(1000); if(ok){print("envío concretado");}Saludos

    • Avatar
      Justo Velarde
      sep 15, 2017

      Saludos. Muy buen tutorial y lo voy a implementar por que me interesa mucho la transmisión de datos por RF., Tengo grandes ideas. Una consulta, cuando voy al link de la libreria NRF24 me sade una serie de archivos y cuando entro en ellos se displaya su contenido; entonces, debo copiar cada contenido en cada nombre de archivo (creándolo) y así con todos los demas archivos? incluyendo los ejemplos y los readme? Esa parte no entiendo, cuando dices:" la librería la encuantras en el siguiente link..." Gracias y saludos desde Lima-Perú.

      • Avatar
        Naylamp
        sep 19, 2017

        Hola Justo, para descargar la librería desde github, en el directorio principal de la librería, hay un opción de "clone o download" desde allí puedes descargar el .Zip para posteriormente agregarlo desde el IDE arduino.

    • Avatar
      Oscar
      sep 28, 2017

      a mi el receptor me envia en el monoitor serial Dato0= nan V, Dato1= nan ms Dato3= nan Alguna ayuda al respecto el emisor muesta en el serial print que varia segun el pot???

      • Avatar
        Pablo
        nov 23, 2017

        Hola oscar . Asi es . El emisor envia el valor del pot mas el valor de millis que cuenta desde que se energiza el arduino y el tercer valor es el de pi, o sea 3,14

    • Avatar
      Facundo Beade
      oct 23, 2017

      Hola, muy bueno el post.. Tengo una consulta, estoy usando el modulo, con antena externa (en emisor y receptor). Estando cerca funciona perfecto, pero si me alejo mas de 20m, deja de funcionar (todo en linea recta). Hay algo que puedo estar haciendo mal? Ya leí el datasheet (uso pic, y yo genere todo la configuración y mi librería propia), y configure de distintas formas los registros de potencia de los modulos, y velocidad de transmisión, pero no logro superar los 20m de alcance. Desde ya muchas gracias.

    • Avatar
      manuel moyano
      nov 2, 2017

      hola usando esta logica de programacion como puedo controlar un servomotor como actuador de 0 -25-50-75-100 % de modulacion via wifi desde otro arduino con dos modulos wifi NRf2410.?

    • Avatar
      VICTOR ARRASCUE VITTE
      nov 2, 2017

      ME sale que no hay datos disponibles

    • Avatar
      David
      nov 16, 2017

      Tambien me pasaigual. no hay tatos diponibles.

    • Avatar
      jose israel
      nov 17, 2017

      hola quisiera saber porque no logro mas de rango de comunicacion solo alcanza los 15 metros

    • Avatar
      Pablo h ramirez
      nov 22, 2017

      Hola queria agradeser tanta pasion por este tema y la info que brindas es inmensa . Eres un maestro. He logrado la comunicacion de dos arduinos nano cada uno con su modulo nrf24l01 (sin antena exterior)y el alcance maximo al aire libre fue de 25 metros. En el emisor coloque tres potenciometros a las entradas analogas del ardu-emisor y en el ardu-reseptor coloque 3 servos gs90 de los pequeños azules transparentes. Los servos responden a tiempo real practicamente. Solo bibran un poco los servos pero es solo por la mala coneccion de los potenciometros y la estatica de la mano al tocarlos

    • Avatar
      Cosme
      nov 26, 2017

      Tengo un problema, los valores del receptor me dan:Dato0= nan V Dato1 = nan ms Dato2 = nan Esto a que se refiere?

    • Avatar
      armin
      dic 21, 2017

      Una pregunta, quiero conectar un modulo nrf1 que me envie señal a otro nrf2 y este a un nrf3, cual es el procedimiento? ya que el nrf2actuaria como receptor y transmisor?? Gracias

    • Avatar
      jordy
      ene 21, 2018

      podrias ayudarme ...tengo error al compilar el codigo , el codigo que tengo se basa al tuyo: //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[1] = {0x7878787878LL};//creamos el objeto radio (NRF24L01) RF24 radio(9, 10);//vector para los datos recibidos float datos[2] void setup() { //inicializamos el NRF24L01 radio.begin(); //inicializamos el puerto serie Serial.begin(9600); dht.begin(); //Abrimos el canal de Lectura radio.openReadingPipe(1, direccion[1]); //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("Humedad :"); Serial.print(datos[0]); Serial.print("% , "); Serial.print("Temperatura:"); Serial.print(datos[1]); Serial.print(" °C") } else { Serial.println("No hay datos de radio disponibles"); } delay(1000); }

    • Avatar
      gejemesa
      feb 5, 2018

      Hola! Tengo un problema (no es muy importante pero me causa un poco de problema). Hice un código muy extenso y funciona perfectamente la recepción y transmisión de datos. Sin embargo la función booleana de la transmisión (la que en tu código se llama ok) muestra siempre false. ¿Sabes por qué podría ser esto? Saludos

    • Avatar
      beatriz
      feb 15, 2018

      Hola. Cargo el emisor y el receptor pero solo me sale por pantalla Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00 veo que el problema lo solucionaron con las conexiones. Yo las he revisado y estan todas bien. El modulo receptor me parpadea la luz de TX pero en el emisor no me parpadea nada. No se como hacer para ver si esta enviando porque al poner el monitor, tampoco me dice nada. Una ayudita porfa!!! AH, tengo arduino uno. Gracias!

      • Avatar
        Francisco Javier Martinez
        oct 29, 2018

        que tal amigo pudiste resolver tu problema me pasa lo mismo

    • Avatar
      Juan Carlos
      feb 17, 2018

      hola amigo, felicidades excelente información. estoy comenzando con estos módulos y hay mucha informacion de como crear una red con un multireceptor y multiples transmisores pero yo requiero realizar lo contrario un transmisor que envié datos a múltiples receptores y ejecuten de acuerdo al dato recibido. podrías ayudarme con el procedimiento?

    • Avatar
      Fernando
      feb 22, 2018

      Hola, excelente trabajo. Por favor, necesito me digas que utilizar para que dos o más arduinos sepan donde están ubicados los restantes (sin usar gps). Gracias.

    • Avatar
      Ivan
      mar 10, 2018

      Hola, es necesario utilizar el módulo de alimentación para el nrf4l01 con antena externa?, alguien tiene un ejemplo de código y conexiones físicas? que pueda compartir ya sea de este post o otro. Y como testear un nrf24l01 si está dañado o no?

    • Avatar
      luis
      mar 12, 2018

      hola como estas mi problema es el siguiente quiero enviar a 30 esclavos implementados con arduino que enciendan un led los esclavos no trasmiten nada solo encienden el led y el maestro por medio de 30 botones envia la señal de encendido gracias solo el maestro envia los esclavos solo encienden un led no trasmiten ndad es posible

      • Avatar
        Angelo Francescoli Castillo Guerrero
        abr 24, 2019

        Cual es el codigo que usas solo para transmitir a los 30 esclavos?

    • Avatar
      ENRIQUE BELLO
      abr 17, 2018

      EXCELENTE FUNCIONO PERFECTAMENTE BIEN. SIGA ASI USTED ES MI INSPIRACION Y DE MIS HIJOS QUE ESTUDIAN ELECTRÓNICA. VENEZUELA.

    • Avatar
      Manuel
      may 5, 2018

      buenas tardes, el código mostrado funciona muy bien pero hay un problema, e modificado el retardo y cuando es 0 de retardo, el emisor envía los datos pero el receptor es mas rápido y esta en la espera de mas datos al final capta los que el emisor le envía, e empesando a modificar la libreria RF24.cpp y en write_payload cuando envía un arreglo unidimensional de tipo char este envía 32 datos por arreglo según la función, esto a que se debe?, trate de reducirlo de igual manera para read_payload y recibe pero si el emisor no envía nada ni cuenta seda que no le envías nada solo envía el ultimo dato enviado y si lo reduzco en write_payload ahí si ya no envía ni uno solo ; mi pregunta es ¿es necesario que envie por defecto un arreglo de 32 bytes como maximo? o es parte de su configuración y es nesesario modificar esto??. lo que yo kiero es enviar un byte nada mas y quería modificar esta configuración porque lo quiero lo mas rápido y creo que rellenando con ceros lo no me sirve(como lo hace la librería) retarda el programa pues quiero los datos lo mas antes posible porque requiero enviar datos del ADC para procesarlos en el destino ( filtro digital) y reproducirlo en un DAC , espero me deje entender y gracias de antemano por la ayuda

    • Avatar
      Alberto
      may 8, 2018

      me podrias apoyar con la librería "#include " no la encuentro

    • Avatar
      carlod Tejada
      may 14, 2018

      Buenas tardes. Muy interesante el tema y bien explicado. Alguien podría decirme su este módulo trabaja con un esp8266 bajo el entorno arduino?Muchas gracias

    • Avatar
      Moisés
      may 17, 2018

      BuenasConsultaHasta cuantos módulos se pueden conectar?Gracias Saludos

    • Avatar
      leyva
      may 28, 2018

      buenas muy bien tutorial solo que estoy trabajando arduino nano como emisor, no envía los valores y pierde comunicación con el pc para ver el monitor.Serial y el mismo problema para cargar un programa de nuevo algun consejo de como poder solucionarlo? gracias

    • Avatar
      Francisco
      jun 28, 2018

      Hola, una pregunta. es posible escribir y leer en un mismo canal? Es decir , quiero que mi arduino numero 1 mande a prender un led al arduino 2 y que después de cierto tiempo el arduino 1 pregunte el estado del led y el arduino 2 le conteste. Como se haría en ese caso? usando el mismo canal o usando distintos canales?

    • Avatar
      Cesar Moradel
      jul 5, 2018

      Saludos Naylamp.Excelente tutorial, me ha funcionado a la primera, felicidades y gracias. Espero tener la suerte de que me apoyes (no veo tus comentarios a las consultas desde septiembre del 2017 :) espero te encuentres bien de salud).Me apoyarías por favor, con el código para colocarle un HS-SR04 al Emisor y un Display LCD I2C 16x2 al Receptor para poder visualizar en el display las distancias que obtenga el HC-SR04. Es para un tanque de agua.Se te agradece mucho la atención a la presente. Un abrazo a la distancia desde Honduras.

    • Avatar
      juan
      ago 5, 2018

      Estimado conecte bien el transceptor, pero me dice que los datos no se pueden enviar

    • Avatar
      adrian rubio
      ago 29, 2018

      Hola, Gracias por su explicacion, tengo esta duda, estoy comunicando un tx con un Rx que van montado en locomotoras a escalas, pero tengo varias locomotoras y quiero colocarles address como para no se crucen las comunicaciones, cada locomotora dispone de su transmisor, y el codigo ya lo tengo funcionando muy bien , solo quiero saber como comunico por separados .

    • Avatar
      maxi
      sep 6, 2018

      Hola buenas tardes, primero felicitacioness por el tutorial,muy bien redactado. Queria hacerte una consulta sobre la conexcion en arduino nano, es igual que para el uno?

    • Avatar
      Carlos Andres Alavez
      sep 19, 2018

      Hola, me funciona, pero no siempre me mantiene la comunicación, por ratos lo envia y por ratos dice que no hay datos, es normal? incluso si lo dejo ahi solo sin mover pasa eso... me podrias explicar si es normal o no?

    • Avatar
      Yojana
      sep 24, 2018

      una pregunta porque nos tira error en la librería al declarar el modulo nRF en este: #include #include , eso nos tira error pero no sabemos porque si copiamos bien los códigos.

    • Avatar
      Oscar
      sep 26, 2018

      Hola Naylamp excelente explicación de tu trabajo, pero tengo un problema sencillamente no me funciona. No presento errores de cableado, llegan las tensiones perfectamente, los 2 códigos TX/RX compilan sin errores, estoy trabajando con un NRF24L01 con antena le tengo a los 2 Arduinos fuente externa y sólo sale el mensaje del TX"No se ha podido enviar" y en el RX "No hay datos de radio disponible".Agradezco tu colaboración para hacerlos transmitir.

      • Avatar
        Efren
        nov 27, 2018

        oye amigo si solucionaste tu problema

    • Avatar
      alextremo
      oct 2, 2018

      buen dia,disculpen alguien que me pueda ayudar, hice todo exactamente como lo dice el manual pero en el monitor serial del transmisor no me muestra nada, pero en el del receptor muestra " no hay dato de radio disponible", que estara pasando

    • Avatar
      José
      oct 15, 2018

      Hola, tengo un problema con estos módulos ya hace días. Me sale en el monitor serial Dato0= 0.00 V, Dato1= 0.00 ms, Dato2= 0.00 Cuando apago el EMISOR no sucede nada y me siguen enviando los mismo valores... Alguien le resulto? estoy a nada de comprar otro juego de NRF24L01 :/

    • Avatar
      Jeff
      oct 20, 2018

      Encontré la solución al problema que mencionan anteriormente, verificar que los pines PSI del arduino se encuentren operativos y esa impresión en el módulo en la que nos indican el nombre de cada uno de los pines se encuentran mal ubicados por lo que puede provocar que se quemen o no funcionan, guiarse de otro ejemplos el orden de los pines del módulo. Bueno con esto me funciono, suerte.

    • Avatar
      Staniek
      nov 7, 2018

      Hola buen día, tengo un proyecto en donde varios módulos envían datos almmismo tiempo. Quiero conectarlos de forma inalámbrica. No sé si con un solo receptor pueda capturar los datos o existirá colisión de datos, sí es así tendría que utilizar varios receptores nrf en una sola placa Arduino? Uno para cada módulo emisor. De antemano agradezco su ayuda.

    • Avatar
      Gustavo
      ene 7, 2019

      Buenos días, al compilar el sketch emisor y luego subirlo a la placa Arduino me muestra los datos que estoy enviando por el monitor serial sin problemas, en mi caso es el dato de un sensor ultrasonico digital HC-SR04, pero cuando compilo el sketch receptor me arroja el siguiente error:/usr/share/arduino/libraries/RF24_master/RF24.h:990:8: note: candidate expects 1 argument, 2 providedCabe señalar que tengo la librería NR24-master instalada. Pero el error refiere un problema con el constructor según alguna info que encontré en la web, como sea, se me esta haciendo un poco difícil dar con la solución, podrían ayudarme ??. Saludos cordiales.

    • Avatar
      damian
      ene 10, 2019

      Hola, después de probar muchos códigos en diferentes webs. Ya sé por qué a algunos si les funciona y a otros no les funciona tu código( a mi tampoco me funcionaba).La diferencia es:- Si usas el NRF24L01 CON el adaptador de pines, tienes que conectarlo a 5V - Si usas el NRF24L01 SIN el adaptador de pines, tienes que conectarlo a 3.3VSaludos.

    • Avatar
      Gustavo
      ene 23, 2019

      Hola buenas tardes, cargue los programas el dos Arduino UNO, uno como transmisor y el otro como receptor, configure los pines CE = 9, CSN = 10, MOSI = 11, MISO = 12 y SCK = 13, alimetacion del modulo a 3.3V y bueno GND en cada Arduino pero el transmisor me indica "No se ha podido enviar", y el receptor me indica "No hay datos de radio disponible". Cabe señalar que emisor lo tengo conectado con un adaptador de 12V y 1.5A, en otras palabras es autónomo y el receptor lo tengo conectado a mi Raspberry Pi 3.Por otra parte, pense que era cuestion de los modulos, que quizas uno ande mal o este malogrado y no transmita, pero encontre la manera de testearlo con un tutorial que encontre navegando, el codigo es el siguente, lo comparto:* ############################################################## #include "nRF24L01.h" #include "RF24.h" #include "printf.h" RF24 radio(9,10); // CE, CSN const uint64_t pipes[2] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL }; typedef enum { role_ping_out = 1, role_pong_back } role_e; const char* role_friendly_name[] = { "invalid", "Ping out", "Pong back"}; role_e role = role_pong_back; void setup(void) { Serial.begin(9600); printf_begin(); radio.begin(); radio.setRetries(15,15); radio.openReadingPipe(1,pipes[1]); radio.startListening(); radio.printDetails(); } void loop(void){ } *********************************************************************************Y el resultado que me arroja para el primer Arduino con su NRF24L01 es :STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 RX_ADDR_P0-1 = 0x0000000100 0xf0f0f0f0d2 RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 TX_ADDR = 0x0000000100 RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00 EN_AA = 0x3f EN_RXADDR = 0x03 RF_CH = 0x4c RF_SETUP = 0x07 CONFIG = 0x0f DYNPD/FEATURE = 0x00 0x00 Data Rate = 1MBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_HIGHY el resultado para el segundo Arduino con su modulo NRF24L01 es:STATUS = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 RX_ADDR_P0-1 = 0x0000000100 0xf0f0f0f0d2 RX_ADDR_P2-5 = 0xc3 0xc4 0xc5 0xc6 TX_ADDR = 0x0000000100 RX_PW_P0-6 = 0x20 0x20 0x00 0x00 0x00 0x00 EN_AA = 0x3f EN_RXADDR = 0x03 RF_CH = 0x4c RF_SETUP = 0x07 CONFIG = 0x0f DYNPD/FEATURE = 0x00 0x00 Data Rate = 1MBPS Model = nRF24L01+ CRC Length = 16 bits PA Power = PA_HIGHEntonces llego a la conclusión de que código de testeo si los esta reconociendo y devolviendome la información de ellos.Agradecería cualquier consejo que me ayude a resolver mis problema. Saludos cordiales

    • Avatar
      Willi
      ene 28, 2019

      Hola, tengo una duda en cuanto a los módulos NRF24, ambos módulos son de placa tipo c con antena, debe tener alguna característica especial el emisor o el receptor, o ambos deben ser idénticos?

    • Avatar
      elder
      feb 11, 2019

      hola, tengo un problema en este tutorial: tengo 4 módulos con antenas y solo una de ellas me sirvió para emitir, las 3 restantes me sirvieron de receptor al intercambiarlas: pero al intercambiarlas en el emisor no sirven. deben tener alguna configuración?

    • Avatar
      elder
      feb 11, 2019

      Hola tengo una duda con los módulos: resulta que realice todo el tutorial, cuento con 4 módulos cada, uno con antena, y solo uno de ellos me sirvió como emisor, los 3 restantes me sirvieron para recibir cuando los intercambie; pero estos 3 al ponerlos a emitir no pasaba nada. a que se debe esto? si se supone que todos los módulos son iguales.

    • Avatar
      jesus hernandez
      feb 12, 2019

      HOLA, PLANEO MONITOREAR ALGUNAS VARIABLES Y VISUALIZAR LA LECTURA EN EL RECEPTOR,CUANTOS SENSORES SE PUEDEN CONECTAR A UNA SOLA ANTENA?, O TENDGO QUE USAR OTRO ARDUINO CON OTRO CANAL HACIA EL RECEPTOR?, ESPERO SU AYUDA

    • Avatar
      Gratiniano Eduardo
      mar 8, 2019

      Acá indican mal, si van a usar Arduino MEGA el CSN debe ir conectado al pin 53, en el pin 10 no sirve para el MEGA ynunca les funcionará si lo conectán allí, sólo sirve si usan tarjetas basadas en el microcontrolador 328P

    • Avatar
      juan
      mar 25, 2019

      hola buenas noches muy bueno el uso de los modulos de RF Pregunta quiero usar la comunicacion de rf para enviar los datos que leo del puerto usb de la pc con arduino transmitirlos y recivir del otro lado y activar varios relay estoy usando el programa vixen ligth para programar la secuencia si alguien me da una mano dado que soy nuevo en la programacion con arduino desde ya muchas gracias

    • Avatar
      Fernando
      abr 30, 2019

      como puedo ingresar a estos módulos una señal de 232 o a su vez 485

    • Avatar
      Luis Eduardo
      may 17, 2019

      Hola. Es posible enviar las lecturas de 5 sensores de temperatura y recibirlas utilizando un solo transmisor y un solo receptor. Tengo dos NFER24L01 con antena externa y dos arduino uno. Gracias

    • Avatar
      irving
      may 26, 2019

      quisiera saber como seria un diagrama de flujo de este trabajo y para que sirve el potenciometro

    • Avatar
      Jannis
      jul 11, 2019

      Hola buenas tardes a todos tengo una consulta realice un mando RC de 6 canales con los módulos de nrf24 con el ejemplo q pones logré recibir datos pero mi pregunta es cómo hago para q cada palanca del joistik haga su respectiva función en el receptor al nombrar las variables pierdo la comunicación y la lectura de los joistik espero me puedan ayudar grat

    • Avatar
      Mauricio Valencia
      sep 9, 2019

      la solucion para el codigo es en cambiar la linea:bool ok = radio.write(&dato, sizeof(dato));porbool ok = radio.write(&dato, sizeof(unsigned long));solo es dejar el tamaño del dato con una longitud extensa.hacer lo mismo para la lecturaradio.read(datos,sizeof(datos));porradio.read(datos,sizeof(unsigned long));

    • Avatar
      afperea
      sep 9, 2019

      El problema que tienen es la falta de la libreria RF24, entren en su arduino en HERRAMIENTAS, luego en ADMINISTRAR BIBLIOTECAS y ahi busquen RF24, miren si esta instalada o no, si no esta instalar y listo el ejemplo funciona perfecto

    • Avatar
      jorge
      sep 27, 2019

      Hola, alguien pudo solucionar el problema de la transmisión nula. Segui el ejemplo al pie de la letra y solo transmite un cero, probe con distintas velocidades de transmisión y hasta con un numero fijo, probe dos versiones de librerias la 1.33 y la 1.30 y con las dos obtengo el mismo resultado.

Leave a Reply

* Name:
* E-mail: (Not Published)
   Website: (Site url withhttp://)
* Comment: