Luego de llevar varios días luchando con este módulo, he decido hacer una guía para poder entender mejor el funcionamiento de las librerías disponibles, y hablo en plural, porque la mayoría de ellas funcionan de la misma manera, en este caso yo estoy trabajando con Arduino y Raspberry, pero en ambos casos son las mismas funciones.
CONEXIÓN
Los pines de conexión de este módulo, en su versión con antena y sin antena, son los mismos.
Imagen con el nombre de cada pin:
Para conectarlo a un dispositivo se debe conocer los pines SPI, aquí usaré los del Arduino UNO:
Debería quedar algo así
LIBRERÍAS
Gracias a la mención de surbyte de la librería TMRh20 decidí probarla como me gustaron sus prestaciones y su facilidad, utilizaré esta librería, que en verdad son 3.
Se deben instalar las 3 para usar la librería "mesh"
1. GitHub - nRF24/RF24: OSI Layer 2 driver for nRF24L01 on Arduino & Raspberry Pi/Linux Devices
Con las funciones básica del módulo
2. GitHub - nRF24/RF24Network: OSI Layer 3 Networking for nRF24L01(+) Radios on Arduino and Raspberry Pi
Permite crear un red utilizando el protocolo TCP/IP
3. GitHub - nRF24/RF24Mesh: OSI Layer 7 Mesh Networking for RF24Network & nrf24L01+ devices (Usaremos los ejemplos de esta librería)
Permite realizar una red de una manera más amigable
Es necesario descargar e instalar las 3 librerías anteriores para seguir los ejemplos.
USO
Una vez instaladas, explicaré rápidamente el funcionamiento de los tres ejemplos principales de la librería MESH que usaremos en esta ocasión (Archivo->Ejemplos->RF24Mesh)
- RF24Mesh_Example_Master.ino
Este archivo permite dejar un dispositivo con el módulo NRF24L01 como máster o servidor.
Lo único que se debe configurar son los pines CE y SCN si es que los tienes algún pin diferente al 7 y 8
RF24 radio(7,8);
setNodeID debe ser "0" para que el módulo sea el máster
mesh.setNodeID(0);
[Opcional] Existe una opción llamada setStaticAddress permite definir una dirección estática a un ID específico, como cuando configuras una IP específica en tu router con la MAC de la tarjeta de red.
mesh.setStaticAddress(23, 02);
mesh.setStaticAddress(24, 03);
RF24Mesh_Example.ino
Este código será utilizado por los nodos que se conecten al máster
Se verifica nuevamente los pines de conexión
RF24 radio(7,8);
Y ahora habrá que definir el ID que quieres designar a ese nodo especifico.
#define nodeID 1
Como los ejemplos son fáciles de seguir, sólo daré una explicación básica del resto de los ejemplos
RF24Mesh_Example_Master_to_Nodes.ino
Envía información desde el módulo máster a un nodo específico
RF24Mesh_Example_Node2Node.ino
Envía información desde un nodo a otro nodo (sin un master)
Una vez que configuras un Arduino como máster y uno como nodo automáticamente comienzan a comunicarse.
Cualquier información extra la iré agregando.