módulos de comunicación NRF24L01

NRF_0

módulos de comunicación rf ( NRF24L01)

DESCRIPCIÓN

 Este tutorial consiste en el uso de los módulos de comunicación RF (radio frecuencia) NRF24L01+ (2 pzas). Estos módulos serán conectados cada uno a un Arduino Uno para mandar un string de un máximo 10 caracteres incluyendo /r y /n, mediante el monitor serial de su respectivo COM. El modo del monitor serial está configurado como retorno de .

MATERIALES

–       Módulo de comunicación inalámbrica NRF24L01 (2 pzas)

–       2  Arduino Uno

–       2 Cables USB serial

CONEXIÓN

NRF_2

 

 NRF_1

 

 

 



INTRODUCCIÓN

MÓDULO DE COMUNICACIÓN INALÁMBRICA NRF24L01

DESCRIPCIÓN

 

El nRF24L01 es un circuito altamente integrado, de ultra bajo consumo (ULP), transceptor de RF de 2Mbps para la banda ISM de 2,4 GHz (Industrial, Scientific and Medical). Con corrientes inferiores a 14 mA, administración avanzada de energía, y una gama de alimentación de 1,9 a 3,6 V, el nRF24L01 ofrece una solución que permite una duración verdadera de meses a años de duración de la batería cuando se ejecuta con pilas de botón o AA / AAA.

El nRF24L01 integra un transceptor RF de 2,4 GHz que soporta una interfaz SPI de alta velocidad para el controlador de la aplicación. No se requieren filtros externos, resonadores, o diodos VCO.

Caracteristicas del modulo NRF24L01+

·         2,4 GHz GFSK RF transceptor IC

·         Operación en la banda ISM de 2,4 GHz sin licencia en todo el mundo

·         1 Mbps y 2 Mbps de velocidad de datos en el aire

·         Enhanced ShockBurst ™ protocolo hardware acelerador

·         Bajo consumo de energía – meses o años de vida de la batería

·         Compatible con todas las Series nRF24L Nordic en 1 y el modo 2 Mbps

·         Compatible con nRF24E Nordic y nRF240 Series en el modo de 1Mbps

PROGRAMA EN C PARA AMBOS ARDUINOS UNO

// Emisor/Receptor Wireless nRF24L01+

#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

char cadena[10]; //Cadena de caracteres para enviar
String inputstring = ""; //Cadena recibida desde el PC
boolean input_stringcomplete = false; //Cadena recibida completamente desde el PC

void setup()
{

 Mirf.spi = &MirfHardwareSpi; //Inicializa controlador de SPI
 Mirf.init(); //Inicializa PINES del SPI
 Mirf.payload = 1; //Define el payload, cantidad de bytes que enviara el NRF
 Mirf.channel = 90; //Seleccion de canal
 Mirf.config();
 Mirf.configRegister(RF_SETUP,0x06); // 1MHz

 Mirf.setTADDR((byte *)"TX_01"); // Seleccion de Direccion
 Serial.begin(57600); //Inicializa Serial a 57600 baudios
 Serial.println("Iniciando ...");

}

// ENVIO DE CADENA
void transmit(const char *string)
{
 byte c;
 for( int i=0 ; cadena[i]!=0x00 ; i++ ){
 c = cadena[i];
 Mirf.send(&c);
 while( Mirf.isSending() ) ;
 }

}
// ENVIO DE CR/LF
void transmitlf(void)
{
 byte c;
 c = '\r';
 Mirf.send(&c);
 while( Mirf.isSending() ) ;

 c = '\n';
 Mirf.send(&c);
 while( Mirf.isSending() ) ;
}

//Recepcion de caracteres desde serial
void serialEvent() {
 char inchar = (char)Serial.read();
 // Concatena caracter ingresado
 inputstring += inchar;
 // Fin de la cadena, recibido <CR>
 if(inchar == '\r') {input_stringcomplete = true;}
} 

void loop()
{
// Condicion para enviar datos
 if (input_stringcomplete) {
 inputstring.toCharArray(cadena, 10); //Conversion de String a arreglo de caracteres
 transmit(cadena); //Transmite cadena ingresada
 transmitlf(); //Transmite CR/LF 

 Serial.println("YO: ");
 Serial.println(inputstring);
 input_stringcomplete = false;
 inputstring = "";
 }

 byte c;
 int ascii;
//Condicion de Recepcion de datos
 if( Mirf.dataReady() )
 {
 Mirf.getData(&c); //Funcion de libreria MIRF que recibe Byte
 ascii=c; //
 char caracter= (char)ascii; //Casting de char para convertir de int a char
 Serial.print(caracter);
 }

}

DETALLES DE PROGRAMA

Incluye SPI.h la cual controla todo lo relacionado con este protocolo.

Incluye Mirf.h la cual declara las funciones que controlaran al módulo.

Incluye nRF24L01.h contiene las definiciones de comandos en Hexadecimal.

Incluye MirfHardwareSpiDriver.h, esta librería funciona para comunicarse con el NRF24L01 mediante SPI.


#include <SPI.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <MirfHardwareSpiDriver.h>

El siguiente segmento de  código es para inicializar el módulo NRF24L01, al lado derecho de cada línea de código hay un comentario explicando lo que hace.

void setup()
{
  Mirf.spi = &MirfHardwareSpi; //Inicializa controlador de SPI
  Mirf.init(); // Llamda a función que inicializa PINES del SPI
  Mirf.payload = 1; //Define el payload, cantidad de bytes que enviara el NRF
  Mirf.channel = 90; // Función que hace la selección del canal por el cual se transmite
  Mirf.config(); //Inicializa los registros en el módulo y enciende el módulo en modo recovery
  Mirf.configRegister(RF_SETUP,0x06); // Asigna reloj a un solo byte al registro RF_SETUP
  Mirf.setTADDR((byte *)"TX_01");  // Selección de Dirección
  Serial.begin(57600);   //Inicializa Serial a 57600 baudios
  Serial.println("Iniciando ...");

Esta function transmit() se dedica a enviar lo ingresado desde consola de character en character, cabe mencionar que se debe enviar en formato byte (uint8_t)


void transmit(const char *string)
{
   byte c;
      for( int i=0 ; cadena[i]!=0x00 ; i++ ){
        c = cadena[i];
        Mirf.send(&c);
        while( Mirf.isSending() ) ;
      }

}

 

La función transmitlf() agrega el fin de la cadena (\n) y el carácter de escape para retornar el carro (‘\r’)

void transmitlf(void)
{
  byte c;
  c = '\r';
  Mirf.send(&c);
  while( Mirf.isSending() ) ;
  c = '\n';
  Mirf.send(&c);
  while( Mirf.isSending() ) ;
}

Función dedicada a la recepción de caracteres desde serial

void serialEvent() {
  char inchar = (char)Serial.read();  // Concatena caracter ingresado
  inputstring += inchar;  // Fin de la cadena, recibido <CR>
  if(inchar == '\r') {input_stringcomplete = true;}
}

Monitor_NRF (2)

Figura. Como se observa en la figura superior se están enviando las cadenas de caracteres entre COM52 y COM53

SONY DSC

Figura. Ejemplo de chat.

SONY DSC

Figura. Conexion de Modulos NRF24l01.

Este tutorial es propiedad de HeTPro. Queda expresamente prohibida la reproducción total o parcial por cualquier medio o soporte de los contenidos de esta publicación sin la autorización expresa del editor, cualquier duda, sugerencia o permiso para redistribuir el material favor de mandar un correo a contacto@hetpro.com.mx

Si la redistribución de este material es para fines educativos, difusión tecnológica o cualquier otro fin sin lucro, HeTPro está de acuerdo en que el material sea distribuido sin la necesidad de requerir el permiso del autor.

Para descargar la librería MIRF ingresa a: http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01

Para más ejemplos y tutoriales:

http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo



23 Comments

  1. Mario Alberto Mendez septiembre 19, 2014
    • Hector Torres septiembre 22, 2014
    • Administrador septiembre 23, 2014
  2. Emanuel octubre 21, 2014
    • Hector Torres octubre 21, 2014
  3. Julio Reyes octubre 30, 2014
  4. Emanuel octubre 30, 2014
  5. Andres Morales noviembre 12, 2014
  6. Ernesto Juarez mayo 19, 2015
    • Jesus mayo 21, 2015
  7. Arturo septiembre 29, 2015
    • Hector Torres octubre 1, 2015
      • Arturo octubre 6, 2015
  8. Alberto febrero 5, 2016
    • Hector Torres febrero 5, 2016
  9. raul lavié julio 18, 2016
    • Hector Torres julio 18, 2016
  10. Hugo octubre 30, 2016
    • Saul Jesus noviembre 7, 2016
  11. Carlos diciembre 15, 2016
    • Saul Jesus diciembre 16, 2016
  12. jean febrero 11, 2017

Leave a Reply