- Il modulo RF nRF24L01
- Schema elettrico
- Programmazione di Raspberry Pi per inviare messaggi utilizzando nRF24l01
- Programmazione di Arduino UNO per ricevere messaggi utilizzando nRF24l01
I progettisti utilizzano molti sistemi di comunicazione wireless come Bluetooth Low Energy (BLE 4.0), Zigbee, moduli Wi-Fi ESP8266, moduli RF 433 MHz, Lora, nRF ecc. E la selezione del supporto dipende dal tipo di applicazione in cui viene utilizzato. tutto, un mezzo wireless popolare per la comunicazione di rete locale è nRF24L01. Questi moduli funzionano su 2,4 GHz (banda ISM) con velocità di trasmissione da 250 Kbps a 2 Mbps che è legale in molti paesi e può essere utilizzata in applicazioni industriali e mediche. Si afferma inoltre che con antenne adeguate questi moduli possono trasmettere e ricevere segnali fino a una distanza di 100 metri tra loro. In precedenza abbiamo utilizzato nRF24L01 con Arduino per controllare il servomotore e creare una chat room.
Qui useremo nRF24L01 - Modulo ricetrasmettitore RF a 2,4 GHz con Arduino UNO e Raspberry Pi per stabilire una comunicazione wireless tra di loro. Il Raspberry Pi fungerà da trasmettitore e Arduino Uno ascolterà Raspberry Pi e stamperà il messaggio inviato da Raspberry Pi utilizzando nRF24L01 su un LCD 16x2. nRF24L01 ha anche funzionalità BLE integrate e può anche comunicare in modalità wireless utilizzando BLE.
Il tutorial è diviso in due sezioni. La prima sezione includerà l' interfacciamento di nRF24L01 con Arduino per fungere da ricevitore e la seconda sezione includerà l' interfacciamento di nRF24L01 con Raspberry Pi per fungere da Trasmettitore. Il codice completo per entrambe le sezioni con video funzionante verrà allegato alla fine di questo tutorial.
Il modulo RF nRF24L01
I moduli nRF24L01 sono moduli ricetrasmettitori, il che significa che ogni modulo può sia inviare che ricevere dati ma poiché sono half-duplex possono inviare o ricevere dati contemporaneamente. Il modulo ha l'IC generico nRF24L01 dei semiconduttori nordici che è responsabile della trasmissione e della ricezione dei dati. L'IC comunica utilizzando il protocollo SPI e quindi può essere facilmente interfacciato con qualsiasi microcontrollore. Diventa molto più semplice con Arduino poiché le librerie sono prontamente disponibili. Le pinouts di un modulo standard nRF24L01 seguito riportiamo
Il modulo ha una tensione operativa da 1,9 V a 3,6 V (tipicamente 3,3 V) e consuma molta meno corrente di soli 12 mA durante il normale funzionamento, il che lo rende efficiente dalla batteria e quindi può anche funzionare con celle a bottone. Anche se la tensione operativa è di 3,3 V, la maggior parte dei pin tollerano i 5 V e quindi possono essere interfacciati direttamente con microcontrollori da 5 V come Arduino. Un altro vantaggio dell'utilizzo di questi moduli è che ogni modulo ha 6 pipeline. Ciò significa che ogni modulo può comunicare con altri 6 moduli per trasmettere o ricevere dati. Ciò rende il modulo adatto per la creazione di reti a stella o mesh nelle applicazioni IoT. Inoltre hanno una vasta gamma di indirizzi di 125 ID univoci, quindi in un'area chiusa possiamo utilizzare 125 di questi moduli senza interferire tra loro.
Schema elettrico
nRF24L01 con Arduino:
Lo schema del circuito per il collegamento di nRF24L01 con Arduino è semplice e non ha molti componenti. Il nRF24l01 sarà collegato tramite interfaccia SPI e il display LCD 16x2 è interfacciato con il protocollo I2C che utilizza solo due fili.
nRF24L01 con Raspberry Pi:
Anche lo schema del circuito per il collegamento di nRF24L01 con Raspberry Pi è molto semplice e solo l'interfaccia SPI viene utilizzata per collegare Raspberry Pi e nRF24l01.
Programmazione di Raspberry Pi per inviare messaggi utilizzando nRF24l01
La programmazione del Raspberry Pi verrà eseguita utilizzando Python3. Puoi anche usare C / C ++ come Arduino. Ma c'è già una libreria disponibile per nRF24l01 in python che può essere scaricata dalla pagina github. Nota che il programma python e la libreria dovrebbero essere nella stessa cartella o il programma python non sarà in grado di trovare la libreria. Dopo aver scaricato la libreria basta estrarre e creare una cartella in cui saranno archiviati tutti i programmi e i file della libreria. Quando l'installazione della libreria è terminata, inizia a scrivere il programma. Il programma inizia con l'inclusione di librerie che verranno utilizzate nel codice come import GPIO library per l'accesso ai GPIO Raspberry Pi e tempo di importazione per accedere alle funzioni relative all'ora. Se sei nuovo su Raspberry Pi, torna a iniziare con Raspberry pi.
importa RPi.GPIO come tempo di importazione GPIO importa spidev da lib_nrf24 importa NRF24
Impostare la modalità GPIO in " Broadcom SOC channel". Ciò significa che ti riferisci ai pin con il numero "Broadcom SOC channel", questi sono i numeri dopo "GPIO" (per es. GPIO01, GPIO02…). Questi non sono i numeri del tabellone.
GPIO.setmode (GPIO.BCM)
Successivamente imposteremo l'indirizzo del tubo. Questo indirizzo è importante per comunicare con il ricevitore Arduino. L'indirizzo sarà nel codice esadecimale.
pipe =,]
Avvia la radio utilizzando GPIO08 come CE e GPIO25 come pin CSN.
radio.begin (0, 25)
Imposta la dimensione del payload a 32 bit, l'indirizzo del canale a 76, la velocità dati di 1 Mbps e i livelli di potenza minimi.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Aprire i tubi per iniziare a scrivere i dati e stampare i dettagli di base di nRF24l01.
radio.openWritingPipe (pipe) radio.printDetails ()
Prepara un messaggio sotto forma di stringa. Questo messaggio verrà inviato ad Arduino UNO.
sendMessage = list ("Hi..Arduino UNO") mentre len (sendMessage) <32: sendMessage.append (0)
Inizia a scrivere alla radio e continua a scrivere la stringa completa finché la radio non è disponibile. Insieme a esso, annota il tempo e stampa una dichiarazione di debug della consegna del messaggio.
while True: start = time.time () radio.write (sendMessage) print ("Invia il messaggio: {}". format (sendMessage)) send radio.startListening ()
Se la stringa è completata e la pipe è chiusa, stampare un messaggio di debug di timeout.
while not radio.available (0): time.sleep (1/100) if time.time () - start> 2: print ("Time out.") # stampa il messaggio di errore se la radio è scollegata o non funziona più si interrompe
Interrompere l'ascolto della radio e chiudere la comunicazione e riavviare la comunicazione dopo 3 secondi per inviare un altro messaggio.
radio.stopListening () # close radio time.sleep (3) # dà un ritardo di 3 secondi
Il programma Raspberry è semplice da capire se conosci le basi di Python. Il programma Python completo viene fornito alla fine del tutorial.
Esecuzione del programma Python in Raspberry Pi:
L'esecuzione del programma è molto semplice dopo aver seguito i passaggi seguenti:
- Salva il programma Python e i file della libreria nella stessa cartella.
- Il nome del file del mio programma per Sender è nrfsend.py e inoltre tutti i file sono nella stessa cartella
- Vai al terminale di comando di Raspberry Pi. E individuare il file del programma python utilizzando il comando "cd".
- Quindi apri la cartella e scrivi il comando " sudo python3 your_program.py " e premi invio . Sarai in grado di vedere i dettagli di base di nRf24 e la radio inizierà a inviare i messaggi ogni 3 secondi. Il messaggio di debug verrà visualizzato al termine dell'invio con tutti i caratteri inviati.
Ora vedremo lo stesso programma del ricevitore in Arduino UNO.
Programmazione di Arduino UNO per ricevere messaggi utilizzando nRF24l01
La programmazione di Arduino UNO è simile alla programmazione di Raspberry Pi. Seguiremo metodi simili ma con linguaggi e passaggi di programmazione diversi. I passaggi includeranno la parte di lettura di nRF24l01. La libreria per nRF24l01 per Arduino può essere scaricata dalla pagina GitHub. Inizia includendo le librerie necessarie. Stiamo usando LCD 16x2 usando I2C Shield, quindi includi la libreria Wire.h e anche nRF24l01 è interfacciato con SPI quindi includi la libreria SPI.
#includere
Include RF24 e libreria LCD per accedere alle funzioni RF24 e LCD.
#includere
L'indirizzo LCD per I2C è 27 ed è un LCD 16x2, quindi scrivilo nella funzione.
LiquidCrystal_I2C lcd (0x27, 16, 2);
L'RF24 è collegato con pin SPI standard insieme a CE nel pin 9 e CSN nel pin 10.
Radio RF24 (9, 10);
Avvia la radio, imposta il livello di potenza e imposta il canale su 76. Imposta anche l'indirizzo del tubo uguale a Raspberry Pi e apri il tubo per leggere.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, pipe);
Inizia la comunicazione I2C e inizializza il display LCD.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Pronto per la ricezione");
Inizia ad ascoltare la radio per i messaggi in arrivo e imposta la lunghezza del messaggio su 32 byte.
radio.startListening (); carattere ricevutoMessaggio = {0}
Se la radio è collegata, inizia a leggere il messaggio e salvalo. Stampa il messaggio sul monitor seriale e stampa anche sul display fino all'arrivo del messaggio successivo. Fermare la radio per ascoltare e riprovare dopo un certo intervallo. Qui sono 10 micro secondi.
if (radio.available ()) { radio.read (ovedMessage, sizeof (ovedMessage)); Serial.println (ricevutoMessage); Serial.println ("Spegnimento della radio."); radio.stopListening (); String stringMessage (ricevutoMessage); lcd.clear (); ritardo (1000); lcd.print (stringMessage); }
Carica il codice completo fornito alla fine su Arduino UNO e attendi che il messaggio venga ricevuto.
Questo termina il tutorial completo sull'invio di un messaggio utilizzando Raspberry Pi e nRf24l01 e sulla ricezione utilizzando Arduino UNO e nRF24l01. Il messaggio verrà stampato sul display LCD 16x2. Gli indirizzi delle pipe sono molto importanti sia in Arduino UNO che in Raspberry Pi. In caso di difficoltà durante l'esecuzione di questo progetto, commentare di seguito o contattare il forum per una discussione più dettagliata.
Controlla anche il video dimostrativo qui sotto.