- El módulo RF nRF24L01
- Diagrama de circuito
- Programando Raspberry Pi para enviar mensajes usando nRF24l01
- Programando Arduino UNO para recibir mensajes usando nRF24l01
Los diseñadores utilizan muchos sistemas de comunicación inalámbrica como Bluetooth Low Energy (BLE 4.0), Zigbee, módulos Wi-Fi ESP8266, módulos RF 433MHz, Lora, nRF, etc. Y la selección del medio depende del tipo de aplicación en la que se esté utilizando. Todos, un medio inalámbrico popular para la comunicación de red local es el nRF24L01. Estos módulos operan en 2,4 GHz (banda ISM) con una velocidad de transmisión de 250 Kbps a 2 Mbps, lo cual es legal en muchos países y se puede utilizar en aplicaciones industriales y médicas. También se afirma que con antenas adecuadas, estos módulos pueden transmitir y recibir señales hasta una distancia de 100 metros entre ellos. Anteriormente usamos nRF24L01 con Arduino para controlar el servomotor y crear una sala de chat.
Aquí usaremos nRF24L01 - Módulo transceptor RF de 2.4GHz con Arduino UNO y Raspberry Pi para establecer una comunicación inalámbrica entre ellos. La Raspberry pi actuará como transmisor y Arduino Uno escuchará la Raspberry Pi e imprimirá el mensaje enviado por Raspberry Pi usando nRF24L01 en una pantalla LCD de 16x2. nRF24L01 también tiene capacidades BLE incorporadas y también puede comunicarse de forma inalámbrica mediante BLE.
El tutorial se divide en dos secciones. La primera sección incluirá la interfaz de nRF24L01 con Arduino para actuar como Receptor y la segunda sección incluirá la interfaz de nRF24L01 con Raspberry Pi para actuar como transmisor. El código completo para ambas secciones con video de trabajo se adjuntará al final de este tutorial.
El módulo RF nRF24L01
Los módulos nRF24L01 son módulos transceptores, lo que significa que cada módulo puede enviar y recibir datos, pero como son semidúplex pueden enviar o recibir datos a la vez. El módulo tiene el IC genérico nRF24L01 de Nordic semiconductores que se encarga de la transmisión y recepción de datos. El IC se comunica mediante el protocolo SPI y, por tanto, se puede conectar fácilmente con cualquier microcontrolador. Se vuelve mucho más fácil con Arduino ya que las bibliotecas están disponibles. Los pines de un módulo nRF24L01 estándar se muestran a continuación
El módulo tiene un voltaje de operación de 1.9V a 3.6V (típicamente 3.3V) y consume muy menos corriente de solo 12mA durante el funcionamiento normal, lo que hace que la batería sea eficiente y, por lo tanto, incluso puede funcionar con pilas de botón. Aunque el voltaje de funcionamiento es de 3,3 V, la mayoría de los pines son tolerantes a 5 V y, por lo tanto, pueden conectarse directamente con microcontroladores de 5 V como Arduino. Otra ventaja de usar estos módulos es que cada módulo tiene 6 Pipelines. Es decir, cada módulo puede comunicarse con otros 6 módulos para transmitir o recibir datos. Esto hace que el módulo sea adecuado para crear redes en estrella o en malla en aplicaciones de IoT. También tienen un amplio rango de direcciones de 125 ID únicos, por lo que en un área cerrada podemos usar 125 de estos módulos sin interferir entre sí.
Diagrama de circuito
nRF24L01 con Arduino:
El diagrama de circuito para conectar nRF24L01 con Arduino es fácil y no tiene muchos componentes. El nRF24l01 se conectará mediante una interfaz SPI y la pantalla LCD de 16x2 está interconectada con el protocolo I2C que utiliza solo dos cables.
nRF24L01 con Raspberry Pi:
El diagrama de circuito para conectar nRF24L01 con Raspberry Pi también es muy simple y solo se usa la interfaz SPI para conectar Raspberry Pi y nRF24l01.
Programando Raspberry Pi para enviar mensajes usando nRF24l01
La programación de la Raspberry Pi se realizará mediante Python3. También puede usar C / C ++ como Arduino. Pero ya hay una biblioteca disponible para nRF24l01 en python que se puede descargar desde la página de github. Tenga en cuenta que el programa Python y la biblioteca deben estar en la misma carpeta o el programa Python no podrá encontrar la biblioteca. Después de descargar la biblioteca, simplemente extraiga y cree una carpeta donde se almacenarán todos los programas y archivos de la biblioteca. Cuando termine la instalación de la biblioteca, simplemente comience a escribir el programa. El programa comienza con la inclusión de bibliotecas que se utilizarán en código como la biblioteca GPIO de importación para acceder a los GPIO de Raspberry Pi y el tiempo de importación para acceder a las funciones relacionadas con el tiempo. Si es nuevo en Raspberry Pi, vuelva a comenzar con Raspberry pi.
importar RPi.GPIO como tiempo de importación GPIO importar spidev desde lib_nrf24 importar NRF24
Configure el modo GPIO en " Canal Broadcom SOC". Esto significa que se está refiriendo a los pines por el número de "canal Broadcom SOC", estos son los números después de "GPIO" (por ejemplo, GPIO01, GPIO02…). Estos no son los números de la placa.
GPIO.setmode (GPIO.BCM)
A continuación, configuraremos la dirección de la tubería. Esta dirección es importante para comunicarse con el receptor Arduino. La dirección estará en código hexadecimal.
tubos =,]
Comience la radio usando GPIO08 como CE y GPIO25 como pines CSN.
radio.begin (0, 25)
Establezca el tamaño de la carga útil en 32 bits, la dirección del canal en 76, la velocidad de datos de 1 Mbps y los niveles de potencia como mínimo.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Abra las tuberías para comenzar a escribir los datos e imprima los detalles básicos de nRF24l01.
radio.openWritingPipe (tuberías) radio.printDetails ()
Prepare un mensaje en forma de cadena. Este mensaje se enviará a Arduino UNO.
sendMessage = list ("Hola.. Arduino UNO") while len (sendMessage) <32: sendMessage.append (0)
Empiece a escribir en la radio y siga escribiendo la cadena completa hasta que la radio esté disponible. Junto con él, anote la hora e imprima una declaración de depuración de la entrega del mensaje.
while True: start = time.time () radio.write (sendMessage) print ("Enviado el mensaje: {}". format (sendMessage)) enviar radio.startListening ()
Si la cadena está completa y la tubería está cerrada, imprima un mensaje de depuración de tiempo de espera agotado.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Timed out.") # imprimir mensaje de error si la radio está desconectada o ya no funciona romper
Deje de escuchar la radio y cierre la comunicación y reinicie la comunicación después de 3 segundos para enviar otro mensaje.
radio.stopListening () # cerrar radio time.sleep (3) # dar un retraso de 3 segundos
El programa Raspberry es fácil de entender si conoce los conceptos básicos de Python. El programa completo de Python se proporciona al final del tutorial.
Ejecutando el programa Python en Raspberry Pi:
La ejecución del programa es muy fácil después de seguir los siguientes pasos:
- Guarde el programa Python y los archivos de la biblioteca en la misma carpeta.
- Mi nombre de archivo de programa para el remitente es nrfsend.py y también todos los archivos están en la misma carpeta
- Vaya a la Terminal de Comando de Raspberry Pi. Y localice el archivo del programa python usando el comando "cd".
- Luego abra la carpeta y escriba el comando " sudo python3 your_program.py " y presione enter. Podrá ver los detalles básicos de nRf24 y la radio comenzará a enviar los mensajes cada 3 segundos. El mensaje de depuración se mostrará después de que se haya enviado con todos los caracteres enviados.
Ahora veremos el mismo programa como receptor en el Arduino UNO.
Programando Arduino UNO para recibir mensajes usando nRF24l01
Programar el Arduino UNO es similar a programar el Raspberry Pi. Seguiremos métodos similares pero con diferentes lenguajes de programación y pasos. Los pasos incluirán la parte de lectura de nRF24l01. La biblioteca para nRF24l01 para Arduino se puede descargar desde la página de github. Empiece por incluir las bibliotecas necesarias. Estamos usando LCD de 16x2 con I2C Shield, por lo que incluye la biblioteca Wire.h y también el nRF24l01 está interconectado con SPI, por lo que incluye la biblioteca SPI.
#incluir
Incluye biblioteca RF24 y LCD para acceder a las funciones RF24 y LCD.
#incluir
La dirección de la pantalla LCD para I2C es 27 y es una pantalla LCD de 16x2, así que escríbala en la función.
LiquidCrystal_I2C lcd (0x27, 16, 2);
El RF24 está conectado con pines SPI estándar junto con CE en el pin 9 y CSN en el pin 10.
Radio RF24 (9, 10);
Encienda la radio, configure el nivel de potencia y configure el canal en 76. También configure la dirección de la tubería igual que Raspberry Pi y abra la tubería para leer.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, tubería);
Inicie la comunicación I2C e inicialice la pantalla LCD.
Wire.begin (); lcd.begin (); casa lcd (); lcd.print ("Listo para recibir");
Empiece a escuchar la radio en busca de mensajes entrantes y establezca la longitud del mensaje en 32 bytes.
radio.startListening (); charivedMessage = {0}
Si la radio está conectada, comience a leer el mensaje y guárdelo. Imprima el mensaje en el monitor de serie y también imprima en la pantalla hasta que llegue el siguiente mensaje. Detenga la radio para escuchar y vuelva a intentarlo después de un intervalo. Aquí son 10 microsegundos.
if (radio.available ()) { radio.read (mensaje recibido, tamaño de (mensaje recibido)); Serial.println (mensaje recibido); Serial.println ("Apagar la radio"); radio.stopListening (); String stringMessage (mensaje recibido); lcd.clear (); retraso (1000); lcd.print (stringMessage); }
Sube el código completo dado al final al Arduino UNO y espera a que se reciba el mensaje.
Esto finaliza el tutorial completo sobre cómo enviar un mensaje usando Raspberry Pi & nRf24l01 y recibirlo usando Arduino UNO & nRF24l01. El mensaje se imprimirá en la pantalla LCD de 16x2. Las direcciones de las tuberías son muy importantes tanto en Arduino UNO como en Raspberry Pi. Si tiene alguna dificultad mientras realiza este proyecto, comente a continuación o comuníquese con el foro para una discusión más detallada.
También vea el video de demostración a continuación.