Generalidades NRF24L01 y bus SPI.

Los transceptores NRF24L01 son una serie de módulos de radio que trabajan en la banda 2,4 GHz (esta es banda libre y no requieren de ningún permiso para usarse en ninguna parte del mundo) integran un chip de Nordic Semiconductor referencia nRF24L01 en diferentes versiones las cuales también varían su alcance máximo de funcionamiento.

Puede encontrar comprar nrf24l01

 

NRF Larga distancia

 

NRF24L01 DISTANCIA CORTA

Al tratarse de un transceptor es bidireccional, mediante programa los ponemos en estado de receptor o emisor. El control y lo datos se realiza a través de bus SPI, compartido por la tarjeta de red y por la sd.
El protocolo SPI es un estándar de comunicaciones usado principalmente en la transferencia de información entre circuitos integrados en circuitos electrónicos.
Se trata de un bus serie de datos para la transferencia síncrona y bidireccional de información.
En toda comunicación por SPI deberá haber al menos un dispositivo actuando como maestro, y uno o más actuando como esclavos.

 

Las señales del protocolo SPI y planos de conexión:

  • SCLK: Es la señal de reloj, impuesta por el dispositivo maestro.
  • MOSI: Corresponde a las siglas “Master Output – Slave Input”, es decir, el maestro enviará los datos a través de esta línea y el esclavo los recibirá.
  • MISO: Corresponde a las siglas “Master Input – Slave Output”, y es la línea por la que los esclavos enviarán datos al dispositivo maestro.
  • SS: Es la señal de “Slave Select”, es decir, la línea que el maestro activará para indicar al esclavo que se va a establecer la comunicación con él.

Habitualmente, el pin MISO del maestro se conecta con el pin MOSI del esclavo, y viceversa. Además, la señal de selección de esclavo suele ser activa a nivel bajo.

 

Pines utilizados:

 

Arduino Mega Arduino Uno, Nano, Mini Atmega 328 NRF24L01
GND GND GND
3.3 3.3 VCC
Configurable Configurable (9 por defecto) CE
Configurable Configurable (10 por defecto) CSN
52 13 SCK
51 11 MOSI
50 12 MISO
No utilizado No utilizado IRQ

 

Instalación de equipos.

 

Descarga planos de conexión:

CONEXION NRF24L01 ARDUINO MEGA

CONEXION NRF24L01 ARDUINO-ATMEGA328

Consideraciones instalación:

Los modulos nrf24l01 necesitan una alimentación de 3.3v, La salida de 3.3v del arduino no es recomendable para la alimentación de estos módulos, para estos se necesita un regulador de alimentación como el ld117v33, el cual da una tensión perfecta para alimentar estos.

Si usa la Tornillo Shield ExControl usted dispondría de todo lo necesario para realizar la conexión sin problemas, pues esta shield ya incorpora una regulador de tensión de 3.3v.

 

conexion a tornillo arduino mega

Configuración de las comunicaciones.

El sistema configura entradas y salidas de forma automática, no es necesario que usted escriba ni una sola linea de código para hacer esto simplemente tiene que configurar entradas salidas en su proyecto.

para soluciones avanzadas que necesiten el envió de sus propios datos puede hacerlo de forma sencilla.

Para ver como se realizan la comunicaciones de forma avanzada mire el siguiente imagen.

nrffnetwork

Como veis podemos decir que tenemos dos zonas de datos, un array de salidas que se replica (o no , ya veremos esto para sensores de bajo consumo) en todos los arduino, en el arduino principal este array es NrRegs , este se replica en el array Output, este nos sirve para enviar datos a los arduino satélites a la unidad conectada a internet.

 

Por otro lado tenemos este array NrfInRegs en el arduino principal para las entradas y sensores remoto.

La forma de acceder a los datos recibidos en el arduino mega o principal es la siguiente, mediante el uso de array NrfInRegs puede acceder a todos los datos recibidos de todos los equipos arduino.

NrfInRegs[Número dispositivo][Número de registro]

 

Este tiene todos los datos enviados por los arduino hacia el arduino principal de la instalación, supongamos que queremos pasar a una variable el valor del sexto registro del slave 1.

int Value = NrfInRegs[1][5];

 

El sexto registro se modificaría en el slave de la siguiente manera.

TotalInput[5]=12; //Los valores cargados en Total Input se transfieren al arduino principal

 

Otro dato importante es que la nueva estructura del código arduino no tiene limitaciones en cuanto a número de dispositivos (no así el configurador).

Todos los datos son de tipo unsigned short.

 

En los array de entradas que se envían al arduino principal se se encapsulan automáticamente las entradas digitales configuradas en nuestro arduino.

Los primeros 6 elementos (0-5) son tratados en en nuestro coidgo como registros de entradas remotas, si han sido configurados con un pin de entrada (no obstante si no se usan como entradas puedes cargar los datos que quieras, pues en realidad el sistema no los usa).

 

Los siguiente 2 elementos 6 y 7 no tienen ningún tratamiento. y pueden ser utilizados para lo que queramos.

El elemento 8 no existe……..

Si suponemos que en nuestro master no usamos ninguna entrada, pues entonces los registros:

 

NrfInRegs[x][5]

NrfInRegs[x][4]

NrfInRegs[x][3]

NrfInRegs[x][2]

NrfInRegs[x][1]

NrfInRegs[x][0]

 

están disponibles, pues no los usa ninguna entrada.

Si usamos la primera entrada pues NrfInRegs[0] no está disponible pues ya la usa el sistema, por cada entrada adicional perdemos un registro.

Consideraciones finales Comunicación NRF24L01:

La comunicación entre equipos no se realiza de modo maestro esclavo, todos los equipos tienen libertad para comunicar, cuando se realiza un cambio en los array de datos estos cambios serán enviados de forma automática, por tanto si usted modifica con mucha frecuencia los datos en los arrays puede generar mucho trafico, haciendo que su red funcione de forma lenta.

 

Para optimizar esto, es necesario que analice su red y la optimice al maximo.

 

Vídeos demostración Funcionamiento:

 

Vídeos ayuda configuración Avanzada:

Configuración led RGB por nrf24l01.

 

Arduino nrf24l01 + pir 433Mhz.