Páginas

viernes, 11 de enero de 2013

Emisor/Receptor Wireless nRF24L01+ Arduino



 

  

 

 

 

Emisor/Receptor Wireless nRF24L01+ Arduino


Vamos a ver como podemos conectar 2 Arduinos mediante en un emisor/receptor Wireless nRF24L01+. Utilizando la librería MirfSpiDriver o simplemente Mirf.


Conectamos los pins del módulo a las entradas digitales del Arduino de la siguiente forma:




Módulo nRF24L01+
Arduino
Arduino Mega
VCC
3,3V
3,3V
GND
GND
GND
MISO
12
50
MOSI
11
51
SCK
13
52
CE
8
8
CSN
7
7





Una vez tengamos conectados los 2 módulos a cada uno de los Arduinos que queremos conectar podemos probar con este ejemplo de un chat muy sencillo. Descargamos la librería Mirf de la web de Arduino.cc Descargar Mirf.zip (URL alternativa Descargar Mirf.zip) y la descomprimimos en el directorio del IDE -> libraries.

// Emisor/Receptor Wireless nRF24L01+

 

// Conectamos el emisor de la siguiente forma:

// Hardware SPI:

// MISO -> D12

// MOSI -> D11

// SCK  -> D13

// CE   -> D8

// CSN  -> D7

// Todas las entradas son Digitales

// http://arubia45.blogspot.com.es/

 

 

#include <SPI.h>

#include <Mirf.h>

#include <nRF24L01.h>

#include <MirfHardwareSpiDriver.h>

 

char *cadena;

String inputstring = "";              //cadena recibida desde el PC

boolean input_stringcomplete = false; //cadena recibida completamente desde el PC

 

void setup()

{

  Mirf.spi = &MirfHardwareSpi;

  // inicio de la emision

  Mirf.init();

  

  // Se envia un byte cada vez

  Mirf.payload = 1;

  

  // seleccionamos el canal

  Mirf.channel = 90;

  Mirf.config();

 

  // 1MHz

  Mirf.configRegister(RF_SETUP,0x06);

  

  // Seleccionamos dirección

  Mirf.setTADDR((byte *)"TX_01");

  

  Serial.begin(57600);

  Serial.println("Iniciando ...");

  

}

 

// enviar cadena 

void transmit(const char *string)

{

  byte c; 

  

  for( int i=0 ; string[i]!=0x00 ; i++ )

  { 

    c = string[i];

    Mirf.send(&c);

    while( Mirf.isSending() ) ;

  }

}

 

// enviar una secuancia CR/LF 

void transmitlf(void)

{

  byte c;

  

  c = '\r';

  Mirf.send(&c);

    while( Mirf.isSending() ) ;

  

  c = '\n';

  Mirf.send(&c);

    while( Mirf.isSending() ) ;

}

 

//Evento de recepcion de caracteres desde el PC

void serialEvent() { 

  char inchar = (char)Serial.read(); 

  // Añadimos el caracter recibido a la cadena

  inputstring += inchar; 

  // Fin de la cadena, recibido <CR>

  if(inchar == '\r') {input_stringcomplete = true;} 

}       

 

 

void loop() 

{

// Si se escribe algo por el puerto Serie lo envia.

  if (input_stringcomplete) {

    inputstring.toCharArray(cadena, 10);

    transmit(cadena);

    transmitlf();

    Serial.print("Yo-> ");

    Serial.println(inputstring);

    input_stringcomplete = false;

    inputstring = "";

  }

 

// Esperando recepción

  byte c; 

 

  if( Mirf.dataReady() )

  {

     Mirf.getData(&c);

     Serial.print("El otro-> ");

     Serial.write(c);

  }
 

} 
Bajar ejemplo (URL alternativa Bajar ejemplo)


Una vez tengamos cargados los sketchs en los 2 Arduinos abrimos el Monitor Serial de ambos. Donde podremos chatear entre ellos.

Hay que poner el terminal en modo Retorno de Carro y a 57600 baudios.











Los 2 módulos wireless se pueden comprar por menos de 2€, por ejemplo en eBay: comprar Ebay


¿Te gusta mi blog?
Comprame una cerveza…