- El mòdul RF nRF24L01
- Esquema de connexions
- Programació de Raspberry Pi per enviar missatges mitjançant nRF24l01
- Programació Arduino UNO per rebre missatges mitjançant nRF24l01
Els dissenyadors utilitzen molts sistemes de comunicacions sense fils com Bluetooth Low Energy (BLE 4.0), Zigbee, ESP8266 Wi-Fi Modules, 433MHz RF Modules, Lora, nRF, etc. tot plegat, un mitjà sense fils popular per a la comunicació de xarxa local és el nRF24L01. Aquests mòduls funcionen a 2,4 GHz (banda ISM) amb una velocitat de transmissió de 250 Kbps a 2 Mbps, cosa legal a molts països i que es pot utilitzar en aplicacions industrials i mèdiques. També s’afirma que amb antenes adequades aquests mòduls poden transmetre i rebre senyals fins a una distància de 100 metres entre ells. Anteriorment hem utilitzat nRF24L01 amb Arduino per controlar el servomotor i crear una sala de xat.
Aquí utilitzarem el mòdul transceptor de RF nRF24L01 - 2,4 GHz amb Arduino UNO i Raspberry Pi per establir una comunicació sense fils entre ells. El Raspberry pi actuarà com a transmissor i Arduino Uno escoltarà Raspberry Pi i imprimirà el missatge enviat per Raspberry Pi mitjançant nRF24L01 en una pantalla LCD de 16x2. nRF24L01 també té funcions BLE incorporades i també es pot comunicar sense fils mitjançant BLE.
El tutorial es divideix en dues seccions. La primera secció inclourà la interfície de nRF24L01 amb Arduino per actuar com a receptor i la segona secció inclourà la interfície de nRF24L01 amb Raspberry Pi per fer de transmissor. Al final d'aquest tutorial s'adjuntarà el codi complet de la secció amb vídeo de treball.
El mòdul RF nRF24L01
Els mòduls nRF24L01 són mòduls transceptors, és a dir, cada mòdul pot enviar i rebre dades, però, ja que són semidúplex, poden enviar o rebre dades alhora. El mòdul disposa del IC nRF24L01 genèric de semiconductors nòrdics que s’encarrega de la transmissió i recepció de dades. El CI es comunica mitjançant el protocol SPI i, per tant, es pot connectar fàcilment amb qualsevol microcontrolador. Es fa molt més fàcil amb Arduino, ja que les biblioteques estan fàcilment disponibles. A continuació es mostren els pinouts d’un mòdul nRF24L01 estàndard

El mòdul té una tensió de funcionament d’ 1,9 V a 3,6 V (normalment 3,3 V) i consumeix molt menys corrent de només 12 mA durant el funcionament normal, cosa que fa que la bateria sigui eficient i, per tant, pot funcionar fins i tot amb cèl·lules de moneda. Tot i que el voltatge de funcionament és de 3,3 V, la majoria dels pins són tolerants a 5 V i, per tant, es poden connectar directament amb microcontroladors de 5 V com Arduino. Un altre avantatge d'utilitzar aquests mòduls és que cada mòdul té 6 canonades. És a dir, cada mòdul es pot comunicar amb altres 6 mòduls per transmetre o rebre dades. Això fa que el mòdul sigui adequat per a la creació de xarxes estrella o malla en aplicacions IoT. També tenen un ampli rang d’adreces de 125 identificadors únics, de manera que en una àrea tancada podem utilitzar 125 d’aquests mòduls sense interferir els uns amb els altres.
Esquema de connexions
nRF24L01 amb Arduino:
El diagrama del circuit per connectar nRF24L01 amb Arduino és fàcil i no té molts components. El nRF24l01 es connectarà mitjançant una interfície SPI i la pantalla LCD de 16x2 es connecta amb el protocol I2C que només utilitza dos cables.


nRF24L01 amb Raspberry Pi:
El diagrama de circuits per connectar nRF24L01 amb Raspberry Pi també és molt senzill i només s’utilitza la interfície SPI per connectar Raspberry Pi i nRF24l01.


Programació de Raspberry Pi per enviar missatges mitjançant nRF24l01
La programació del Raspberry Pi es farà mitjançant Python3. També podeu utilitzar C / C ++ com a Arduino. Però ja hi ha una biblioteca disponible per a nRF24l01 en python que es pot descarregar des de la pàgina de github. Tingueu en compte que el programa python i la biblioteca haurien d’estar a la mateixa carpeta o bé el programa python no podrà trobar la biblioteca. Després de descarregar la biblioteca, només cal extreure i crear una carpeta on es guardaran tots els programes i fitxers de la biblioteca. Quan finalitzeu la instal·lació de la biblioteca, només cal que comenceu a escriure el programa. El programa comença amb la inclusió de biblioteques que s’utilitzaran en codi com la biblioteca GPIO d’ importació per accedir als GPIO de Raspberry Pi i el temps d’importació per accedir a les funcions relacionades amb el temps. Si no sou nou a Raspberry Pi, torneu a començar amb Raspberry pi.
importar RPi.GPIO com a temps d' importació GPIO importar spidev des de lib_nrf24 importar NRF24
Establiu el mode GPIO a " Canal SOC Broadcom". Això vol dir que us referiu als pins del número "Broadcom SOC channel", aquests són els números posteriors a "GPIO" (per exemple, GPIO01, GPIO02…). Aquests no són els números de la junta.
GPIO.setmode (GPIO.BCM)
A continuació, configurarem l'adreça de la canonada. Aquesta adreça és important per comunicar-se amb el receptor Arduino. L’adreça estarà al codi hexadecimal.
canonades =,]
Comenceu la ràdio utilitzant GPIO08 com a CE i GPIO25 com a pins CSN.
radio.begin (0, 25)
Estableix la mida de la càrrega útil a 32 bits, l’adreça del canal a 76, la velocitat de dades d’1 Mbps i els nivells de potència com a mínim.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Obriu les canonades per començar a escriure les dades i imprimiu els detalls bàsics de nRF24l01.
radio.openWritingPipe (pipes) radio.printDetails ()
Prepareu un missatge en forma de cadena. Aquest missatge s’enviarà a Arduino UNO.
sendMessage = llista ("Hola..Arduino UNO") mentre len (sendMessage) <32: sendMessage.append (0)
Comenceu a escriure a la ràdio i continueu escrivint la cadena completa fins que la ràdio estigui disponible. Juntament amb això, anoteu l'hora i imprimiu una declaració de depuració del lliurament del missatge.
mentre que True: start = time.time () radio.write (sendMessage) print (" S'ha enviat el missatge: {}". format (sendMessage)) send radio.startListening ()
Si la cadena s'ha completat i la canonada està tancada, imprimiu un missatge de depuració de temps d'espera.
si bé no radio.available (0): time.sleep (1/100) si time.time () - inici> 2: print ("Temps d'espera esgotat.") # missatge d'error d'impressió si la ràdio desconnectada o no funciona més trencar
Deixeu d’escoltar la ràdio i tanqueu la comunicació i reinicieu la comunicació al cap de 3 segons per enviar un altre missatge.
radio.stopListening () # tancar la ràdio time.sleep (3) # donar un retard de 3 segons
El programa Raspberry és senzill d’entendre si coneixeu els conceptes bàsics de Python. El programa complet de Python es dóna al final del tutorial.
Execució del programa Python a Raspberry Pi:
L’execució del programa és molt senzill després de seguir els passos següents:
- Deseu els fitxers Python Program i Library a la mateixa carpeta.

- El nom del meu fitxer de programa per a Sender és nrfsend.py i també tots els fitxers es troben a la mateixa carpeta

- Aneu a Terminal d’ordres de Raspberry Pi. I localitzeu el fitxer del programa python mitjançant l'ordre "cd".

- A continuació, obriu la carpeta i escriviu l'ordre " sudo python3 your_program.py " i premeu Intro. Podreu veure els detalls bàsics de nRf24 i la ràdio començarà a enviar els missatges cada 3 segons. La depuració de missatges es mostrarà després d'enviar-se amb tots els caràcters enviats.

Ara veurem el mateix programa que el receptor a l’Arduino UNO.
Programació Arduino UNO per rebre missatges mitjançant nRF24l01
Programar Arduino UNO és similar a programar Raspberry Pi. Seguirem mètodes similars però amb diferents llenguatges de programació i passos. Els passos inclouran la part de lectura de nRF24l01. La biblioteca de nRF24l01 per a Arduino es pot descarregar des de la pàgina de github. Comenceu per incloure les biblioteques necessàries. Estem utilitzant LCD de 16x2 amb I2C Shield, de manera que inclogueu la biblioteca Wire.h i també el nRF24l01 té una interfície amb SPI, de manera que inclogueu la biblioteca SPI.
#incloure
Incloeu la biblioteca RF24 i LCD per accedir a les funcions RF24 i LCD.
#incloure
L'adreça LCD de l'I2C és 27 i és una pantalla LCD de 16x2, així que escriviu-la a la funció.
LiquidCrystal_I2C lcd (0x27, 16, 2);
El RF24 està connectat amb pins SPI estàndard juntament amb CE al pin 9 i CSN al pin 10.
Ràdio RF24 (9, 10);
Inicieu la ràdio, configureu el nivell de potència i configureu el canal a 76. També configureu l'adreça de la canonada de la mateixa manera que Raspberry Pi i obriu la canonada per llegir-la.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Comenceu la comunicació I2C i inicialitzeu la pantalla LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("A punt per rebre");
Comenceu a escoltar a la ràdio els missatges entrants i configureu la longitud del missatge com a 32 bytes.
radio.startListening (); caràcter rebutMessatge = {0}
Si la ràdio està connectada, comenceu a llegir el missatge i deseu-lo. Imprimiu el missatge al monitor sèrie i imprimiu-lo a la pantalla fins que arribi el següent missatge. Atureu la ràdio per escoltar-la i torneu-ho a provar després d'algun interval. Aquí hi ha 10 microsegons.
if (radio.available ()) { radio.read (missatge rebut, mida de (missatge rebut)); Serial.println (missatge rebut); Serial.println ("Apagar la ràdio"); radio.stopListening (); String stringMessage (recibidaMessatge); lcd.clear (); retard (1000); lcd.print (stringMessage); }
Pengeu el codi complet donat al final a Arduino UNO i espereu que es rebi el missatge.

Amb això s'acaba el tutorial complet sobre l'enviament d'un missatge mitjançant Raspberry Pi i nRf24l01 i la seva recepció mitjançant Arduino UNO i nRF24l01. El missatge s’imprimirà a la pantalla LCD de 16x2. Les adreces de canonades són molt importants tant a Arduino UNO com a Raspberry Pi. Si teniu dificultats mentre feu aquest projecte, si us plau comenteu a continuació o adreceu-vos al fòrum per obtenir una discussió més detallada.
Consulteu també el vídeo de demostració següent.
