De nRF24L01+ is een 'transceiver'. Het is een 'radio' die zowel kan ontvangen als zenden. Je kan hiermee dus draadloos informatie van de ene naar de andere 'node' sturen. Daarvoor moeten beide zijn aangesloten op een Arduino (of andere microprocessor) waarbij op de ene Arduino de code staat voor de ontvanger (receiver) en op de andere de code voor de zender (transmitter). Hieronder staat de voorbeeld code voor de ontvanger (links) en de zender (rechts) waarmee een ledje aan gaat bij de ene Arduino als op een knop gedrukt wordt bij de andere. Het aansluitschema staat beneden. Helemaal beneden staat code voor het zenden en ontvangen van de knopstaat van twee knoppen naar twee leds.
Er kunnen ook meerdere (meer dan honderd) in een netwerk verbonden worden.
Download indien nodig eerst de nRF24 bibliotheken van deze site:
https://github.com/maniacbug/RF24
(Kijk voor het installeren van bibliotheken op deze site onder sensoren/ libraries installeren)
Hieronder zie je welke pinnen je met elkaar moet verbinden :
VCC is verbonden met Arduino 3,3 VOLT !
GND is verbonden met Arduino GND
CSN is verbonden met Arduino pin 8
CE is verbonden met Arduino pin 7
MOSI is verbonden met Arduino pin 11
SCK is verbonden met Arduino pin 13
MISO is verbonden met Arduino pin 12
IRQ is niet aangesloten
Ga voor meer informatie naar:
https://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/
https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/
http://www.bitsandparts.eu/blog/rf24-nrf24l01-sensor-netwerk-tutorial/
/* nrf24 versie 2 Ontvanger code
Als op de knop van de zender gedrukt wordt gaat de led van de ontvanger aan
Download bibliotheek: https://github.com/maniacbug/RF24
*/
#include <SPI.h>
#include <nRF24L01.h>
#include<RF24.h>
int led = 5;
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState = 0;
void setup() {
pinMode(5, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
}
void loop() {
delay(5);
radio.startListening();
while (!radio.available());
radio.read(&buttonState, sizeof(buttonState));
Serial.println(buttonState);
if (buttonState == HIGH) {
digitalWrite(led, HIGH);
}
else {
digitalWrite(led, LOW);
}
}
/* nrf24 versie 2 zender code
Als op de knop van de zender gedrukt wordt gaat de led van de ontvanger aan.
Download bibliotheek: https://github.com/maniacbug/RF24
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
int button = 4;
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState = 0;
void setup() {
pinMode(button, INPUT);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
}
void loop() {
delay(5);
radio.stopListening();
buttonState = digitalRead(button);
radio.write(&buttonState, sizeof(buttonState));
}
Hieronder voorbeeldcode voor het zenden van de knopstatus van twee knoppen naar 2 leds.
//// Hieronder de code voor ontvangen ////
/* nrf24 --ontvangen-- 2 knoppen 2 leds
nrf24 versie 2 Ontvanger code
Download bibliotheek: https://github.com/maniacbug/RF24
*/
#include <SPI.h>
#include <nRF24L01.h>
#include<RF24.h>
int led1 = 5;
int led2 = 6;
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState1 = 0;
boolean buttonState2 = 0;
void setup() {
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MAX);
radio.startListening();
}
void loop() {
delay(5);
radio.startListening();
while (!radio.available());
radio.read(&buttonState1, sizeof(buttonState1));
Serial.print(buttonState1);
if (buttonState1 == HIGH) {
digitalWrite(led1, HIGH);
}
else {
digitalWrite(led1, LOW);
}
while (!radio.available());
radio.read(&buttonState2, sizeof(buttonState2));
Serial.println(buttonState2);
if (buttonState2 == HIGH) {
digitalWrite(led2, HIGH);
}
else {
digitalWrite(led2, LOW);
}
}
//// Hieronder de code voor zenden ////
/* nrf24 --zenden-- 2 knoppen 2 leds
nrf24 versie 2 zender code
Download bibliotheek: https://github.com/maniacbug/RF24
*/
#include <SPI.h>
#include <nRF24L01.h>#include <RF24.h>
int button1 = 3
int button2 = 4;
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
boolean buttonState1 = 0;
boolean buttonState2 = 0;
void setup() {
pinMode(button1, INPUT);
pinMode(button2, INPUT);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MAX);
radio.stopListening();
}
void loop() {
delay(5);
radio.stopListening();
buttonState1 = digitalRead(button1);
radio.write(&buttonState1, sizeof(buttonState1));
buttonState2 = digitalRead(button2);
radio.write(&buttonState2, sizeof(buttonState2));
}