Arduino NRF24L01+ collegamento e library Mirf

Collegare in modalità wireless più Arduino con i modulini radio NRF24L01+ 2.4GHz è semplice ed economico, anche per quanto riguarda il codice niente paura, ci sono in rete delle librerie già belle che pronte con tanto di sketch di esempio.

NRF24L01
Giusto per segnalarlo a chi non lo ha letto, in un precedente articolo abbiamo visto dei modulini wireless operanti a 433MHz, la differenza principale è che i modulini che vedremo in questo articolo sono bidirezionali, questo vuol dire che un singolo modulino può sia ricevere che trasmettere.

I COLLEGAMENTI
Attenzione: l’alimentazione di questi modulini va da 1.9Vcc a 3.6Vcc
quindi se state utilizzando un Arduino Stand alone fatto in casa bisogna usare un regolatore di tensione, i restanti pin invece funzionano tranquillamente a 5Vcc, quindi compatibili con i livelli di tensione della logica TTL usata da Arduino.

NRF24L01 UNO Mega
1 GND GND GND
2 VCC 3.3V 3.3V
3 CE 8 8
4 CSN 7 7
5 SCK  13  52
6 MOSI  11  51
7 MISO  12  50
8 IRQ non utilizzato non utilizzato

VCC e GND ricordo nuovamente che Vcc non può essere collegata a 5Vcc ma a 3,3Vcc.
CE: Chip Enable: setta il modulo in ricezione o trasmissione
CSN: SPI Chip Select
SCK: SPI Clock
MOSI: SPI MOSI
MISO: SPI MISO
IRQ: Interrupt

La sigla SPI che notiamo sulla maggior parte dei pin è l’acronimo di Serial Peripheral Interface, questo ci indica appunto che questi moduli comunicheranno con Arduino(o altro) tramite questo protocollo.

LA LIBRERIA
A questo punto bisogna scegliere una libreria, e qui a meno che non si tratti di una situazione palese dove poter dire “questa non è degna di essere chiamata manco libreria” ma stiamo cercando un qualcosa per la seria “OK, FUNGE!” non esiste una libreria migliore dell’altra, questo perché dipende dai casi, magari mi interessa una libreria che generi codice leggero e semplice a discapito di un’altra che magari integri una ottima gestione di debug ecc..
Detto questo le due librerie che risaltano subito in rete, sono la NRF24 e la Mirf, io per questo articolo scelgo la Mirf.
La MIRF è meno documentata della NRF24, ma ho letto in rete che la MIRF genera eseguibili più leggeri rispetto l’altra ecc… insomma, documentatevi in rete se volete approfondire la cosa e fate dei test se proprio dovete gestire situazioni particolari.

IL DATASHEET
Se andate a prendere il datasheet e cercate il registro numero 6 che risponde alla voce di RF Setup Register noterete che è possibile variare la velocità di trasmissione e la potenza del segnale.
Il registro è composto dai seguenti bits:

registro_6_NRF24L01

quello che andremo a fare è diminuire la velocità di trasmissione in modo da aumentare la portata del segnale e raggiungere teoricamente distanze maggiori, questo però è bene farlo dopo aver fatto i test su campo, se con la configurazione di default dei registri non riuscite a coprire ad esempio la distanza tra due stanze, allora potrete provare a diminuire la velocità di trasmissione a 250Kbps settando il bit 5 (RF_DR_LOW) a 1 ed il bit 3 (RF_DR_HIGH) a 0

COME SETTARE UN REGISTRO
Abbastanza semplice, la libreria MIRF ci mette a disposizione la seguente funzione:
Mirf.configRegister(NOME_REGISTRO,VALORE_DA_SETTARE_AL_REGISTRO);
Volendo settare la velocità di trasmissione a 250Kbps il registro dovrà presentare la seguente configurazione binaria 00100110 che convertito in esadecimale diventa 0x26 perciò come ultima istruzione all’interno della funzione SETUP di Arduino andremo a scrivere: Mirf.configRegister(RF_SETUP,0x26);

Volendo continuare si possono fare altre modifiche con i registri, ad esempio potremmo:

  • Modificare il numero e tempo di ritrasmissione dei pacchetti, utile se siamo proprio sulla soglia della distanza massima di trasmissione – registro numero 4
  • Modificare il canale di trasmissione, utile per spostarci da un canale disturbato – registro numero 5

A questo punto sta a voi decidere cosa voler approfondire …..

In fine, non perché è meno importante, tutti i moduli che andrete ad utilizzare, per comunicare devono avere:

  • STESSA VELOCITA’ DI TRASMISSIONE
  • STESSO CANALE
  • STESSA DIMENSIONE PACCHETTO DATI (PAYLOAD)

Il post finisce qui, vi auguro buon lavoro e buon divertimento 🙂