Nel post di oggi vedremo come realizzare una Comunicazione Wireless tra due board Arduino con moduli nRF24L01. Con la comunicazione senza fili, tra due o più microcontrollori, potremo realizzare diversi progetti come robot radiocomandati, sistemi di allarme, e molto altro ancora.
Comunicazione Wireless tra due board Arduino con moduli nRF24L01
Panoramica del progetto
In questo progetto realizzeremo una comunicazione senza fili utilizzando i moduli Wireless nRF24L01 e due micro-controllori:
- Arduino UNO Rev3: che fungerà da Ricevitore (Receiver)
- Arduino Nano: che fungerà da Trasmettitore (Transmitter)
La board Transmitter invierà una stringa di caratteri, tramite il modulo wireless, alla board Receiver e che visualizzeremo sul Serial Monitor.
Materiale occorrente
Per la realizzazione di questo progetto sono necessari i seguenti componenti:
- Arduino UNO Rev3: (Link Amazon – Link eBay)
- Arduino Nano: va bene anche un clone come l’ATmega328P CH340G (Link Amazon – Link eBay)
- nRF24L01: due moduli (Link Amazon – Link eBay)
- Breadboard: basetta forata sperimentale (Link Amazon – Link eBay)
- Jumper Wire: cavetti elettrici (Link Amazon – Link eBay)
- Arduino IDE: ambiente di sviluppo per programmare le board Arduino (per l’installazione e la configurazione vi rimando a questi post)
Panoramica sul modulo nRF24L01
Il modulo nRF24L01 è un ricetrasmettitore che utilizza la banda a 2,4 GHz.
Può lavorare ad una velocità di trasmissione che va da 250 kbps fino a 2 Mbps. Se viene utilizzato in spazzi aperti può raggiungere un raggio d’azione di 100 metri.
Il modulo è abbastanza economico ed ha un consumo massimo di 12 mA (durante la trasmissione). Può essere alimentato con una tensione che va da 1.9 Volt a 3.6 Volt.
N.B. una tensione maggiore di 3.6 volt rischia di danneggiare il modulo.
Questo il Pinout del modulo
Per maggiori informazioni sul modulo potete consultare il datasheet a questo link.
Connettori ISP Arduino
Per i collegamenti dei moduli nRR24L01 alle board Arduino sfrutteremo i piedini presenti sul connettore ISP.
Il connettore ISP ha una piedinatura standard ma può essere saldato sulle varie schede in modo differente.
Questa è la piedinatura standard (presente sulle board che utilizzeremo per realizzare il progetto):
Per questioni di spazio le indicazioni dei 6 piedini non vengono stampate tutte sul connettore ma viene indicato solo il piedino 1 (MISO). Una volta individuato il piedino 1 è sufficiente guardare lo schema dell’immagine precedente per individuare la disposizione degli altri 5 piedini.
Sulla board Arduino Nano, che utilizzeremo in questa guida come Transmitter, il piedino 1(MISO) è evidenziato con il numero 1
Sulla board Arduino UNO Rev3, che utilizzeremo come Receiver, il piedino 1(MISO) è contrassegnato con un cerchietto bianco
N.B. sulla board Arduino UNO sono presenti due connettori ISP, quello che andremo ad utilizzare è quello collegato al chip ATmega, come evidenziato nell’immagine
Installazione libreria RF24
Prima di vedere i collegamenti e gli sketch dobbiamo installare la libreria che ci permette di utilizzare i moduli nRF24L01.
Tra le tante librerie disponibili, per questo progetto, ho optato per la RF24 di TMRh20.
L’installazione è abbastanza semplice e può essere effettuato direttamente dal gestore delle librerie di Arduino IDE raggiungibile da Sketch -> #include librerie -> Gestione librerie.
Dalla finestra per la gestione delle librerie cerchiamo RF24 ed effettuiamo l’installazione
Collegamenti e sketch Arduino Nano Transmitter
Cominciamo effettuando i collegamenti della board Transmitter come mostrato nella tabella seguente:
COLLEGAMENTO PIEDINI | ||
---|---|---|
Arduino Nano | nRF24L01 | Jumper Wire |
MISO | MISO (ISP) | Grigio |
MOSI | MOSI (ISP) | Bianco |
SCK | SCK (ISP) | Viola |
CE | D7 | Marrone |
CSN | D8 | Arancione |
Vcc | 3.3V | Rosso |
GND | GND (ISP) | Nero |
Questo il circuito realizzato con Fritzing
Lo sketch da caricare su Arduino Nano è il seguente
Da arduino IDE creiamo un nuovo file, incolliamo lo sketch che abbiamo appena visto e carichiamolo sul micro-controllore configurando correttamente i parametri della board dal pannello Strumenti
- Scheda -> Arduino Nano
- Processore -> ATmega328P
- Porta -> COM4 (N.B. la porta potrebbe essere differente)
Collegamenti e sketch Arduino UNO Receiver
Ora effettuiamo i collegamneti per la board Receiver come mostrato nella tabella seguente:
COLLEGAMENTO PIEDINI | ||
---|---|---|
Arduino UNO R3 | nRF24L01 | Jumper Wire |
MISO | MISO (ISP) | Grigio |
MOSI | MOSI (ISP) | Bianco |
SCK | SCK (ISP) | Viola |
CE | D7 | Marrone |
CSN | D8 | Arancione |
Vcc | 3.3V | Rosso |
GND | GND (ISP) | Nero |
Questo il circuito realizzato con Fritzing
Questo lo sketch per il micro-controllore Receiver
Come per la board Transmitter, da Arduino IDE, creiamo un nuovo file e incolliamo lo sketch appena visto e carichiamolo sul micro-controllore configurando correttamente i parametri della board dal pannello Strumenti
- Scheda -> Arduino UNO
- Processore -> ATmega328P
- Porta -> COM5 (N.B. la porta potrebbe essere differente)
Panoramica sugli sketch
I due sketch sono simili, si differenziano per il fatto che la Board Transmitter si occupa di inviare la stringa e la board Receiver si occupa di ‘catturare’ la stringa ricevuta.
Nella prima parte, per entrambi gli sketch, includiamo le librerie necessari, inizializziamo il modulo e impostiamo un indirizzo di comunicazione:
Nelle funzioni setup e loop della board Transmitter impostiamo il modulo come trasmettitore (radio.openWritingPipe(address);) ed effettuiamo l’invio della stringa di testo “Hello World” (radio.write(&text, sizeof(text));)
Nelle funzioni setup e loop della board Receiver impostiamo il modulo in modalità ricezine (radio.openReadingPipe(0, address);), lo mettiamo in ascolto (radio.startListening();) e, se disponibili, catturiamo i dati provenienti dal Transmitter(radio.read(&text, sizeof(text));)
Prova funzionamento comunicazione Wireless
Ora non ci resta che testare se tutto funziona correttamente.
Per vedere il risultato sul Monitor Seriale lasciamo configurato l’IDE in modo da comunicare con Arduino UNO (receiver) e avviamolo da Strumenti -> Monitor Seriale.
Vedremo comparire la stringa che la board Transmitter sta inviando alla board Receiver
Come sempre se avete dubbi, consigli o critiche da fare non esitate ad utilizzare i commenti o a visitare le pagine social.
A presto 😉