PitNRF24L01 SPI LedFader
Comunicazione wireless tra due NRF24L01 tramite BUS SPI.
Comunicazione wireless tra due arduini con NRF24L01 collegati al bus SPI
Riferimenti e istruzioni dal sito di Daniele Alberti
Cosa serve:
- 2 Arduini
- 2 nRF2401l
- cavetti
Codice sorgente trsmettitore (master):
/*
:Project: Rete di moduli nRF24l01 _master
:Author: Daniele Alberti
:Date: 11/2016
:Revision: 1.0
:License: Public Domain
:Url: http://www.danielealberti.it/2016/10/rete-di-moduli-nrf24l01.html
*/
//E' necessario scaricare ed installare questa libreria https://github.com/tmrh20/RF24/
#include
#include
#include
const int pinCE = 9; //settare basso per modulo in standby, alto modulo acceso
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);
//indirizzi dei canali di comunicazione (massimo 6)
const uint64_t rAddress[] = {0x7878787878LL, 0xB3B4B5B6F1LL, 0xB3B4B5B6CDLL, 0xB3B4B5B6A3LL, 0xB3B4B5B60FLL, 0xB3B4B5B605LL };
int i = 0;
void setup()
{
radio.begin(); //Avvia il modulo radio
radio.setPALevel(RF24_PA_LOW); // settaggio della distanza di trasmissione (low)
radio.setChannel(108); // settaggio del canale radio del modulo intero
//Apertura dei 6 canali di trasmissione
radio.openReadingPipe(0, rAddress[0]);
radio.openReadingPipe(1, rAddress[1]);
radio.openReadingPipe(2, rAddress[2]);
radio.openReadingPipe(3, rAddress[3]);
radio.openReadingPipe(4, rAddress[4]);
radio.openReadingPipe(5, rAddress[5]);
}
void loop()
{
for (i = 0; i < 255; )
{
sendCorrectNumber(0, i); //il primo è il numero del canale, il secondo è il dato da inviare
sendCorrectNumber(1, 255 - i);
i=i+5;
delay(20);
}
for (i = 255; i > 0; )
{
sendCorrectNumber(0, i); //il primo è il numero del canale, il secondo è il dato da inviare
sendCorrectNumber(1, 255 - i);
i=i-5;
delay(20);
}
}
bool sendCorrectNumber(byte pipeNum, byte daNumber) {
bool worked; //variabile per monitorizzare la scrittura
radio.stopListening(); //Imposta il modulo come "trasmettitore"
radio.openWritingPipe(rAddress[pipeNum]); //Apri il canale di trasmissione voluto
if (!radio.write(&daNumber, 1)) worked = false; //invia il pacchetto
else worked = true; //se worked vale 1 il pacchetto è stato ricevuto
}
Codice sorgente ricevitore (slave):
/*
:Project: Rete di moduli nRF24l01 _slave
:Author: Daniele Alberti
:Date: 11/2016
:Revision: 1.0
:License: Public Domain
:Url: http://www.danielealberti.it/2016/10/rete-di-moduli-nrf24l01.html
*/
#include
#include
#include
const int pinCE = 9; //settare basso per modulo in standby, alto modulo acceso
const int pinCSN = 10;
RF24 radio(pinCE, pinCSN);
#define WHICH_NODE 1 //cambiare il numero in base al numero del nodo
//creazione dei canali di comunicazione (massimo 6)
const uint64_t wAddress[] = {0x7878787878LL, 0xB3B4B5B6F1LL, 0xB3B4B5B6CDLL, 0xB3B4B5B6A3LL, 0xB3B4B5B60FLL, 0xB3B4B5B605LL};
const uint64_t PTXpipe = wAddress[ WHICH_NODE - 1 ]; //imposta l'indirizzo in base al numero del nodo scelto
const int led1 = 6;
byte gotByte = 0;
void setup()
{
radio.begin(); //Avvia il modulo radio
Serial.begin(9600);
pinMode (led1, OUTPUT);
radio.setPALevel(RF24_PA_LOW); // settaggio della distanza di trasmissione (low)
radio.setChannel(108); // settaggio del canale radio del modulo intero
radio.openReadingPipe(0, PTXpipe); // apri canale di ricezione
radio.startListening(); // imposta il modulo come "ricevitore"
}
void loop()
{
while (radio.available(0))
{
radio.read( &gotByte, 1 ); //leggi un byte e scrivilo nella variabile "gotByte"
}
Serial.println(gotByte);
analogWrite (led1, gotByte); //regola la luminosità del led in base al valore ricevuto
}
Scarica tutto quello che serve:
ZappocoS, 3 febbraio 2018