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
Połączenie modułu 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
//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