Differenze tra le versioni di "NRF24 USB"

Da GolemWiki.
(Creata pagina, da ultimare)
 
m ([Bozza] Aggiunte foto e info pinout)
 
(Una versione intermedia di uno stesso utente non è mostrata)
Riga 1: Riga 1:
 
{{Note
 
{{Note
 
|type=warning
 
|type=warning
|text=Pagina in scrittura, informazioni ancora parziali. Mancano le immagini
+
|text=Pagina in scrittura, informazioni ancora parziali
 
}}
 
}}
  
[[File:Esempio.jpg|right|100px]]
+
[[File:nrf24-moduli.jpg|200px|right|thumb|Coppia di moduli equivalenti]]
 
nRF24L01+ è un [https://it.wikipedia.org/wiki/Ricetrasmettitore transceiver] a 2.4GHz con gestione automatica di protocollo a pacchetti (Enhanced ShockBurst™). La comunicazione è punto punto fra due moduli. L'interfaccia con sistemi esterni (es. microcontrollori, Arduino) avviene via [https://it.wikipedia.org/wiki/Serial_Peripheral_Interface SPI].
 
nRF24L01+ è un [https://it.wikipedia.org/wiki/Ricetrasmettitore transceiver] a 2.4GHz con gestione automatica di protocollo a pacchetti (Enhanced ShockBurst™). La comunicazione è punto punto fra due moduli. L'interfaccia con sistemi esterni (es. microcontrollori, Arduino) avviene via [https://it.wikipedia.org/wiki/Serial_Peripheral_Interface SPI].
 
Attenzione! non è un modulo WiFi (non usa il protocollo 802.11).
 
Attenzione! non è un modulo WiFi (non usa il protocollo 802.11).
  
 
== Principi di funzionamento ==
 
== Principi di funzionamento ==
Di base, ogni modulo è contraddistinto da una coppia di indirizzi (anche identici): trasmissione e ricezione. Ogni pacchetto inviato è marcato con l'indirizzo di trasmissione scelto e sarà processato da un modulo ricevente solamente se corrisponde al suo indirizzo in ricezione. Il protocollo ''Enhanced ShockBurst™'' dispone nativamente di una utile funzione di conferma ricezione (autoACK), eventualmente disattivabile.
+
''TL;DR''
  
Eventualmente, è possibile configurare fino ad un massimo di 6 indirizzi di ricezione (''pipes'') su uno stesso modulo.
+
In linea di massima ogni modulo è contraddistinto da una coppia di indirizzi (anche identici), in trasmissione e ricezione. Ogni pacchetto inviato è marcato con l'indirizzo di trasmissione scelto e sarà processato da un modulo ricevente solamente se corrisponde al suo indirizzo in ricezione.
 +
 
 +
Il protocollo dispone nativamente di una funzione autoACK: l'unità trasmittente attende la conferma di avvenuta ricezione (ACKnowledgement), altrimenti ritenta l'invio.
 +
 
 +
Ogni modulo può ricevere o trasmettere, ma la comunicazione è ''half duplex'': non è ammessa la bidirezionalità nello stesso istante di tempo.
  
 
Per maggiori informazioni tecniche si consiglia la lettura del [https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf manuale] del chip.
 
Per maggiori informazioni tecniche si consiglia la lettura del [https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf manuale] del chip.
  
== Pinout e connessione ad Arduino ==
+
=== Pinout e connessione ad Arduino ===
 +
<gallery>
 +
File:nrf24-8pin.png|Pinout versione a 8pin
 +
File:nrf24-10pin.png|Pinout versione a 10pin
 +
</gallery>
  
[[File:Esempio.jpg|200px|thumb|none|Pinout versione a 8pin]] [[File:Esempio.jpg|200px|thumb|none|Pinout versione a 10pin]]
+
È necessario scaricare la libreria [https://github.com/nRF24/RF24 RF24] dal gestore librerie. Negli esempi sono già presenti degli sketch di prova per testare il corretto funzionamento del modulo (es. [https://github.com/nRF24/RF24/blob/master/examples/pingpair_ack/pingpair_ack.ino pingpair]).
  
È necessario scaricare la libreria RF24 dal gestore librerie. Negli esempi sono già presenti degli sketch di prova per testare il corretto funzionamento del modulo (es. pingpair).  
+
La libreria usa l'hardware SPI del microcontrollore, quindi i pin MISO, MOSI ed SCK sono fissati e riportati in tabella. È possibile variare a piacere CE e CSN con l'istruzione <code>RF24 radio(ce, csn);</code>, nella tabella sono riportati i valori di default. IRQ è usualmente disconnesso.
  
Non ho provato, ma si può provare ad impostare uno stesso indirizzo di ricezione su più moduli per creare un canale simil-broadcast. Conviene disabilitare l'autoACK.
+
{| class="wikitable"
 +
|-
 +
! pin RF24 !! Arduino UNO (ATmega328) !! Arduino Mega (ATmega2560)
 +
|-
 +
| MISO || 12 || 50
 +
|-
 +
| MOSI || 11 || 51
 +
|-
 +
| SCK || 13 || 52
 +
|-
 +
| CE || 7 || 7
 +
|-
 +
| CSN || 8 || 8
 +
|}
 +
 
 +
'''Da testare''': si può tentare di creare un canale broadcast impostando lo stesso indirizzo di ricezione a più moduli e disabilitando l'autoACK, che diventa a questo punto deleterio.
 
   
 
   
== Funzionamento della penna usb ==
+
=== Funzionamento della penna usb ===
 +
[[File:Nrf24-usb.jpg|200px|thumb|right|Esempio di un modulo adattatore]]
 
Gli adattatori USB in commercio permettono di collegare il modulo nRF24 al PC in modo diretto, senza passare da Arduino.
 
Gli adattatori USB in commercio permettono di collegare il modulo nRF24 al PC in modo diretto, senza passare da Arduino.
 
Nel caso in esame si è usato l'adattatore commercializzato da [http://www.chinalctech.com/index.php?_m=mod_product&_a=view&p_id=1207 LC Technology]. Tale adattatore:
 
Nel caso in esame si è usato l'adattatore commercializzato da [http://www.chinalctech.com/index.php?_m=mod_product&_a=view&p_id=1207 LC Technology]. Tale adattatore:
* forza gli indirizzi di ricezione e trasmissione a 0x0110104334;
+
* forza gli indirizzi di ricezione e trasmissione a <code>0x0110104334</code>;
 
* viene identificato dal PC come una comune porta seriale (su Linux, ad esempio: ''/dev/ttyUSB0'') a 9600 baud;
 
* viene identificato dal PC come una comune porta seriale (su Linux, ad esempio: ''/dev/ttyUSB0'') a 9600 baud;
 
* si avvia per default in modalità trasmettitore. Per passare a ricevitore è necessario cortocircuitare i due pin SWIM e GND per qualche istante.
 
* si avvia per default in modalità trasmettitore. Per passare a ricevitore è necessario cortocircuitare i due pin SWIM e GND per qualche istante.
Riga 34: Riga 58:
 
Per testare la comunicazione si mette a disposizione il seguente sketch di esempio da caricare su Arduino.
 
Per testare la comunicazione si mette a disposizione il seguente sketch di esempio da caricare su Arduino.
 
All'accensione invia un riepilogo della configurazione del modulo nRF24 e si pone in ascolto di pacchetti trasferiti, per passare in modalità trasmissione è sufficiente battere ''T''.
 
All'accensione invia un riepilogo della configurazione del modulo nRF24 e si pone in ascolto di pacchetti trasferiti, per passare in modalità trasmissione è sufficiente battere ''T''.
 +
 +
==== Clone fatto in casa ====
 +
[[File:Nrf24-golem-usb.jpg|200px|thumb|right|Modulo adattatore GOLEM]]
 +
Viste le esigenze richieste dal [[Archerino|Progetto Arcieri]] abbiamo realizzato una nostra versione dell'adattatore USB. I file del circuito stampato, del codice sorgente e le istruzioni di caricamento sono versionate su [https://git.golem.linux.it/giuliof/nRF24-key git].
 +
 +
Agendo opportunamente sul file di configurazione da caricare in memoria è possibile configurare ognuno dei registri dell'nRF24.
  
 
== Riferimenti ==
 
== Riferimenti ==

Versione attuale delle 23:29, 22 ago 2019

Golem-template-note-warning.png Pagina in scrittura, informazioni ancora parziali


Coppia di moduli equivalenti

nRF24L01+ è un transceiver a 2.4GHz con gestione automatica di protocollo a pacchetti (Enhanced ShockBurst™). La comunicazione è punto punto fra due moduli. L'interfaccia con sistemi esterni (es. microcontrollori, Arduino) avviene via SPI. Attenzione! non è un modulo WiFi (non usa il protocollo 802.11).

Principi di funzionamento

TL;DR

In linea di massima ogni modulo è contraddistinto da una coppia di indirizzi (anche identici), in trasmissione e ricezione. Ogni pacchetto inviato è marcato con l'indirizzo di trasmissione scelto e sarà processato da un modulo ricevente solamente se corrisponde al suo indirizzo in ricezione.

Il protocollo dispone nativamente di una funzione autoACK: l'unità trasmittente attende la conferma di avvenuta ricezione (ACKnowledgement), altrimenti ritenta l'invio.

Ogni modulo può ricevere o trasmettere, ma la comunicazione è half duplex: non è ammessa la bidirezionalità nello stesso istante di tempo.

Per maggiori informazioni tecniche si consiglia la lettura del manuale del chip.

Pinout e connessione ad Arduino

È necessario scaricare la libreria RF24 dal gestore librerie. Negli esempi sono già presenti degli sketch di prova per testare il corretto funzionamento del modulo (es. pingpair).

La libreria usa l'hardware SPI del microcontrollore, quindi i pin MISO, MOSI ed SCK sono fissati e riportati in tabella. È possibile variare a piacere CE e CSN con l'istruzione RF24 radio(ce, csn);, nella tabella sono riportati i valori di default. IRQ è usualmente disconnesso.

pin RF24 Arduino UNO (ATmega328) Arduino Mega (ATmega2560)
MISO 12 50
MOSI 11 51
SCK 13 52
CE 7 7
CSN 8 8

Da testare: si può tentare di creare un canale broadcast impostando lo stesso indirizzo di ricezione a più moduli e disabilitando l'autoACK, che diventa a questo punto deleterio.

Funzionamento della penna usb

Esempio di un modulo adattatore

Gli adattatori USB in commercio permettono di collegare il modulo nRF24 al PC in modo diretto, senza passare da Arduino. Nel caso in esame si è usato l'adattatore commercializzato da LC Technology. Tale adattatore:

  • forza gli indirizzi di ricezione e trasmissione a 0x0110104334;
  • viene identificato dal PC come una comune porta seriale (su Linux, ad esempio: /dev/ttyUSB0) a 9600 baud;
  • si avvia per default in modalità trasmettitore. Per passare a ricevitore è necessario cortocircuitare i due pin SWIM e GND per qualche istante.

Utilizzando quindi un generico programma per comunicazione seriale (il monitor seriale di Arduino, minicom, miniterm, etc...) è sufficiente digitare un messaggio quindi battere invio per inviarlo. Si noti che è necessario abilitare LFCR[1]) affinché la stringa venga effettivamente inviata. Il modulo invia sempre una stringa di conferma che conferma l'avvenuta o fallita ricezione, nel nostro caso in cinese :/

Per testare la comunicazione si mette a disposizione il seguente sketch di esempio da caricare su Arduino. All'accensione invia un riepilogo della configurazione del modulo nRF24 e si pone in ascolto di pacchetti trasferiti, per passare in modalità trasmissione è sufficiente battere T.

Clone fatto in casa

Modulo adattatore GOLEM

Viste le esigenze richieste dal Progetto Arcieri abbiamo realizzato una nostra versione dell'adattatore USB. I file del circuito stampato, del codice sorgente e le istruzioni di caricamento sono versionate su git.

Agendo opportunamente sul file di configurazione da caricare in memoria è possibile configurare ognuno dei registri dell'nRF24.

Riferimenti

Note

  1. Il programma di comunicazione seriale invia la coppia di caratteri "a capo" e "ritorno carrello" ogni volta che si preme invio.