Revista Tecnología

Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01

Publicado el 26 septiembre 2016 por Guille
En esta entrada vamos a usar el módulo NRF24L01. Con este módulo podemos llevar a cabo comunicaciones inalámbricas entre 100 y 200 metros de longitud máxima. El precio es realmente bajo, se pueden encontrar por menos de 2€. Los podéis conseguir en tiendas de electrónica, en Ebay y en Amazon. Podéis consultar el datasheet del integrado en el siguiente link. Además os dejo el enlace de la librería que usamos en el siguiente link.
Para esta entrada necesitamos:
  • 2  módulos NRF24L01
  • 2 arduinos
  • 1 led
  • 1 pulsador

Lo primero que tenemos que saber es como conectar el módulo NRF24L01 al arduino:
Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01 
Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01La columna que indica los colores, es referente a la forma de como se conectara nuestro dispositivo con respecto a la imagen que dejare anexada.
Una vez conocidos los pines, tenemos que descargarnos la libreria que he dejado al principio de la entrada y agregarla a las librerias de vuestro arduino.
Por otro lado, en el arduino que elijáis como emisor, debereís conectar el pulsador, en este caso al pin 2, y en el receptor el led al pin 2.
A continuación os dejo el montaje y el código del emisor y del receptor:

EMISOR


Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01
//exportamos la libreria mirf de nuestras librerias
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>
int pulsador = 2;
void setup()
{
 Serial.begin(9600);
  pinMode(pulsador, INPUT);
 // Iniciamos el modo de trasmision
 Mirf.spi=&MirfHardwareSpi;
 Mirf.init();
 // Nombre que le vas a dar a este modulo NRF24L01
 // seria el equivalente a la ip de un ordenador. 5 bytes maximo.

 Mirf.setRADDR((byte *)"RX_99");
// payload de un byte (es decir, un número entre 0 y 255). Si quiere mandar dos datos, ponemos un 2 (en vez de un 1), y así hasta cuantos datos queramos enviar
 Mirf.payload = 1;
 // indicamos el canal por el cual vamos a enviar la información. En el receptor tenemos que poner el mismo canal
Mirf.channel = 32;
// a configurar y vaciar cola FIFO
Mirf.config();
Serial.println("iniciando...");
}
void loop()
{
  int estado = digitalRead(pulsador);
  Serial.print("Valor pulsador: ");  
  Serial.println(estado);
// nombre del NRF24l01 al que vamos a emitir. (nombre del receptor el cual se configura en el programa arduino del receptor)Mirf.setTADDR((byte *)"TX_01");
//ahora emitimos
Mirf.send((byte*)&estado);
//esperamos a que termine de emitir
while( Mirf.isSending() ) ;
delay(1000);
}

RECEPTOR

Arduino Tutorial 24: Enviar datos digitales mediante NRF24L01
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
#include <nRF24L01.h>
#include <SPI.h>
const int led=2;
void setup()
{
 Serial.begin(9600);
pinMode(led,OUTPUT);
Mirf.spi=&MirfHardwareSpi;
Mirf.init();
// Nombre que le damos a este módulo NRF24L01.
// seria el equivalente a la ip de un ordenador. 5 bytes maximo.
Mirf.setRADDR((byte *)"TX_01");
// Payload, en bytes, a transmitir (es decir, un número entre 0 y 255). Si quiere mandar dos datos, ponemos un 2 (en vez de un 1), y así hasta cuantos datos queramos enviar
Mirf.payload = 1;
// el canal por el cual estaremos transmitiendo (el mismo que hemos puesto en el emisor)
Mirf.channel = 32;
// Esto inicia el mirf y borra la lista FIFO
Mirf.config();
}
void loop()
{
byte c;
// comprobamos que no hay datos a recibir.
if( Mirf.dataReady() )
{
// recibimos la información  y lo almacenamos en c
Mirf.getData(&c);
if(c==1)
{
digitalWrite(led,HIGH);
}
else
{
digitalWrite(led,LOW);
}
// imprimiremos en el puerto serial el estado que recibimos del PIR
Serial.print("El valor es: ");
Serial.println(c);
}
}
A continuación os dejo un vídeo con la demostración:

Como hemos comentado en el código, enviamos un byte, es decir, un número entre 0 y 255. Para este ejemplo no hemos tenido problemas ya que enviabamos un 0 ó un 1. Si queremos enviar señales analógicas, lo mejor es realizar una escala de 0 a 100 para poder enviarlo, es decir, convertir el valor analógico en el programa del emisor, enviarlo y si luego se desea, desconvertir el valor en el programa del receptor.El código para realizar esta conversión es:
position = map(humedad, 0, 1023, 0, 100);
Los dos primeros valores indican el valor mínimo y máximo que alcanza el instrumento analógico y los dos siguientes valores indican el valor mínimo y máximo que queremos que alcancen. En este caso el 0 analógico equivaldria a 0% y el 1023 analógico a 100%.

Volver a la Portada de Logo Paperblog