La invención de la radio revolucionó el mundo. Fue una herramienta exitosa para comunicar información a través de comunicación inalámbrica. Otro gran invento fue el teléfono. ¿Recuerdas aquellos días en los que usábamos aquellos voluminosos teléfonos fijos? Ahora la era ha cambiado. Los teléfonos fijos están siendo sustituidos por teléfonos móviles.
Tenemos que aceptar el hecho de que la comunicación inalámbrica se ha convertido en una parte esencial de nuestra vida. Si miramos a nuestro alrededor, encontraremos muchos dispositivos que funcionan mediante comunicación inalámbrica, como mouse, teclado, teclas de bloqueo, radio, teléfono inalámbrico y muchos más. Además, la comunicación inalámbrica a veces se denomina comunicación por radiofrecuencia (RF).

Fig. 1: Prototipo de dispositivo de comunicación inalámbrica basado en NRF24LE1
¿Por qué nos apasiona la comunicación inalámbrica? Las respuestas son obvias. En primer lugar, queremos deshacernos de los cables que nos rodean y nos causan irritación. En segundo lugar, queremos acceso remoto a la información. Estas son las razones que han aumentado la demanda de comunicación inalámbrica. No está lejos el momento en que la comunicación por cable quedará obsoleta.
Este artículo está dedicado a establecer una comunicación inalámbrica entre dos módulos NRF. Comenzaremos con el código básico para transmitir un valor de 8 bits de forma inalámbrica.
Repasemos algunas especificaciones sobre el transceptor de RF utilizado en el NRF24LE1.
En primer lugar, funciona en la frecuencia de 2,4 GHz, que se encuentra en la banda ISM de uso gratuito para fines industriales, científicos y médicos. Además, utiliza modulación GMSK.
En segundo lugar, NRF funciona a velocidades de datos de 250 Kbps, 1 Mbps o 2 Mbps. Además, el NRF24LE1 es totalmente compatible con otras series NRF24LXX. Usaremos nrfsdk (kit de desarrollo de software) proporcionado por Nordic Semiconductors Ltd.
Nota: Consulte nuestros artículos anteriores sobre este módulo para obtener una mayor comprensión.
Ahora discutiremos algunas funciones integradas proporcionadas por nrfsdk:
• hal_nrf_set_operation_mode: esta función se utiliza para seleccionar el modo TX o RX.
• hal_nrf_set_rx_payload_width: para establecer el ancho de la carga útil que se recibirá
• hal_nrf_set_power_mode: esta función se utiliza para activar la RF.
• hal_nrf_write_tx_payload: esta función recibe datos de carga útil para transmitirlos.
• CE_PULSE – Esta función inicia la transmisión
• CE_HIGH – Para habilitar el receptor
• hal_nrf_get_clear_irq_flags: esta función lee y borra indicadores de interrupción relacionados con la radio.
• hal_nrf_rx_fifo_empty: Para comprobar si el buffer Rx está vacío o no.
• hal_nrf_flush_tx: para vaciar el buffer Tx FIFO

Fig. 2: Imagen del dispositivo de comunicación inalámbrica basado en NRF24LE1
La descripción de varias funciones es:
Fig. 3: Tabla que enumera varias funciones del NRF24LE1
Estas funciones se utilizaron en el código. El código está comentado para una mayor comprensión. Comparta sus comentarios en la sección de comentarios a continuación.
Código fuente del proyecto
###
//Programa para //Programa para Rx /* Copyright (c) 2009 Nordic Semiconductor. Reservados todos los derechos. * *La información contenida en este documento es propiedad confidencial de Nordic * Semiconductor ASA. Los términos y condiciones de uso se describen detalladamente. * en el ACUERDO DE LICENCIA DE SOFTWARE ESTÁNDAR DE NORDIC SEMICONDUCTOR. * * A los licenciatarios se les concede el uso gratuito e intransferible de la información. EN EL * Se proporciona GARANTÍA de CUALQUIER TIPO. Este encabezado NO debe eliminarse de * el archivo. * * $Última revisión modificada: 2211 $ */ /** @filete * @brief Ejemplo de receptor primario ShockBurst mejorado * @defgroup esb_prx_example Ejemplo de receptor primario ShockBurst (PRX) mejorado * @{ * @ingroup nrf_examples * * @brief Este ejemplo monitorea los datos y escribe el primer byte (byte 0) del * cargas útiles recibidas a P0. * * El ejemplo muestra la configuración mínima requerida para recibir paquetes desde un * dispositivo transmisor primario (PTX). * * Se utilizan los siguientes parámetros de radio predeterminados: * - canal de radiofrecuencia 2 * - Velocidad de datos de 2 Mbps * - Dirección RX 0xE7E7E7E7E7 (tubería 0) y 0xC2C2C2C2C2 (tubería 1) * - CRC de 1 byte * * El proyecto @ref esb_ptx_example se puede utilizar como contraparte para transmitir los datos. * */ #include "nrf24le1.h" // Archivo de encabezado de E/S para NRF24LE1 #include "hal_clk.h" // biblioteca que contiene funciones de reloj #incluir// biblioteca de enteros estándar #include "hal_nrf.h" // biblioteca que contiene funciones de comunicación inalámbrica // Variables globales carga útil uint8_t(3); // carga útil a recibir // función principal vacío principal { #ifdef MCU_NRF24LE1 mientras (hal_clk_get_16m_source! = HAL_CLK_XOSC16M) { // Espere hasta que se esté ejecutando el oscilador de cristal de 16 MHz } #terminara si #ifdef MCU_NRF24LU1P // Habilitar radio SPI RFCTL = 0x10; #terminara si // Establece P0 como salida P0DIR = 0; // Habilitar el radio reloj RFCKEN = 1; // Habilitar interrupción de RF RF = 1; // Habilitar interrupción global EA = 1; // Configurar la radio como receptor principal (PTX) hal_nrf_set_operación_modo(HAL_NRF_PRX); // Establece el ancho de la carga útil en 3 bytes hal_nrf_set_rx_payload_width((int)HAL_NRF_PIPE0, 3); // Enciende la radio hal_nrf_set_power_mode(HAL_NRF_PWR_UP); // Habilitar receptor CE_ALTO; // Bucle infinito para(;;){} } // interrupción de radio NRF_ISR { uint8_t irq_flags; // Leer y borrar indicadores IRQ de la radio irq_flags = hal_nrf_get_clear_irq_flags; // Si se reciben datos if((irq_flags & (1<<(uint8_t)HAL_NRF_RX_DR)) > 0) { // Leer carga útil mientras(!hal_nrf_rx_fifo_empty) { hal_nrf_read_rx_payload(carga útil); } // Escribe la carga útil recibida(0) en el puerto 0 P0 = carga útil(0); } } /** @} */ //Programa para Tx /* Copyright (c) 2009 Nordic Semiconductor. Reservados todos los derechos. * *La información contenida en este documento es propiedad de Nordic Semiconductor ASA. *Los términos y condiciones de uso se describen detalladamente en NORDIC * CONTRATO DE LICENCIA DE SOFTWARE ESTÁNDAR DE SEMICONDUCTOR. * * A los licenciatarios se les concede el uso gratuito e intransferible de la información. EN EL * Se proporciona GARANTÍA de CUALQUIER TIPO. Este encabezado NO debe eliminarse de * el archivo. * * $Última revisión modificada: 2513 $ */ /** @filete * @brief Ejemplo de transmisor primario ShockBurst mejorado * @defgroup esb_ptx_example Ejemplo de transmisor primario ShockBurst (PTX) mejorado * @{ * @ingroup nrf_examples * * @brief Este ejemplo envía paquetes continuamente. El contenido de P0 es * enviado en el primer byte de carga útil (byte 0). * * El ejemplo muestra la configuración mínima requerida para transmitir paquetes a un * dispositivo receptor primario (PRX). * * Se utilizan los siguientes parámetros de radio predeterminados: * - canal de radiofrecuencia 2 * - Velocidad de datos de 2 Mbps * - Dirección TX 0xE7E7E7E7E7 * - CRC de 1 byte * * El proyecto @ref esb_prx_example se puede utilizar como contraparte para recibir los datos. * */ #include "nrf24le1.h" // Archivo de encabezado de E/S para NRF24LE1 #include "hal_clk.h" // biblioteca que contiene funciones de reloj #incluir // biblioteca de enteros estándar #include "hal_nrf.h" // biblioteca que contiene funciones de comunicación inalámbrica #incluir // biblioteca booleana estándar // Variables globales bool estático volátil radio_busy; // función principal vacío principal (vacío) { carga útil uint8_t(3); // carga útil a transmitir #ifdef MCU_NRF24LE1 mientras (hal_clk_get_16m_source! = HAL_CLK_XOSC16M) { // Espere hasta que se esté ejecutando el oscilador de cristal de 16 MHz } #terminara si #ifdef MCU_NRF24LU1P // Habilitar radio SPI RFCTL = 0x10U; #terminara si // Habilitar el radio reloj RFCKEN = 1U; // Habilitar interrupción de RF RF = 1U; // Habilitar interrupción global EA = 1U; // Enciende la radio hal_nrf_set_power_mode(HAL_NRF_PWR_UP); // Bucle infinito para(;;) { // Poner el contenido de P0 en la carga útil(0) carga útil(0) = ~P0; // escribe complemento de Port0 // Escribe la carga útil en la radio TX FIFO hal_nrf_write_tx_payload(carga útil, 3U); // Alternar señal de radio CE para iniciar la transmisión CE_PULSO; radio_busy = verdadero; // Espere a que finalice la operación de radio mientras (radio_ocupada) { } } } // interrupción de radio NRF_ISR { uint8_t irq_flags; // Leer y borrar indicadores IRQ de la radio irq_flags = hal_nrf_get_clear_irq_flags; cambiar(irq_flags) { // Transmisión exitosa caso (1 << (uint8_t)HAL_NRF_TX_DS): radio_ocupada = falso; // Los datos han sido enviados romper; // Falló la transmisión (retransmisiones máximas) caso (1 << (uint8_t)HAL_NRF_MAX_RT): // Cuando se produce una interrupción MAX_RT, la carga útil de TX no se eliminará del TX FIFO. // Si se va a descartar el paquete, esto debe hacerse manualmente vaciando el TX FIFO. // Alternativamente, se puede llamar a CE_PULSE reiniciando la transmisión de la carga útil. // (Sólo será posible después de que se borre las banderas de radio irq) hal_nrf_flush_tx; radio_ocupada = falso; romper; por defecto: romper; } } /** @} */ ###
Diagramas de circuito
| Diagrama de circuito: dispositivo de comunicación inalámbrico basado en NRF24LE1 | ![]() |
Vídeo del proyecto
