Le immagini dei prodotti sono solo a scopo informativo e potrebbero presentare piccole differenze, a seconda del lotto e del fornitore. Le specifiche e i prezzi dei prodotti potrebbero essere soggetti a modifiche senza preavviso. Facciamo del nostro meglio per aggiungere specifiche quanto più precise e corrette possibili alla pagina del prodotto, ma è possibile che non siano del tutto corrette. Se identifichi un caso del genere, ti preghiamo di segnalarcelo.
Il prodotto è destinato agli specialisti e richiede personale qualificato e autorizzato. Il prodotto non include istruzioni di montaggio/uso . La messa in funzione del prodotto da parte di persone non qualificate comporta la perdita della garanzia secondo i Termini e Condizioni presenti sul sito.
Le specifiche tecniche indicate (corrente, potenza, ecc.) rappresentano valori massimi consentiti in condizioni ideali di funzionamento. Per un utilizzo sicuro e una durata ottimale, si raccomanda di utilizzare il prodotto in regime continuo a non più del 50% dei valori massimi specificati.
Scheda di sviluppo NRF-Nano V3.0, CH340, ATMega328p con NRF24L01, tipo C
Scheda di sviluppo compatta compatibile con Arduino Nano, ideale per progetti IoT e comunicazioni wireless, integra il transceiver NRF24L01 per collegamenti radio veloci e stabili, utilizza un ATMega328P a 16 MHz con logica a 5 V, mantiene la piedinatura identica a quella di Nano V3 per una facile integrazione, programmazione e alimentazione tramite USB Type-C con CH340G.
Spedito entro mercoledì 11 novembre
Acquistando questo prodotto guadagni 0,69 € in punti fedeltà.
Spedizione veloce gratuita per ordini superiori a 100EUR nella maggior parte de paesi UE.
Spediamo dal nostro magazzino entro 24 ore
Ricevi punti a ogni ordine, per un valore del 5%.
La scheda di sviluppo NRF-Nano V3.0 combina sullo stesso circuito stampato un microcontrollore ATmega328P compatibile con Arduino Nano V3 e un ricetrasmettitore radio nRF24L01+ da 2,4 GHz, con antenna stampata. È adatta per reti di sensori wireless, telecomandi, automazioni domestiche, moduli di trasmissione dati tra due o più schede e qualsiasi progetto in cui hai bisogno di un microcontrollore e di un collegamento radio in formato Nano.
Il microcontrollore ATmega328P funziona a 16 MHz, con 32 KB di memoria Flash (di cui 2 KB occupati dal bootloader), 2 KB di SRAM e 1 KB di EEPROM, mentre la logica è a 5 V. La comunicazione con il computer avviene tramite il convertitore USB-seriale CH340G, e il connettore USB Type-C serve sia per la programmazione sia per l'alimentazione. La radio nRF24L01+ è collegata al microcontrollore tramite SPI, con CE su D7 e CSN su D8, mentre i pin D7, D8, D11, D12 e D13 non possono più essere usati per altre funzioni.
Tra le caratteristiche principali ci sono il connettore USB Type-C, il convertitore USB-seriale CH340G, l'antenna stampata della radio, il pulsante RESET, il regolatore da 3,3 V che alimenta la radio, il LED di test collegato a D13 e due file da 15 pin ciascuna con la stessa disposizione del Nano V3 standard. L'alimentazione avviene a 5 VDC tramite USB Type-C oppure a 7 - 12 VDC (consigliato 9 VDC) sul pin VIN.
La scheda si programma da Arduino IDE come Arduino Nano ed è compatibile con le librerie e gli sketch di Arduino Nano V3. Tramite radio comunica con altre schede NRF-Nano o con qualsiasi modulo nRF24L01+ collegato ad Arduino, ESP32, STM32 o Raspberry Pi, mentre via USB può essere collegata al computer.
Specifiche:
Tensione di alimentazione: 7 - 12 VDC (consigliato 9 VDC) sul pin VIN oppure 5 VDC tramite USB Type-C
Corrente per pin IO: 40 mA
Tensione logica: 5 V
Processore: ATmega328P
Integrato aggiuntivo: Ricetrasmettitore nRF24L01+ (2.4 GHz)
Driver USB-seriale: CH340G
Connettore USB: Type-C
Pin digitali I/O: 14, di cui 6 PWM
Pin di ingresso analogici: 6
Memoria Flash: 32 KB, di cui 2 KB usati per il bootloader
SRAM: 2 KB
EEPROM: 1 KB
Frequenza: 16 MHz
Pin radio: CE = D7, CSN = D8, MOSI = D11, MISO = D12, SCK = D13
Dimensioni: 48 x 19 mm
Layout:
| Element | Funzione |
|---|---|
| Connettore USB Type-C | Alimenta la scheda a 5 V e la collega al computer per la programmazione e la comunicazione seriale tramite CH340G. |
| Microcontrollore ATmega328P | Esegue il programma utente e controlla la radio tramite SPI. |
| Antenna stampata | Antenna della radio nRF24L01+ per la banda 2.4 GHz, realizzata direttamente sul circuito stampato della scheda. |
| Radio nRF24L01+ | Ricetrasmettitore integrato, collegato al microcontrollore tramite CE = D7, CSN = D8 e SPI su D11, D12, D13. |
| Pulsante RESET | Una pressione breve resetta il microcontrollore e riavvia il programma. Dopo il reset si avviano il bootloader e poi il programma caricato. |
| LED di test D13 | Si accende quando il pin D13 è HIGH e si spegne quando è LOW. Poiché D13 è anche la linea SCK della radio, il LED può lampeggiare durante l'attività radio. |
| Convertitore CH340G (sul retro della scheda) | Convertitore USB-seriale usato per la programmazione e per il monitor seriale. |
| Regolatore AMS1117-3.3 (sul retro della scheda) | Fornisce i 3.3 V necessari alla radio nRF24L01+. |
| Barrette di pin | Due file da 15 pin ciascuna, con la stessa disposizione del Nano V3. |
Pinout:
| Connettore | Pin | Funzione |
|---|---|---|
| Fila VIN / D13 | VIN | Ingresso di alimentazione 7 - 12 VDC (consigliato 9 VDC) |
| Fila VIN / D13 | GND | Massa |
| Fila VIN / D13 | RST | Reset (a livello LOW resetta il microcontrollore) |
| Fila VIN / D13 | 5V | Tensione di 5 V |
| Fila VIN / D13 | A7, A6 | Ingressi analogici (solo ingresso analogico) |
| Fila VIN / D13 | A5 - A0 | Ingressi analogici, utilizzabili anche come pin digitali (A4 = SDA, A5 = SCL per I2C) |
| Fila VIN / D13 | REF | Riferimento analogico esterno |
| Fila VIN / D13 | 3V3 | Tensione di 3.3 V |
| Fila VIN / D13 | D13 | Pin digitale, SCK SPI (usato dalla radio), LED di test |
| Fila TX1 / D12 | TX1 | Trasmissione seriale (D1) |
| Fila TX1 / D12 | RX0 | Ricezione seriale (D0) |
| Fila TX1 / D12 | RST | Reset |
| Fila TX1 / D12 | GND | Massa |
| Fila TX1 / D12 | D2 | Pin digitale, interrupt esterno INT0 |
| Fila TX1 / D12 | D3 | Pin digitale con PWM, interrupt esterno INT1 |
| Fila TX1 / D12 | D4 | Pin digitale |
| Fila TX1 / D12 | D5 | Pin digitale con PWM |
| Fila TX1 / D12 | D6 | Pin digitale con PWM |
| Fila TX1 / D12 | D7 | CE della radio nRF24L01+ (occupato) |
| Fila TX1 / D12 | D8 | CSN della radio nRF24L01+ (occupato) |
| Fila TX1 / D12 | D9 | Pin digitale con PWM |
| Fila TX1 / D12 | D10 | Pin digitale con PWM, SS SPI |
| Fila TX1 / D12 | D11 | Pin digitale con PWM, MOSI SPI (usato dalla radio) |
| Fila TX1 / D12 | D12 | MISO SPI (usato dalla radio) |
| Pin ATmega328P | Pin nRF24L01+ | Funzione |
|---|---|---|
| D7 | CE | Abilitazione radio (modalità ricezione o trasmissione) |
| D8 | CSN | Selezione del chip SPI |
| D11 | MOSI | Dati dal microcontrollore alla radio |
| D12 | MISO | Dati dalla radio al microcontrollore |
| D13 | SCK | Clock SPI |
Utilizzo:
Collegate la scheda al computer tramite un cavo USB-A a USB Type-C che consenta il trasferimento dati.
Se la scheda non viene riconosciuta con l'ultima versione del driver CH340 (2023), installate il driver dalla sezione Download.
In Arduino IDE selezionate la scheda Arduino Nano e il processore ATmega328P; se il caricamento del programma fallisce, scegliete il processore ATmega328P (Old Bootloader).
Alimentate la scheda tramite USB Type-C a 5 VDC, oppure sul pin VIN a 7 - 12 VDC (consigliato 9 VDC), rispettando la polarità.
Non applicate ai pin I/O tensioni superiori a 5 V e non superate 40 mA su un singolo pin.
Per la comunicazione radio installate la libreria RF24 e create l'oggetto radio con i pin CE = 7 e CSN = 8, cioè RF24 radio(7, 8).
Non usate i pin D7, D8, D11, D12 e D13 per altre funzioni, poiché sono occupati dalla radio.
Premete brevemente il pulsante RESET per riavviare il programma; dopo il caricamento di un nuovo programma la scheda si avvia automaticamente.
Per testare il collegamento radio usate due schede NRF-Nano con lo stesso canale radio e con indirizzi invertiti tra loro, quindi osservate il risultato sul monitor seriale.
Per risultati stabili alimentate la scheda con un'alimentazione affidabile, tenete l'antenna stampata lontana da parti metalliche ed evitate di coprire la zona dell'antenna con custodie metalliche o cavi.
- Tensione di alimentazione
- 7-12 V DC (recomandat 9 V DC) pe VIN sau 5 V DC prin USB Type-C
- Dimensioni
- 48 x 19 mm
- Frequenza di lavoro
- 2.4 GHz
- Tensione logica
- 5 V
- Tipo di connettore
- Type-C
- Memoria Flash
- 32 KB
- Circuito integrato
- nRF24L01+ (2.4 GHz), CH340G
- Processore
- ATmega328P
- Memoria SRAM
- 2 KB
- Numero di pin I/O digitali
- 14, din care 6 PWM
- Frequenza del processore
- 16 MHz
- Numero di pin analogici
- 6
Produs destinat utilizarii in proiecte electronice, automatizari, prototipare, educatie si cercetare.
Produsul trebuie utilizat numai conform specificatiilor tehnice mentionate in descriere si/sau in documentatia produsului.
Avertismente generale de siguranta:
Nu utilizati produsul la tensiuni, curenti sau temperaturi peste valorile specificate.
Montajul si conectarea trebuie realizate de persoane cu cunostinte tehnice minime in domeniul electric/electronic.
Evitati scurtcircuitele, inversarea polaritatii si conectarea gresita a alimentarii.
Nu lasati produsul alimentat nesupravegheat in timpul testelor.
Produsul nu este jucarie si nu este destinat copiilor.
Pentru modulele electronice, se recomanda utilizarea in carcase, panouri sau montaje protejate, dupa caz.
Identificare produs:
Denumirea produsului, codul/SKU-ul si caracteristicile tehnice sunt mentionate in pagina produsului si/sau pe eticheta ambalajului.
Producator / Importator / Distribuitor:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Website: www.sigmanortec.ro
Persoana responsabila in UE:
Sigmanortec S.R.L.
Calea Bucuresti nr. 9, Targu Jiu, Gorj, Romania
E-mail: [email protected]
Documentatie si siguranta:
Pentru informatii suplimentare, fise tehnice, declaratii de conformitate sau instructiuni, ne puteti contacta la [email protected].
/*
NRF-Nano V3.0 radio self-check
Board in Arduino IDE: Arduino Nano (Tools > Board > Arduino AVR Boards > Arduino Nano)
Processor: ATmega328P (if upload fails, use ATmega328P (Old Bootloader))
Board package: Arduino AVR Boards (comes with Arduino IDE)
Wiring: none, the board is powered and programmed through the USB Type-C connector.
Built-in radio nRF24L01+: CE = D7, CSN = D8, MOSI = D11, MISO = D12, SCK = D13
Library to install from Library Manager: RF24 by TMRh20 (version 1.4.0 or newer)
SPI library comes with Arduino IDE.
Open the Serial Monitor at 9600 baud. The sketch checks that the radio answers
and prints its configuration.
*/
#include <SPI.h>
#include <RF24.h>
#include <printf.h>
// Radio pins on NRF-Nano V3.0
const uint8_t PIN_CE = 7;
const uint8_t PIN_CSN = 8;
RF24 radio(PIN_CE, PIN_CSN);
void setup() {
// Start the serial monitor and enable printf for printDetails()
Serial.begin(9600);
printf_begin();
Serial.println();
Serial.println(F("NRF-Nano V3.0 radio self-check"));
// Start the radio
if (!radio.begin()) {
Serial.println(F("Radio not responding. On older RF-Nano V1 or V2 try RF24 radio(10, 9)."));
while (true) {
// Stop here
}
}
// Basic radio configuration
radio.setPALevel(RF24_PA_LOW);
radio.setChannel(76);
radio.setDataRate(RF24_1MBPS);
// Check the SPI connection to the nRF24L01+ chip
if (radio.isChipConnected()) {
Serial.println(F("nRF24L01+ chip detected."));
} else {
Serial.println(F("nRF24L01+ chip NOT detected."));
}
// Print all radio registers
radio.printDetails();
}
void loop() {
// Print a heartbeat once per second to show the program is running
Serial.print(F("Running, channel = "));
Serial.println(radio.getChannel());
delay(1000);
}
Questo tutorial utilizza la scheda NRF-Nano V3.0 come scheda di sviluppo a sé stante, programmata dall'Arduino IDE come Arduino Nano, senza altra scheda Arduino. La scheda combina un microcontrollore ATmega328P con un radio nRF24L01+ a 2.4 GHz, quindi si usa per telecomandi, reti di sensori e qualsiasi progetto in cui due o più schede devono scambiare dati senza fili.
Realizzeremo un test radio con due schede identiche. Su ogni scheda si collegano un pulsante e un LED, e ogni scheda invia lo stato del proprio pulsante e accende il LED dell'altra scheda. L'alimentazione e la programmazione avvengono tramite USB Type-C dal computer.

Come funziona:
La scheda ha due parti che collaborano. Il microcontrollore ATmega328P esegue il programma, mentre il radio nRF24L01+ trasmette e riceve pacchetti nella banda a 2.4 GHz. I due comunicano tramite SPI, con CE su D7, CSN su D8, MOSI su D11, MISO su D12 e SCK su D13. Per questo motivo questi cinque pin non possono essere usati per altro.
Il radio lavora su canali da 1 MHz, numerati da 0 a 125. La frequenza di un canale si calcola così: frequenza = 2400 MHz + numero del canale. Per il canale 76 utilizzato nel programma risulta 2400 + 76 = 2476 MHz. Le due schede devono usare lo stesso canale e la stessa velocità di trasferimento.
Ogni scheda ha un indirizzo di 5 byte. La scheda A invia all'indirizzo della scheda B e ascolta sul proprio indirizzo. La scheda B fa il contrario. Il radio usa la conferma automatica dei pacchetti, quindi la funzione write() restituisce true solo se l'altra scheda ha ricevuto il pacchetto. Un pacchetto può avere al massimo 32 byte, e noi inviamo un solo byte con lo stato del pulsante.
Il pulsante viene letto con INPUT_PULLUP. La resistenza interna collega il pin a 5 V, mentre alla pressione il pulsante collega il pin a GND, quindi la lettura è LOW quando il pulsante è premuto. Il LED ha una resistenza da 220 ohm in serie. La corrente nel LED è circa (5 V - 2 V) / 220 ohm = 14 mA, sotto il limite di 40 mA di un pin.
Collegamento:
Alimentate la scheda tramite USB Type-C da una porta USB del computer, a 5 V. La logica della scheda è a 5 V, mentre il radio è alimentato internamente a 3.3 V dal regolatore presente sulla scheda, quindi non serve un convertitore di livello né un'alimentazione separata per il radio. Montate gli stessi componenti su entrambe le schede.
| Pin del prodotto | Si collega a | Ruolo |
|---|---|---|
| USB Type-C | Porta USB del computer (cavo USB-A a USB Type-C) | Alimentazione 5 V e programmazione |
| D2 | Pulsante 6x6 mm, pin 1 | Ingresso con INPUT_PULLUP, legge LOW alla pressione |
| GND | Pulsante 6x6 mm, pin 2 | Massa del pulsante |
| D3 | Resistenza 220 ohm, terminale 1 | Uscita digitale per il LED |
| Resistenza 220 ohm, terminale 2 | LED rosso 5 mm, anodo (gamba lunga) | Limitazione della corrente del LED |
| GND | LED rosso 5 mm, catodo (gamba corta) | Massa del LED |
Pulsanti, regolazioni e indicatori:
| Elemento | Cosa fa | Come si usa |
|---|---|---|
| Pulsante RESET | Resetta il microcontrollore ATmega328P | Premetelo brevemente per riavviare il programma dall'inizio |
| LED di test D13 | Si accende quando il pin D13 è HIGH | Usatelo come indicatore dell'attività su D13. Poiché D13 è la linea SCK del radio, in questo programma potete percepire quando il radio lavora |
Il pulsante RESET non ha una pressione lunga con altre funzioni. Premetelo una volta dopo aver collegato il montaggio e vedrete sul monitor seriale il messaggio di avvio, che conferma che il programma è ripartito.
Il LED di test su D13 non richiede regolazioni. In questo tutorial non lo comandiamo dal programma, e può lampeggiare leggermente perché D13 trasporta il clock SPI del radio. Questo è normale.
Il pulsante su D2 e il LED su D3 sono i componenti montati da voi. All'avvio il pulsante deve essere libero (lettura HIGH) e il LED spento. Premendo il pulsante su una scheda, deve accendersi il LED dell'altra scheda.
Scheda e librerie:
Nell'Arduino IDE scegliete Strumenti > Scheda > Arduino AVR Boards > Arduino Nano. Il pacchetto Arduino AVR Boards è incluso nell'Arduino IDE e non va installato separatamente. In Strumenti > Processore scegliete ATmega328P, e se il caricamento dà errore, scegliete ATmega328P (Old Bootloader). In Strumenti > Porta scegliete la nuova porta seriale apparsa.
Installate dal Gestore librerie la libreria RF24 di TMRh20, versione 1.4.0 o successiva. La libreria SPI è inclusa nell'Arduino IDE e non va installata.
Codice:
Lo stesso programma si carica su entrambe le schede. L'unica differenza è il valore di NODE_ID all'inizio, che è 0 per la prima scheda e 1 per la seconda.
/*
NRF-Nano V3.0 radio test: two boards, each sends its button state
and lights the LED of the other board.
Board in Arduino IDE: Arduino Nano (Tools > Board > Arduino AVR Boards > Arduino Nano)
Processor: ATmega328P (if upload fails, use ATmega328P (Old Bootloader))
Board package: Arduino AVR Boards (comes with Arduino IDE)
Library to install from Library Manager: RF24 by TMRh20 (version 1.4.0 or newer)
SPI library comes with Arduino IDE.
Wiring on each board:
D2 -> push button pin 1 (button pin 2 -> GND), INPUT_PULLUP
D3 -> resistor 220 ohm -> LED anode (LED cathode -> GND)
Built-in radio nRF24L01+: CE = D7, CSN = D8, MOSI = D11, MISO = D12, SCK = D13
Upload this same sketch to both boards.
Set NODE_ID to 0 for the first board and to 1 for the second board.
*/
#include <SPI.h>
#include <RF24.h>
// Identity of this board: 0 for the first board, 1 for the second board
#define NODE_ID 0
// Pin definitions
const uint8_t PIN_BUTTON = 2; // Push button to GND, read with internal pull-up
const uint8_t PIN_LED = 3; // LED through 220 ohm resistor
const uint8_t PIN_CE = 7; // Radio CE pin on NRF-Nano V3.0
const uint8_t PIN_CSN = 8; // Radio CSN pin on NRF-Nano V3.0
// Timing settings in milliseconds
const unsigned long SEND_INTERVAL_MS = 100; // How often the button state is sent
const unsigned long LINK_TIMEOUT_MS = 1000; // Link is lost after this time without packets
const unsigned long PRINT_INTERVAL_MS = 500; // How often the status is printed
// Radio object
RF24 radio(PIN_CE, PIN_CSN);
// One address for each board (5 characters plus the end of string)
const byte addresses[][6] = {"NODE0", "NODE1"};
// State variables
uint8_t localState = 0; // 1 when the local button is pressed
uint8_t remoteState = 0; // 1 when the button of the other board is pressed
bool lastSendOk = false; // Result of the last transmission
bool everReceived = false; // True after the first packet is received
unsigned long lastSend = 0;
unsigned long lastReceive = 0;
unsigned long lastPrint = 0;
// Prints the current status on the serial monitor
void printStatus() {
bool linkOk = everReceived && (millis() - lastReceive < LINK_TIMEOUT_MS);
Serial.print(F("Local: "));
Serial.print(localState ? F("PRESSED") : F("RELEASED"));
Serial.print(F(" | Sent: "));
Serial.print(lastSendOk ? F("OK") : F("FAILED"));
Serial.print(F(" | Remote: "));
Serial.print(remoteState ? F("PRESSED") : F("RELEASED"));
Serial.print(F(" | Link: "));
Serial.println(linkOk ? F("OK") : F("LOST"));
}
void setup() {
// Start the serial monitor
Serial.begin(9600);
// Configure the button with pull-up and the LED as output
pinMode(PIN_BUTTON, INPUT_PULLUP);
pinMode(PIN_LED, OUTPUT);
digitalWrite(PIN_LED, LOW);
// Start the radio and stop if it does not answer
if (!radio.begin()) {
Serial.println(F("Radio not responding. Check CE and CSN pins."));
while (true) {
// Wait here forever
}
}
// Radio settings, they must be the same on both boards
radio.setPALevel(RF24_PA_LOW); // Low power is enough for a bench test
radio.setChannel(76); // 2400 + 76 = 2476 MHz
// This board writes to the other board and listens on its own address
const uint8_t ownIndex = NODE_ID;
const uint8_t peerIndex = 1 - NODE_ID;
radio.openWritingPipe(addresses[peerIndex]);
radio.openReadingPipe(1, addresses[ownIndex]);
// Listen by default
radio.startListening();
Serial.print(F("Radio ready on channel 76, node "));
Serial.println(NODE_ID);
}
void loop() {
unsigned long now = millis();
// Read the button and send its state at a fixed interval
if (now - lastSend >= SEND_INTERVAL_MS) {
lastSend = now;
localState = (digitalRead(PIN_BUTTON) == LOW) ? 1 : 0; // LOW means pressed
radio.stopListening(); // Switch to transmit mode
lastSendOk = radio.write(&localState, sizeof(localState));
radio.startListening(); // Back to receive mode
}
// Read every packet that arrived
while (radio.available()) {
radio.read(&remoteState, sizeof(remoteState));
lastReceive = millis();
everReceived = true;
}
// Turn the LED on only while the link is alive and the remote button is pressed
bool linkOk = everReceived && (millis() - lastReceive < LINK_TIMEOUT_MS);
digitalWrite(PIN_LED, (linkOk && remoteState) ? HIGH : LOW);
// Print the status from time to time
if (now - lastPrint >= PRINT_INTERVAL_MS) {
lastPrint = now;
printStatus();
}
}
Come funziona il codice:
All'inizio definiamo NODE_ID, i pin PIN_BUTTON (D2), PIN_LED (D3), PIN_CE (D7) e PIN_CSN (D8), e gli intervalli di tempo SEND_INTERVAL_MS, LINK_TIMEOUT_MS e PRINT_INTERVAL_MS. L'oggetto radio viene creato con RF24 radio(PIN_CE, PIN_CSN), e l'array addresses contiene gli indirizzi delle due schede.
In setup() avviamo la porta seriale a 9600 baud, configuriamo il pulsante con INPUT_PULLUP e il LED come uscita, poi avviamo il radio con radio.begin(). Se il radio non risponde, il programma mostra un messaggio e si ferma. Poi impostiamo il canale 76, il livello di potenza RF24_PA_LOW, l'indirizzo di scrittura dell'altra scheda con openWritingPipe() e l'indirizzo proprio di lettura con openReadingPipe(). Alla fine chiamiamo startListening(), quindi la scheda ascolta per impostazione predefinita.
In loop() inviamo lo stato del pulsante ogni SEND_INTERVAL_MS. Prima leggiamo il pulsante nella variabile localState, che vale 1 se il pulsante è premuto. Fermiamo l'ascolto con stopListening(), inviamo il byte con write(), memorizziamo il risultato in lastSendOk e riprendiamo l'ascolto.
Finché radio.available() è vero leggiamo il pacchetto in remoteState e memorizziamo il momento della ricezione in lastReceive. Il LED su D3 segue lo stato remoteState, e se non riceviamo nulla per più di LINK_TIMEOUT_MS, il LED si spegne per sicurezza. Ogni PRINT_INTERVAL_MS la funzione printStatus() mostra lo stato del pulsante locale, il risultato dell'invio, lo stato del pulsante dell'altra scheda e lo stato del collegamento.
Risultato:
Aprite Strumenti > Monitor seriale e impostate la velocità a 9600 baud. Dopo l'avvio, le due schede mostrano il loro stato ogni mezzo secondo. Quando premete il pulsante di una scheda, si accende il LED dell'altra, e la riga sul monitor seriale mostra RELEASED o PRESSED.
Radio ready on channel 76, node 0
Local: RELEASED | Sent: FAILED | Remote: RELEASED | Link: LOST
Local: RELEASED | Sent: OK | Remote: RELEASED | Link: OK
Local: RELEASED | Sent: OK | Remote: RELEASED | Link: OK
Local: PRESSED | Sent: OK | Remote: RELEASED | Link: OK
Local: PRESSED | Sent: OK | Remote: RELEASED | Link: OK
Local: RELEASED | Sent: OK | Remote: PRESSED | Link: OK
Local: RELEASED | Sent: OK | Remote: PRESSED | Link: OK
Local: RELEASED | Sent: OK | Remote: RELEASED | Link: OK
Problemi frequenti:
La scheda non appare come porta seriale. La causa è di solito un cavo che serve solo a caricare, oppure il driver CH340. Usate un cavo USB-A a USB Type-C con trasferimento dati, e se la porta continua a non apparire, installate il driver dalla sezione Download, perché l'ultima versione del 2023 potrebbe essere incompatibile con la scheda.
Il caricamento si interrompe con l'errore avrdude not in sync. La scheda ha un bootloader più vecchio. Scegliete in Strumenti > Processore la variante ATmega328P (Old Bootloader) e caricate di nuovo.
Sul monitor seriale appare il messaggio che il radio non risponde. Verificate di usare RF24 radio(7, 8), che è corretto per la V3.0. Le schede più vecchie RF-Nano V1 e V2 usano CE su D10 e CSN su D9, quindi per loro provate RF24 radio(10, 9). Verificate anche di non aver collegato nulla su D7, D8, D11, D12 o D13.
Lo stato del collegamento è sempre LOST. Verificate che su le due schede NODE_ID sia diverso (0 e 1), che entrambe usino il canale 76 e che entrambe siano alimentate. Avvicinate le schede a qualche metro e allontanatele da oggetti metallici.
Il LED è sempre spento o sempre acceso. Verificate la polarità del LED (anodo verso la resistenza) e che il pulsante sia montato in diagonale, con un pin su D2 e l'altro su GND. Con INPUT_PULLUP il pulsante deve leggere LOW solo quando è premuto.
Il radio si ferma o si riavvia in modo casuale. Il radio è sensibile a un'alimentazione instabile. Usate una porta USB diretta del computer oppure un alimentatore buono, non un hub con alimentazione debole.
Limitazioni e consigli:
I pin D7, D8, D11, D12 e D13 sono occupati dal radio, quindi per i sensori restano liberi D2 - D6, A0 - A7 (A6 e A7 sono solo ingressi analogici) e i pin seriali D0 e D1. Ogni pin I/O sopporta al massimo 40 mA, quindi relè e motori si comandano tramite transistor o moduli dedicati.
Un pacchetto radio ha al massimo 32 byte, e la portata dipende dall'ambiente, dagli ostacoli e dalla potenza impostata. La potenza RF24_PA_LOW è sufficiente per i test sul banco, mentre per distanze maggiori potete aumentare il livello con setPALevel(), purché l'alimentazione sia stabile.
Partendo da questo montaggio potete realizzare un telecomando con più pulsanti, un sensore di temperatura che invia valori a una scheda centrale, oppure una rete a stella in cui una scheda riceve su più indirizzi da più trasmettitori.