|

Komunikacja radiowa SPI NRF24L01 z Arduino

Napięcie zasilania : 1,9V – 3,6V (Pozostałe piny tolerują 5V)

Pobór prądu : 11mA

Częstotliwość pracy : 2,4GHz

Prędkość transmisji 250kbps, 1Mbps lub 2Mbps

Dystans: 100m

Moduł radiowy NRF24L01 pinout
Moduł radiowy NRF24L01 pinout

Połączenie modułu z Arduino

Połączenie modułu radiowego NRF24L01 z Arduino
Połączenie modułu radiowego NRF24L01 z Arduino

Przesyłanie danych NRF24L01 0 i 1 do przełączania LED

//nadajnik
#include <SPI.h>
#include "RF24.h"
RF24 radio(9, 10);
const byte adres[6] = "00001";
int msg[1];
bool isActive = true;
const int countDelay = 1000;
unsigned long previousMillis = 0;

void setup(void) {
  Serial.begin(9600);
  radio.begin();
  radio.openWritingPipe(adres);
  radio.stopListening();
}
void executeEvery1() {
  if (millis() - previousMillis >= countDelay) {
    previousMillis = millis();
    msg[0] = isActive ? 1 : 0;
    radio.write(msg, 1);
    Serial.println(msg[0]);
    isActive = !isActive;
  }
}
void loop() {
  executeEvery1();
}
//odbiornik
#include <SPI.h> 
#include "RF24.h"   
RF24 radio(9,10); 
const int LED_PIN = 13;
const byte adres[6] = "00001"; 
int msg[1];  
 
void setup(){ 
  pinMode(LED_PIN, OUTPUT);        
  radio.begin(); 
  radio.openReadingPipe(0,adres); 
  radio.startListening();  
} 

void loop(){  
  if (radio.available()){
    radio.read(msg, 1); 
    digitalWrite(LED_PIN, msg[0]);
  }
} 

Komunikacja NRF24L01 w 2 kierunkach

Przesyłanie danych radiowo NRF24L01 w dwóch kierunkach
Przesyłanie danych radiowo NRF24L01 w dwóch kierunkach
//NRF24 nr1 i nr2
#include <SPI.h>
#include <RF24.h>
const int LED = 3;
const int BTN = 2;
RF24 radio(9, 10);
const byte addresses[][6] = {"00001", "00002"};
bool inData = 0;
bool btnPrevState = false;
bool state = 0;

void setup() {
  pinMode(LED, OUTPUT);
  pinMode(BTN, INPUT_PULLUP);
  radio.begin();
  radio.openWritingPipe(addresses[0]); //zamiana 0 na 1 dla 2 urządzenia
  radio.openReadingPipe(1, addresses[1]); //zamiana 1 na 0 dla 2 urządzenia  
  radio.setPALevel(RF24_PA_HIGH);  
}

void onClick() {
  bool btnNowState = digitalRead(BTN);
  if (btnNowState == 1 && btnPrevState == 0) {
    state = !state;
    radio.stopListening();
    radio.write(&state, sizeof(state));    
  }
  btnPrevState = btnNowState;
}

void loop() {
  delay(10);
  radio.startListening();
  if(radio.available()){
    radio.read(&inData, sizeof(inData)); // Przekazanie wskaźnika na zmienną
    digitalWrite(LED, inData);
  }
  onClick();
}

Wysyłanie pakietu danych (struct)

// Nadajnik
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const byte address[6] = "00001";
int counter = 0;
float temp = 0.0;

// Max size of this struct is 32 bytes - NRF24L01 buffer limit
struct Data_Package {
  int a;
  float b;
};

Data_Package data = {0, 0.0};

void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}

void loop() {
  radio.write(&data, sizeof(Data_Package));
  counter += 1;
  data.a = counter;
  temp += 0.1;
  data.b = temp;
  delay(500);
}
//Odbiornik
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const byte address[6] = "00001";

struct Data_Package {
  int a;
  float b;
};

Data_Package data; 

void setup() {
  Serial.begin(9600);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}

void loop() {
  if (radio.available()) {
    radio.read(&data, sizeof(Data_Package)); 
  }
  Serial.print("a: ");
  Serial.print(data.a);
  Serial.print(" b: ");
  Serial.println(data.b);
}

Zobacz: Komunikacja I2C w Arduino

Zobacz: Komunikacja SPI w Arduino

Zobacz: Komunikacja radiowa SPI NRF24L01 z Arduino

Podobne wpisy

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *