Einkaufsliste zum Beitrag
Aufbau
Für die Kommunikation mittels RF24-Modul sind mindestens zwei Arduinos erforderlich. An den Arduino-Boards wird die ICSP Schnittstelle verwendet. Sofern nicht bekannt ist auf welchen Pins die Funktionen liegen, noch einmal kurz folgend die Pins der einzelnen Boards dargestellt.
nRF24L01 am Arduino UNO
Das nRF24L01 kann selbstverständlich mit dem ARDUINO UNO betrieben werden, es werden lediglich sechs Jumperkabel benötigt und vier Digitalpins verbraucht. Somit hat auch der kleine UNO noch genügend Spielraum für die Steuerung weiterer Aktoren oder Sensoren in Verbindung mit dem nRF24L01. Der UNO fungiert in meinem Setup als Empfänger, da ich unterstelle, das dieser nur eine begrenzte Anzahl von Sensoren steuern wird und zudem kleiner als der MEGA 2560 ist.
UNO | nRF24L01 | |
---|---|---|
Pin 8 | -> | CSN |
Pin 11 | -> | MOSI |
Pin 12 | -> | MISO |
Pin 13 | -> | SCK |
Pin 3,3V | -> | V+ |
Pin GND | -> | GND |
Die Aufstellung oben zeigt, welche Pins des UNO-Boards an die Pins des RF-Moduls angeschlossen werden müssen.
nRF24L01 am Arduino MEGA 2560
Der große MEGA 2560 kann ebenfalls problemlos mit dem nRF24L01 benutzt werden, es werden ebenfalls vier Digitalpins verbraucht, jedoch hat der MEGA 2560 noch reichlich Pins übrig, um weitere Module problemlos steuern zu können. In meinem Setup übernimmt der ARDUINO MEGA die Rolle des Senders, da er deutlich mehr Anschlussmöglichkeiten bietet als der kleine UNO.
MEGA | nRF24L01 | |
---|---|---|
Pin 8 | -> | CSN |
Pin 50 | -> | MISO |
Pin 51 | -> | MOSI |
Pin 52 | -> | SCK |
Pin 3,3V | -> | V+ |
Pin GND | -> | GND |
Die Aufstellung oben zeigt, welche Pins des MEGA 2560-Boards an die Pins des RF-Moduls angeschlossen werden müssen.
Das RF Modul
Ich habe gleich drei von diesen Modulen in einem Paket für etwa 15,- EUR erhalten und diese hier bestellt.
Unterseite des nRF24L01
Die Module sind ordentlich beschriftet und man kann sehr leicht die Verbindungen zu den ICSP-Pins der einzelnen Arduinoboards mit Hilfe von Jumperkabeln herstellen.
Hinweis: Am RF24L01 wird in meinem Aufbau der Anschluss CS (Chip-Select) nicht benötigt und kann frei bleiben.
Der Sender
Für die einfache Programmierung der Funkverbindung, gibt es auf GITHUP eine fertige Bibliothekt TMRh20/RF24. Laden Sie diese herunter und kopieren diese in den Bibliothekenordner der ARDUINO-Installation. Der Sender ist ganz einfach gehalten und kommuniziert auf der Adresse 00001. Er sendet alle 1s den freundlichen String "Hallo World" an alle Stationen die unter der Adresse 00001 zuhören:
001 /*
002 * Arduino Funk-Beispiel
003 * Der SENDER
004 *
005 * by Oliver Lohse, www.NodeMCU.de
006 *
007 * Zusätzliche Bibliothek: TMRh20/RF24, https://github.com/tmrh20/RF24/
008 */
009 #include <SPI.h>
010 #include <nRF24L01.h>
011 #include <RF24.h>
012 RF24 radio(7, 8); // CE, CSN
013 const byte address[6] = "00001";
014 void setup() {
015 radio.begin();
016 radio.openWritingPipe(address);
017 radio.setPALevel(RF24_PA_MIN);
018 radio.stopListening();
019 }
020 void loop() {
021 const char text[] = "Hello World";
022 radio.write(&text, sizeof(text));
023 delay(1000);
024 }
Empfänger
Der Empfänger wird von einem zweiten Arduino Board gebildet und dieser lauscht die ganze Zeit auf einkommende Meldungen auf der Adresse 00001. Sofern er Signale empfängt, leitet er diese an das serielle ARDUINO IDE Terminal weiter (mit Strg+Shift+M starten).
001 /*
002 * Arduino Funk-Beispiel
003 * Der EMPFÄNGER
004 *
005 * by Oliver Lohse, www.NodeMCU.de
006 *
007 * Zusätzliche Bibliothek: TMRh20/RF24, https://github.com/tmrh20/RF24/
008 */
009 #include <SPI.h>
010 #include <nRF24L01.h>
011 #include <RF24.h>
012 RF24 radio(7, 8); // CE, CSN
013 const byte address[6] = "00001";
014 void setup() {
015 Serial.begin(9600);
016 radio.begin();
017 radio.openReadingPipe(0, address);
018 radio.setPALevel(RF24_PA_MIN);
019 radio.startListening();
020 }
021 void loop() {
022 if (radio.available()) {
023 char text[32] = "";
024 radio.read(&text, sizeof(text));
025 Serial.println(text);
026 }
027 }
Die Verkabelung der Komponenten ist absolut unkritisch. Zu beachten ist lediglich der Sachverhalt, das das Funkmodul mit 3,3V arbeiten muss. Die Arduino-Boards bieten jedoch dafür einen eigenen Pin.
Für größere Reichweiten sollte der Parameter RF24_PA_MIN auf RF24_PA_MAX gestellt werden.