Comunicación Transparente con módulos NRF24L01.
Comunicación bidireccional usando 2 módulos NRF24L01.
Presentación.
Este proyecto se centra en la creación de una comunicación inalámbrica bidireccional entre dos dispositivos mediante el uso de módulos NRF24L01. Estos dispositivos tienen la capacidad de intercambiar datos de hasta 30 caracteres a través del monitor serial. La comunicación entre ellos se lleva a cabo de manera transparente, lo que implica que los datos pueden ser transmitidos y recibidos por ambos módulos.
Funcionamiento.
Una vez realizada la correcta conexión de ambos módulos, se conectan a dos equipos PC, un módulo por cada PC. Luego, procedemos a escribir y enviar los datos desde el monitor serial, los cuales deberán llegar al otro equipo. Posteriormente, se puede responder de la misma manera al otro módulo. De esta forma, se establece la comunicación entre ellos mediante el intercambio de caracteres alfanuméricos.
Realización.
Materiales:
- 2 módulos NRF24L01.
- 2 Arduinos Uno.
- Cables.
El circuito queda en la siguiente manera:
Conexión:
Las Conexiones van de la Siguiente Manera:
NRF24L01 |
Arduino |
VCC |
3.3 V |
GND |
GND |
CSN |
PIN 10 |
CE |
PIN 9 |
MOSI |
PIN 11 |
SCK |
PIN 13 |
MISO |
PIN 12 |
Conexión Final:
Programación.
Programa 1. Código Arduino Uno.
#include <nRF24L01.h> // Incluye la biblioteca para el módulo de radio NRF24L01
#include <RF24.h> // Incluye la biblioteca para interactuar con el módulo NRF24L01
#include <RF24_config.h> // Incluye la configuración predeterminada para la biblioteca RF24
#include <SPI.h> // Incluye la biblioteca SPI para la comunicación con el módulo NRF24L01
const int pinCE = 9; // Define el pin CE (Chip Enable) al pin 9 del Arduino
const int pinCSN = 10; // Define el pin CSN (Chip Select Not) al pin 10 del Arduino
RF24 radio(pinCE, pinCSN); // Declara un objeto RF24 llamado radio e inicializa los pines CE y CSN
const uint64_t pipe2 = 0xE8E8F0F0E2LL; // Define la dirección de la tubería de comunicación 2
const uint64_t pipe3 = 0xE8E8F0F0E3LL; // Define la dirección de la tubería de comunicación 3
char data[32]; // Declara un arreglo de caracteres para almacenar datos recibidos
char data3[32]; // Declara un arreglo de caracteres para almacenar datos a enviar
void setup(void) {
Serial.begin(9600); // Inicializa la comunicación serial a 9600 baudios
radio.begin(); // Inicializa la comunicación con el módulo NRF24L01
radio.openReadingPipe(1, pipe2); // Abre una tubería de lectura en el tubo 1 con la dirección pipe2
radio.setPALevel(RF24_PA_HIGH); // Establece el nivel de potencia de la antena en alto
radio.setDataRate(RF24_2MBPS); // Establece la tasa de datos en 2 Mbps
radio.startListening(); // Pone el módulo en modo de escucha para recibir datos
}
void loop(void) {
if (radio.available()) { // Verifica si hay datos disponibles para recibir
radio.read(data, sizeof(data)); // Lee los datos recibidos y los guarda en el arreglo data
Serial.print(" "); // Imprime un espacio en la consola serial
Serial.println(data); // Imprime los datos recibidos en la consola serial
radio.stopListening(); // Detiene la escucha para enviar datos
}
if (Serial.available()) { // Verifica si hay datos disponibles en el puerto serial para enviar
radio.stopListening(); // Detiene la escucha para enviar datos
String miString = Serial.readStringUntil(' '); // Lee los datos del puerto serial hasta encontrar un salto de línea y los guarda en miString
miString.trim(); // Elimina los espacios en blanco al principio y al final de la cadena miString
Serial.print(" "); // Imprime un espacio en la consola serial
Serial.println(miString); // Imprime los datos recibidos del puerto serial en la consola serial
if (miString != "") { // Verifica si miString no está vacío
miString.toCharArray(data3, sizeof(data3)); // Convierte miString en un arreglo de caracteres y lo guarda en data3
data3[miString.length()] = '