Comunicación Transparente con módulos NRF24L01.

Comunicación bidireccional usando 2 módulos NRF24L01.

...
Posteado por Caamal el 09-06-2024 a las 23:14
Categoria: Arduino
Realizado por: Caamal Balan Carlos Daniel, Eduardo Antonio Bermúdez Alejandro y Catzin Concha Víctor Alberto.

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()] = '';  // Añade un carácter nulo al final de data3

      radio.openWritingPipe(pipe3);     // Abre una tubería de escritura con la dirección pipe3

      radio.write(data3, sizeof(data3), pipe3);  // Envía los datos contenidos en data3 a través de la tubería abierta

      radio.startListening();   // Vuelve a poner el módulo en modo de escucha para recibir datos

    }

    radio.startListening();     // Pone el módulo en modo de escucha para recibir datos

  }

}

Programa 2. 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()] = '';  // Añade un carácter nulo al final de data3

      radio.openWritingPipe(pipe3);     // Abre una tubería de escritura con la dirección pipe3

      radio.write(data3, sizeof(data3), pipe3);  // Envía los datos contenidos en data3 a través de la tubería abierta

      radio.startListening();   // Vuelve a poner el módulo en modo de escucha para recibir datos

    }

    radio.startListening();     // Pone el módulo en modo de escucha para recibir datos

  }

Utilización.

En tu programa Arduino Uno tener que configurar lo siguiente:

  1. Ingresar al programa Arduino.
  2. Descargar las librerías que el código necesita, esto en caso de que te marque error al querer cargar el programa al Arduino.
  3. Verifica que las conexiones sean correctas, de lo contrario el módulo podría quemarse fácilmente o al abrir el puerto serial van aparecer caracteres muy raros, esto debido a que no está bien conectado el modulo al Arduino.
  4. Cargar un código a cada Arduino, esto dependiendo lo que te corresponda hacer, recuerda que ambos códigos envían y reciben datos.
  5. Una vez hecho, abre el puerto serial y verifica que los baudios estén a 9600 en los dos programas.
  6. De esta manera nuestro proyecto estaría funcionando correctamente, solo escribe los caracteres que tu gustes y envíalos, dicho envió le debe llegar y aparecer en el otro programa que también puede responder con los caracteres alfanuméricos, como se muestra en la siguiente imagen:

Conclusiones.

Carlos: En conclusión, lo considero un proyecto muy bueno ya que nos muestra cómo dos dispositivos pueden comunicarse de manera inalámbrica utilizando módulos NRF24L01. Con una capacidad de intercambio de datos de hasta 30 caracteres, podemos enviar y recibir información a través del monitor serial. Esta comunicación fluida y bidireccional abre un mundo de posibilidades para aplicaciones que requieren una conexión inalámbrica confiable, como sistemas de control remoto o monitoreos en áreas de seguridad informática. Es una solución simple y efectiva para establecer comunicación entre dispositivos de manera eficiente.

Bermúdez: Aprendí cómo usar el módulo NRF24L01 para establecer una comunicación inalámbrica bidireccional entre dos dispositivos, transmitiendo datos de hasta 30 caracteres y utilizando la terminal serial para interactuar con ellos.

Víctor: En este proyecto, obtuve el conocimiento sobre el funcionamiento del módulo NRF24L01 para establecer una comunicación inalámbrica bidireccional entre dos dispositivos. Durante este proceso, se ha aprendido a transmitir caracteres alfanuméricos y a interactuar con los dispositivos mediante la terminal serial. Esta experiencia proporciona una comprensión más profunda de las capacidades y aplicaciones de la tecnología inalámbrica en el ámbito de la comunicación de datos.

Referencias.

  • Ramírez, J. (2020). Arduino nRF24L01 módulo transceptor + código, conexión. Arduino Spain. Recuperado 14 de abril de 2024, de https://sp.arduino-france.site/modulo-nrf24l01/
  • NRF24L01 comunicación de dos arduino por radiofrecuencia. (2019, 4 mayo). Geek Factory. Recuperado 14 de abril de 2024, de https://www.geekfactory.mx/tutoriales-arduino/nrf24l01-comunicacion-de-dos-arduino-por-radiofrecuencia/

Para comentar debes acceder Acceder

Comentarios


No hay comentarios en este post