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