ARDUINO Mega 2560 und nRF24L01

Der Arduino funkt mit Antenne im 2,4GHz WLAN Band mit etwa 100m Reichweite

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

Amazon.de: nRF24L01+PA+LNA

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.

Tutorial

Autor

About me


Mein Name ist Oliver Lohse. Ich bin diplomierter Wirtschafts-Informatiker und Organisations-Programmierer in verschiedenen Programmier-Sprachen und Markup-Dialekten, z.B. Java, JEE, COBOL, PHP, Python, MySQL, HTML, CSS, ANSI C, Lisp, Rexx, JavaScript, Scheme, ActionScript 2.0, Maschinensprache, Assembler und JCL. Seit mehr als 24 Jahren arbeite ich als Entwickler in einem großen Softwareunternehmen für Versicherungen in Hannover Niedersachsen und seit etwa 37 Jahren im EDV-Sektor mit wechselnden Aufgaben.

Meta: Instagram CMSWorkbench.de GIMP-Handbuch.de Kontakt Impressum Datenschutz