Ciao a tutti!
Oggi vedremo come utilizzare il modulo nRF24L01.
Questo dispositivo è un ricetrasmettitore RF funzionante a 2.4GHz utile se volete trasmettere dati o semplicemente "telecomandare" un altro arduino.
Questo modulo ha molti pregi, vediamo quali:
- costo contenuto
- dimensioni compatte
- consumo di corrente in standby nell'ordine del milliampere
- consumo in trasmissione/ricezione di circa 12 mA
- raggio di azione senza ostacoli di un centinaio di metri (da provare).
I primi 2 difetti riscontrati invece sono: la disposizione dei piedini che rende impossibile l'uso diretto su una breadboard, e forse l'uso non semplicissimo.
Quello che vedremo oggi è un semplice esempio di comunicazione tra 2 moduli, con uno utilizzato come trasmettitore ed uno come ricevitore che consentiranno di controllare 2 led grazie a 2 pulsanti.
ecco un video dimostrativo:
Se avete in mano i vostri moduli passiamo subito alla realizzazione dei 2 circuiti:
Trasmettitore:
Ricevitore:
Ora che avete realizzato i circuiti possiamo passare alla parte di codice da caricare nei nostri Arduini.
Per prima cosa dovrete installare la libreria RF24 scaricabile da qui.
poi caricate questo sketch nell'Arduino "trasmettitore"
Invece caricate quest'altro nell'Arduino "ricevitore"
Per maggiori info vi allego anche il sito che mi ha aiutato a comprendere meglio come utilizzare questo modulo (in inglese): http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
Per eventuali dubbi lasciate pure un commento qui sotto, sarò molto contento di rispondervi se conoscerò la risposta ;), ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Questo dispositivo è un ricetrasmettitore RF funzionante a 2.4GHz utile se volete trasmettere dati o semplicemente "telecomandare" un altro arduino.
Questo modulo ha molti pregi, vediamo quali:
- costo contenuto
- dimensioni compatte
- consumo di corrente in standby nell'ordine del milliampere
- consumo in trasmissione/ricezione di circa 12 mA
- raggio di azione senza ostacoli di un centinaio di metri (da provare).
I primi 2 difetti riscontrati invece sono: la disposizione dei piedini che rende impossibile l'uso diretto su una breadboard, e forse l'uso non semplicissimo.
Quello che vedremo oggi è un semplice esempio di comunicazione tra 2 moduli, con uno utilizzato come trasmettitore ed uno come ricevitore che consentiranno di controllare 2 led grazie a 2 pulsanti.
ecco un video dimostrativo:
Se avete in mano i vostri moduli passiamo subito alla realizzazione dei 2 circuiti:
Trasmettitore:
Ricevitore:
Ora che avete realizzato i circuiti possiamo passare alla parte di codice da caricare nei nostri Arduini.
Per prima cosa dovrete installare la libreria RF24 scaricabile da qui.
poi caricate questo sketch nell'Arduino "trasmettitore"
- /* Basato sull'esempio "YourDuinoStarter Example: nRF24L01 Transmit Joystick values"
- http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
- http://www.danielealberti.it/2016/01/ricetrasmettitori-rf-per-arduino.html
- Collegamenti del modulo RF24L01 ad Arduino:
- 1 - GND
- 2 - VCC 3.3V !!! NOT 5V
- 3 - CE to Arduino pin 9
- 4 - CSN to Arduino pin 10
- 5 - SCK to Arduino pin 13
- 6 - MOSI to Arduino pin 11
- 7 - MISO to Arduino pin 12
- 8 - UNUSED
- */
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h>
- #define CE_PIN 9
- #define CSN_PIN 10
- const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisce il canale di trasmissione
- RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione
- int button1=6;
- int button2=7;
- int buttonstate1;
- int buttonstate2;
- int datatosend[1];
- void setup()
- {
- pinMode (button1, INPUT_PULLUP);
- pinMode (button2, INPUT_PULLUP);
- radio.begin();
- radio.openWritingPipe(pipe);
- }
- void loop()
- {
- buttonstate1 = digitalRead (button1);
- buttonstate2 = digitalRead (button2);
- if (buttonstate1 == LOW)
- {
- datatosend[0] = 1;
- }
- if (buttonstate2 == LOW)
- {
- datatosend[0] = 2;
- }
- radio.write (datatosend, sizeof(datatosend)) ;
- }
Invece caricate quest'altro nell'Arduino "ricevitore"
- /* Basato sull'esempio "YourDuinoStarter Example: nRF24L01 Transmit Joystick values"
- http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
- http://www.danielealberti.it/2016/01/ricetrasmettitori-rf-per-arduino.html
- Collegamenti del modulo RF24L01 ad Arduino:
- 1 - GND
- 2 - VCC 3.3V !!! NOT 5V
- 3 - CE to Arduino pin 9
- 4 - CSN to Arduino pin 10
- 5 - SCK to Arduino pin 13
- 6 - MOSI to Arduino pin 11
- 7 - MISO to Arduino pin 12
- 8 - UNUSED
- */
- #include <SPI.h>
- #include <nRF24L01.h>
- #include <RF24.h>
- #define CE_PIN 9
- #define CSN_PIN 10
- const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisce il canale di trasmissione
- RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione
- int ledpin1 = 6;
- int ledpin2 = 7;
- int datatoreceive[1];
- void setup()
- {
- delay(1000);
- radio.begin();
- radio.openReadingPipe(1,pipe);
- radio.startListening();
- pinMode (ledpin1, OUTPUT);
- pinMode (ledpin2, OUTPUT);
- }
- void loop()
- {
- if ( radio.available() )
- {
- // leggi i dati in ricezione finchè il messaggio è completo
- bool done = false;
- while (!done)
- {
- // ricevi il messaggio
- done = radio.read( datatoreceive, sizeof(datatoreceive) );
- }
- if ((datatoreceive[0])==1)
- {
- digitalWrite (ledpin1,HIGH);
- }
- else
- {
- digitalWrite (ledpin1,LOW);
- }
- if ((datatoreceive[0])==2)
- {
- digitalWrite (ledpin2,HIGH);
- }
- else
- {
- digitalWrite (ledpin2,LOW);
- }
- }
- }
Per maggiori info vi allego anche il sito che mi ha aiutato a comprendere meglio come utilizzare questo modulo (in inglese): http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
Per eventuali dubbi lasciate pure un commento qui sotto, sarò molto contento di rispondervi se conoscerò la risposta ;), ciao!
Seguimi sulle mie pagine per rimanere sempre aggiornato sui nuovi post!
Salve, ho problemi con il trasmettitore ho messo un debug tramite serial.print la funzione radio.write restituisce un valore falso e quindi non trasmette cosa potrebbe essere?
RispondiEliminaInteressante, hai provato ad usarlo con un attiny84 per miniaturizzare un po' il progetto?
RispondiEliminano, purtroppo non so dirti se la libreria è compatibile, fammi sapere!
EliminaNella mia inesperienza (collegato oggi per la prima volta l' nrf24l01 ad arduino) non riesco a capire qual è la potenza di trasmissione radio e il canale che è stato impostato; comunque l'ho montato e funzione perfettamente ma ora vorrei provare a modificare la potenza e il canale di trasmissione.
RispondiEliminaGrazie
Ciao Carlo, il canale è questo:
Elimina0xE8E8F0F0E1LL
la potenza in questo sketch non è modificata. A breve pubblicherò un nuovo post che utilizza una libreria più aggiornata dove si vedono i canali disponibili e il modo di modificare la potenza di trasmissione.
Ciao
Grazie per la risposta. Il canale in altri esempi lo avevo visto come numero decimale da 0 a 124; questo faccio fatica ad interpretarlo anche come esadecimale.
RispondiEliminaGrazie ancora
Salve, sarei interessato a questo sketch in quanto fà al mio caso, ma quando compilo il tutto mi compare il seguente errore. Le librerie sono state scaricate e installate. Questo accade sia con lo sketch master e anche con lo slave
RispondiEliminaArduino:1.6.12 (Windows 7), Scheda:"Arduino/Genuino Uno"
Ricevitore:19: error: redefinition of 'const uint64_t pipe'
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisce il canale di trasmissione
^
C:\Users\---\Desktop\Trasmettitore\Trasmettitore.ino:19:16: note: 'const uint64_t pipe' previously defined here
const uint64_t pipe = 0xE8E8F0F0E1LL; // Definisce il canale di trasmissione
^
Ricevitore:20: error: redefinition of 'RF24 radio'
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione
^
C:\Users\---\Desktop\Trasmettitore\Trasmettitore.ino:20:6: note: 'RF24 radio' previously declared here
RF24 radio(CE_PIN, CSN_PIN); // Stabilisce la comunicazione
^
C:\Users\---\Desktop\Trasmettitore\Ricevitore.ino: In function 'void setup()':
Ricevitore:24: error: redefinition of 'void setup()'
void setup()
^
C:\Users\---\Desktop\Trasmettitore\Trasmettitore.ino:26:6: note: 'void setup()' previously defined here
void setup()
^
C:\Users\---\Desktop\Trasmettitore\Ricevitore.ino: In function 'void loop()':
Ricevitore:33: error: redefinition of 'void loop()'
void loop()
^
C:\Users\---\Desktop\Trasmettitore\Trasmettitore.ino:33:6: note: 'void loop()' previously defined here
void loop()
^
exit status 1
redefinition of 'const uint64_t pipe'
Sembra come se tu abbia ripetutto parte del testo facendo copia incolla. Controlla bene.
RispondiEliminaho controllato, il copia e incolla del codice ed è identico, nessuna anomalia, quando clicco su VERIFICA mi seleziona di rosso la seguente riga
Eliminaconst uint64_t pipe = 0xE8E8F0F0E1LL; // Definisce il canale di trasmissione. Sia con la parte ricevitore che trasmettitore. Ho provato ad aprire un esempio e ho notato che le librerie sono racchiuse tra le virgolette anziche tra il maggiore e minore <> ma anche cambiando i simboli da lo stesso errore. altri consigli?
Ciao, prova con questa libreria:
Eliminagithub.com/tmrh20/RF24/
Fammi sapere, ciao!
chiedo profondamente scusa se ho fatto perdere del tempo, ma posto comunque la soluzione per descrivere da cosa era causato il problema. Le librerie funzionano entrambe, l'errore era dovuto al fatto che io da bravo pirla ho creato un file .ino contenente 2 schede (trasmettitore e ricevitore) come diceva giustamente "lezioni live" nella sua risposta, l'IDE vedeva una sorta di doppio copia e incolla. Ho creato il TX in un file .ino a parte, e l'RX nell'altro. Lo sketch ora viene caricato correttamente senza errori.
EliminaNuovo problema:
Quando verifico lo sketch del ricevitore mi da il seguente errore.
In function 'void loop()':
ricevitore:41: error: void value not ignored as it ought to be
done = radio.read(datatoreceive, sizeof(datatoreceive) );
^
exit status 1
void value not ignored as it ought to be
Si illumina la seguente riga di rosso.
done = radio.read(datatoreceive, sizeof(datatoreceive) );
Ciao, ho provato con la versione 1.6.12 e da errore anche a me, prova con la 1.0.6 (che non mi ha dato errore).
EliminaPotrebbe essere anche una differenza tra librerie perchè sulla 1.0.6 ho quella vecchia (quella nel link di questo post), mentre nella 1.6.12 ho quella che ti ho linkato nel commento precedente.
Fammi sapere, ciao!
Il caricamento degli sketch è avvenuto con la versione da te indicata 1.0.6 e la libreria RF24. E' già qualcosa anche se questo progetto mi sta facendo dannare ora c'e il problema che i moduli non sono abbastanza alimentati a 3.3V come dice la guida in inglese citata nell'articolo.
EliminaIntanto grazie per l'aiuto e chiarimenti :)
Pongo un altra domanda in quanto anche seguendo altre guide online questi moduli non riesco a farli partire. Ho ricontrollato le connessioni piu volte e sono fatte come indicato, mi chiedo come sia possibile che alcuni riescono a farlo funzionare con connessione diretta (vedendo lo schema di Fritzing) mentre alcune guide dicono che bisogna inserire dei condensatori perche arduino non riesce ad alimentare questi moduli. Gli arduini UNO non sono tutti uguali?
EliminaQuesta connessione l'ho provata più volte e funziona, aggiungere dei condensatori per stabilizzare la tensione non dovrebbe essere un problemq, anzi.
EliminaChe problema ti da? ti da errori di compilazione?
Salve, vorrei sapere se è possibile, modificando il programma, sostituire i pulsanti con due potenziometri e i led con due servocomandi, vorrei provare a costruire un radiocomando a breve raggio per i miei modellini.
RispondiEliminaSono un neofita anche se un po attempato e se ho scritto una cavolata......grazie per il tempo che vorrai dedicarmi
Ciao Federico, purtroppo non è così semplice perchè questo modulo è abbastanza particolare e richiede un po di prove prima di dire che la cosa funzioni.
EliminaProssimamente cercherò di pubblicare un post con la tua idea, perchè penso che possa interessare a molti.
Ciao!
Grazie per la tempestiva risposta, volevo realizzare se possibile un radiocomando con poca portata, vorrei comandare un modello di escavatore, quindi il raggio di azione è di pochi metri, ma avrei bisogno di molti canali, eventualmente anche on/off. Ciao
EliminaCiao Daniele, dimenticavo, eventualmente anche con altri moduli tx rx ma se possibile a basso costo.
EliminaGrazie ancora
Ciao si puo fare una comunicazioni con due arduini che comunicano dati e un terzo arduino che riceve i dati dei due? Grazie
RispondiEliminaciao, dai un occhio qua
Eliminahttp://www.danielealberti.it/2016/11/rete-di-moduli-nrf24l01.html
Ciao Daniele , ho testato i moduli eliminando la parte pulsanti e mandando il segnale del tuo esempio per far accendere e spegnere ogni 5 secondi il led del pin 13 di Arduino. Ma non funziona seppur caricati i programmi senza problemi. Come potrei verificare se gli Arduino stanno trasmettendo e ricevendo? Grazie Alessandro
RispondiEliminaFai attenzione che il pin 13 in questo sketch è già stato usato per collegare piedino 5 SCK del modulo
EliminaCiao Daniele , ho testato i moduli eliminando la parte pulsanti e mandando il segnale del tuo esempio per far accendere e spegnere ogni 5 secondi il led del pin 13 di Arduino. Ma non funziona seppur caricati i programmi senza problemi. Come potrei verificare se gli Arduino stanno trasmettendo e ricevendo? Grazie Alessandro
RispondiEliminaCi sono vari esempi di pingback per testare la comunicazione tra due moduli. Se no puoi anche guardare direttamente le librerie di mysensors che sono molto comode per gestire sensori e attuatori
Eliminacome uno sproveduto ho usato il pin 13, non so a cosa stavo pensando.
RispondiEliminaora ho inserito un led al 7 ma non funziona nulla, secondo te ho bruciato il modulo?
non credo che tu l'abbia bruciato, per sicurezza prova a replicare esattamente il progetto nel tutorial, in modo da essere sicuro che non ci siano altri errori. Ciao!
EliminaCiao Daniele, ho testato il tuo progetto utilizzando, al posto dei pulsanti e dei led, la sonda di temperatura DS18B20. Il tutto funziona perfettamente. I tuoi progetti sono un sicuro riferimento per chi, come il sottoscritto, cerca di imparare anche dall'esperienza altrui.
RispondiEliminaA questo proposito, mi piacerebbe capire come si fa a definire l'indirizzo dei canali di trasmissione/ricezione.
Grazie in anticipo
Ciao grazie mille!
Eliminal'indirizzo è definito nella riga 22, è il codice esadecimale E8E8F0F0E1LL. Ciao!
Grazie per la risposta, ma non riesco a capire come si faccia a definire il codice per ogni singolo modulo. In altre parole, in base a quali criteri viene stabilito il codice per il canale di ricetrasmissione?
EliminaIn altri esempi vengono riportati numeri decimali, tipo : canale 90, canale 10 etc.
Grazie e scusa per la mia scarsa competenza.Ciao
Vorrei aggiugere alcune considerazioni sull'utilizzo di questo modulo: attenzione ad utilizzare l'uscita 3.3v perchè sembra essere stabile solo sugli arduino originali, mentre sugli altri cloni è necessario un condensatore da 47 uF (o maggiore) per stabilizzare la tensione durante la trasmissione che richiede ben più dei 12mA, se no la trasmissione non funziona (esistono anche dei regolatori di tensione specifici per questo modulo su gearbest). Il range di funzionamento indoor è alla meglio di 10 metri, ma più realisticamente sono massimo 6-7 che però si possono aumentare usando il modulo con amplificatore e antenna esterna o saldando un dipolo al posto dell'antenna stampata sul PCB (ci sono tutorial su internet). Purtropo anche negli NFR24L01 ci sono una miriade di cloni che possono funzionare bene come anche dare problemi (se avete pagato meno di 2€ per modulo è facilmente un clone); in generale vanno evitati i moduli che invece del chip in vista hanno la goccia di resina che lo nasconde, perchè spesso e volentieri danno problemi o non funzionano
RispondiEliminaSalve, nel ricevente ho un problema, mi da questo errore:" In function 'void loop()':
RispondiEliminariceventeeeee:42: error: void value not ignored as it ought to be
void value not ignored as it ought to be", e mi evidenzia la riga 48 done = radio.read( datatoreceive, sizeof(datatoreceive) );
Grazie in anticipo!! Una buona giornata Samuele
Ho risolto mettendo l'ide 1.0.6! Grazie lo stesso. saluti
EliminaCiao,
RispondiEliminasono riuscito a caricare I due esempi (Tx su un Arduino Nano e RX su un Arduino Uno) ma non succeed nulla.
Mi spiego meglio:
pigio I tasti dal Tx e non si accende nessun Led in Rx
Ho provato anche a mettere una println per capire se sentiva il pigiamento del tasto ma non esce nulla (ho messo addirittura la println nel loop prima del controllo del pigiamento, in modo che ad ogni ciclo dovrebbe uscire una stampa, ma non stampa nemmeno quello).
NOn capisco cosa stia succedendo...
Chiedo scusa,
RispondiEliminaieri avevo dei problem con la seriale.
Ora vedo che sente il pigiamento dei bottone, anche se non capisco come mai, se io non pigio nulla, continua a rilevare il pigiamento del tasto 2.
A parte questo, il ricevitore non riceve nulla.
Puo' essere, come ho letto in un comment, che usando un Nano e un Uno non originali, debba aggiungere un condensatore sul trasmettitore?
Grazie
Ciao, il tasto 1 lo vedi premuto o funziona? verifica i collegamenti e l'orientamento del tasto.
EliminaCiao,
Eliminaho scoperto che il problema era dovuto a un tasto con i piedini leggermente storti e che quindi non facevano contatto.
Grazie mille
Ora devo "soli" trovare il modo di ridurre il consumo a meno di 1mA e svegliarlo a interrupt o timer
Ciao, ma per usarlo come ricetrasmettitore nello stesso momento (ad esempio per fare le stesse cose con entrambi gli Arduino ) basta copiare i codici sia del trasmettitore che del ricevitore su entrambe le schede?
RispondiEliminaGrazie in anticipo per la risposta.
ciao i miei due led non danno segni di vita premendo i pulsanti, i codici sia sul trasmittente che sul ricevitore sono andati a buon fine. Invece di usare i moduli nell'esempio, uso quelli con le antenne che in realtà dovrebbero essere uguale nell'hardware del collegamento (non quello per ricevere e trasmettere) e anche di software. Ora la prima cosa che noto è che si scaldano veramente tanto ma non danno segni di cortocircuito come puzza o fumo, ma semplicemente caldo.
RispondiEliminaQuindi ti chiedo se questo codice è compatibile con questi moduli.
Ti lascio il link dal sito dove li ho comprati in tal modo da vedere le immagini:
https://www.banggood.com/it/3Pcs-1100-Meter-Long-Distance-NRF24L01PALNA-Wireless-Module-With-Antenna-p-1066640.html?rmmds=search
P.s. grazie per la risposta (=
Buongiono Daniele,
RispondiEliminaHo realizzato il piccolo robot autobilanciato di cui ti allego il link. Purtroppo esso monta una scheda wireless che non ho. Disponendo invece di diverse schede RF24L01 volevo chiederti se fosse possibile la sostituzione della schedina originale con una di queste. Purtroppo sono inesperto e vedo che le piedinature sono completamente differenti. Ho solo rispettato l'alimentazione a 3.3V disponendo di una scheda Arduino Nano. Mentre invece per quanto riguarda la trasmissione non capisco tra TX/RX e MOSI/MISO etc.
Mi puoi aiutare?
Grazie per l'eventuale risposta
Questo il link: http://www.brokking.net/yabr_main.html
Buongiorno e complimenti per la chiarezza dell'esposizione.
RispondiEliminaPurtroppo ho gli stessi problemi di Alessandro G e Polito nella compilazione del programma per la ricevente, ciò nonostante abbia sostituito la versione di Arduino più recente con la 1.0.6 come consigliato.
Dove sbaglio? Installando la versione precedente il programma mi ha disinstallato automaticamente quella più recente. Devo fare altro?
Grazie in anticipo per un'eventuale risposta e aiuto.
Enrico
Buongiorno e complimenti per la chiarezza dell'esposizione.
RispondiEliminaPurtroppo ho gli stessi problemi di Alessandro G e Polito nella compilazione del programma per la ricevente, ciò nonostante abbia sostituito la versione di Arduino più recente con la 1.0.6 come consigliato.
Dove sbaglio? Installando la versione precedente il programma mi ha disinstallato automaticamente quella più recente. Devo fare altro?
Grazie in anticipo per un'eventuale risposta e aiuto.
Enrico
secondo me il problema sta qui:
Eliminadone = radio.read( datatoreceive, sizeof(datatoreceive) );
guardando i sorgenti radio.read restituisce VOID quindi non bisogna assegnarlo a nessuna variabile, inoltre, ma questa magari e' ignoranza mia, come primo parametro richiede un puntatore a variabile, nel nostro caso:
radio.read( &datatoreceive, sizeof(datatoreceive) );
cosi dovrebbe essere corretta la cosa....
i sorgenti li ho trovati qui:
http://tmrh20.github.io/RF24/RF24_8cpp_source.html
scusate se ho scritto troppe cavolate in una volta, mi sto avvicinando da pochissimo al c/c++
SAVE vorei sapere se e posibili anche il ricevitore diventare trasetitore e viceverso di due bit
RispondiEliminaSpot on with this write-up, I actually believe that this web site needs a great deal more attention. I'll probably be back again to read through more, thanks for the advice! sign in to gmail
RispondiEliminaCiao, grazie mille per questo articolo, mi è stato di grande aiuto per la realizzazione di un progetto simile. A proposito dei problemi di comunicazione tra TX ed RX, io li ho risolti usando l'nRF24L01 connesso alla sua base ed alimentandola con l'uscita 5v di arduino (uno).
RispondiEliminaCiao, grazie a te per il feedback e per il consiglio, tornerà sicuramente utile!
EliminaBuongiorno...
RispondiEliminaSto provando a usare questo progetto con DHT22...
Allora:
TemperaturaTX
#include ‹SPI.h›
#include ‹nRF24L01.h›
#include ‹RF24.h›
#include ‹SimpleDHT.h›
int pinDHT22 = 2;
SimpleDHT22 dht22(pinDHT22);
float temperature[2];
RF24 radio(9, 10);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(pipe);
}
void loop(void)
{
float temperatura = 0;
float humidity = 0;
int err = SimpleDHTErrSuccess;
if ((err = dht22.read2(&temperatura, &humidity, NULL)) != SimpleDHTErrSuccess)
{
Serial.print("Read DHT22 failed, err = ");
Serial.println(err);
delay(2000);
}
temperature[0] = temperatura;
temperature[1] = humidity;
radio.write(temperature, sizeof(temperature));
Serial.print("Temperatura: ");
Serial.println(temperatura);
Serial.print("Umidità: ");
Serial.println(humidity);
delay(1000);
}
TemperaturaRX
#include ‹SPI.h›
#include ‹nRF24L01.h›
#include ‹RF24.h›
#include ‹Wire.h›
float temperature[2];
RF24 radio(8,7);
const uint64_t pipe = 0xE8E8F0F0E1LL;
void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe);
radio.startListening();
delay(1000);
}
void loop(void)
{
if ( radio.available() )
{
bool done = false;
while (!done)
{
done = radio.read(temperature, sizeof(temperature));
Serial.println(sizeof(temperature));
Serial.print("Temperatura: ");
Serial.print(temperature[0]);
Serial.println(" C");
Serial.print("Umidità: ");
Serial.print(temperature[1]);
Serial.println(" %");
delay(1000);
}
}
}
Ecco cosa riceve in continuazione:
8
Temperatura: nan C
Umidità: nan %
8
Temperatura: nan C
Umidità: nan %
8
Temperatura: 0.00 C
Umidità: 0.00 %
8
Temperatura: 0.00 C
Umidità: 0.00 %
Ciao come cambia il codice se volessi che il led si accenda solo mantenendo premuto il pulsante. Scusate la mia ignoranza ma sono un neofita. Ne ho bisogno per un progetto grazi mille
RispondiEliminaCiao come cambia il codice se volessi che il led si accenda solo mantenendo premuto il pulsante. Scusate la mia ignoranza ma sono un neofita. Ne ho bisogno per un progetto grazi mille
RispondiEliminaCiao come cambia il codice se volessi che il led si accenda solo mantenendo premuto il pulsante. Scusate la mia ignoranza ma sono un neofita. Ne ho bisogno per un progetto grazi mille
RispondiEliminaSalve,
RispondiEliminaho letto l'ottimo articolo sul NRF24L01,
avendo una coppia dei suddetti moduli
per cortesia vorrei sapere se possono funzionare senza Arduino, SOLAMENTE per far scattare con la sola RF un relay per apertura di una porta.
Grazie molte e buona salute
(è importante ! )
Paolo
salve qualcuno ha informazioni su come mettere il sleep l rf24?
RispondiEliminagrazie
Salve a tutti, sto cercando da diversi giorni di far comunicare i due moduli.. Ma senza avere risultati. Utilizzo l'ultima versione della libreria e dell'idea, potrebbe essere una di queste due la problematica? Grazie
RispondiEliminaDomanda: nel ricevente a cosa serve
RispondiEliminaif ( radio.available() )
dato che mi restituisce sempre True, e quindi casco sempre nell' if per poi bloccarmi nel while in attesa della ricezione del dato?
Mi spiego meglio: io con il ricevente devo svolgere altre funzioni, non lo posso "lasciare" nel while in attesa, devo leggere ingressi, pilotare uscite... se tolgo il while e sto facendo altre cose, "perdo" la trasmissione? posso gestirlo con un interrupt?
Ciao Daniele. Ho preso questo tuo progetto e l’ho inserito in un network utilizzando il tutorial (https://howtomechatronics.com/tutorials/arduino/how-to-build-an-arduino-wireless-network-with-multiple-nrf24l01-modules/) e funziona perfettamente. Premendo il pulsante1 si accende il led1, premendo il pulsante2 si spegne il led1 e si accende il 2. Io però avrei la necessità di fare in modo che i pulsanti funzionassero come tali e non come interruttori perché dovrei sostituire i led con dei relè ( automazione tapparelle) e ho bisogno che chiudano il contatto per il tempo che tengo premuto il pulsante ( pochi secondi).
RispondiEliminaHo provato in tutti i modi, con delay, con millis , rigirando lo sketch, ma senza successo.
Ho provato anche ad utilizzare parte del tutorial, che svolge la funzione che mi serve su un led, ma non riesco ad aggiungere un secondo led.
Sicuramente commetto qualche errore, forse anche di concetto, ma ho provato molte alternative, tutte fallite.
Mi potresti, per favore, dare qualche suggerimento?
Grazie in anticipo
Salve, non so se questo commento riceverà risposta, data la lunga distanza di tempo dalla pubblicazione del post. È possibile collegare il modulo a più PC in rete locale, come ricevitori del segnale? Se sì, potrebbe qualcuno spiegarmi come o linkarmi un post in cui viene fatto vedere?
RispondiEliminaGrazie in anticipo
Ciao Syloker, credo di non aver capito bene la domanda, se i PC sono in rete tra loro, non potresti collegare il modulo ad un solo PC (e poi scambiare i dati tra i PC?)
Elimina