• Hallo Zusammen, Aufgrund der aktuellen Situation setzten wir die Möglichkeit aus, sich mit Gmail zu registrieren. Wir bitten um Verständnis Das RCMP Team

Praxisbericht Rolladensteuerung mit NRF24L01 2,4 GHz und Arduino Nano

Dogger

Mitglied
Der Beitrag stützt sich auf BAXL´s Beitrag: NRF24L01 2,4 GHz Sende und Empfangsmodul für Arduino

https://www.rc-modellbau-portal.de/...ghz-sende-und-empfangsmodul-für-arduino.6753/

Super Sache die du da machst.

Ich habe mir als Winterprojekt vorgenommen meine elektrischen Rollläden zu steuern und damit anzufangen mein „Home smarter“ zu machen.

Ich werde also dein Aufbau nachbauen um den NRF24L01 zu verstehen. ( Ist die beste Erklärung auf deutsch die ich gefunden haben ).

Ich habe dir also jetzt mit zwei Arduino nano´s und zwei NRF24L01 + PA+LNA`s nachgebaut.

> Erster Abend leider ohne Erfolg.

Ich hätte da jetzt zwei Fragen:

- In der Verkabelung gibst du an CSN auf Pin 8 und CE auf Pin 7.

In dem Programm nimmst du aber Pin 8 und 9.

Ist das ein Stolperstein für Leute die nur Copy & Paste nutzen und gibt es noch mehr ?

- Wo bekomme ich die library her ? ( Ich denke das ich möglicherweise die Falsche habe )



Ich habe es mit: „ radio.setChannel (z.B.3) “ im void setup versucht aber ich bekomme das Taster Signal nicht übertragen. Der Empfänger schreibt zwar immer fröhlich „empfange!“ und dann lässt er eine Spalte frei aber das macht er auch wenn ich den Sender abschalte.

PS: Soll ich meine Frage irgendwo anders rein schreiben damit ich diese schöne Dokumentation nicht verschmutze ?
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Hallo Dogger,

herzlich willkommen im Forum und vielen Dank für Deine lobenden Worte. Ich werde die Anschlüsse heute Abend überprüfen.

Einen anderen Kanal brauchst Du nicht unbedingt nehmen, es sollte auch so funktionieren. Es sei denn, Du hast festgestellt, dass bei Dir zuhause das WLAN diesen Kanal stark belastet. Du kannst aber, wenn Du es eilig hast, die Anschlüsse für CSN und CE einfach mal tauschen. Kaputtgehen kann nichts. Wie sieht es mit dem Stützkondensator aus, das hat mir anfangs das Korn verhagelt, als ich ohne Elko die Schaltung aufgebaut habe. Manchmal macht es auch schon etwas aus, wie das NRF24-Modul mit seiner Antenne ausgerichtet ist. Ich würde mich freuen, wenn Du uns Fotos von Deinem Aufbau und Baufortschritt zeigst.

Deinen und meinen Post ziehe ich aber einfach mal hier raus und mache ein neues Thema auf,

Edit:

@Dogger
Ich habe mir das im Bericht gerade angesehen, Du hast Recht, auf dem Foto sind die Pins 7 und 8 angegeben und im Programm nehme ich 8 und 9. Das Foto habe ich von einer anderen Internetseite eingebunden. Meine Schaltung (Pinbelegung) ist sicher aus einer anderen Internetseite entstanden, wo der Autor eben die Pin´s 8 und 9 verwendet hat. Pin 7 nehme ich für einen anderen Zweck. Jeder entwickelt im Laufe der Zeit so seine Vorlieben, welche Anschlüsse er für welche Zwecke verwendet, das schleift sich dann ein und wird irgendwie in neuen Projekten weitergeschleppt, weil man dann seine Codeschnipsel einfacher (ohne Änderungen) weiter verwenden kann.

In meinem Programmlisting steht als Erklärung:

RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instanz um das Modul zu starten

Siehe auch hier:

Ich sage dem Programm also, ich habe ein Modul und das soll "radio" heißen und über die Arduinopins 8 und 9 angesteuert werden.
Das mache ich mit dem Befehl:

RF24 radio(8, 9);

Im Zweifel orientiere Dich an den Angaben im Listing. Ich werde dann aber in den nächsten Tagen ein eigenes Bild malen, leider habe ich das mit Fritzing noch nicht so raus :).

Welche LIB ich verwende sehe ich heute Abend auch kurz nach.

Was das "copy und paste" angeht, so ist das absolut in Ordnung, dafür schreibe ich das ja möglichst ausführlich, der Stolperstein war also nicht bewusst von mir eingebaut, das ist ein unglücklicher Zufall. Es ist aber gut, wenn jemand das findet und Bescheid gibt, dann kann ich nachbessern.

Wir bekommen Deine Schaltung schon zum Laufen.
 
Zuletzt bearbeitet:

Dogger

Mitglied
Ich werde mich heute Abend auch wieder an die Sache dran setzten.

Mache dann mal ein Bild.

Ich versorge die NRF24L01 + PA+LNA`s mit einem Labornetzteil und habe ein 100uF und 10uF am Breadboard von da aus über Kabelbrücken und einem PC Flachbandkabel zum NRF (15cm Strecke)
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Kurz eine Frage, ob ich es richtig verstanden habe, das NRF24 ist nicht an der 3,3V Versorgung des Nano angeschlossen?

Und ja, Du mußt entweder die Adresse direkt in radio.openReadingPipe( . ) einsetzen, oder Du definierst im Vereinbarungsteil, über void setup() eine Variable, die eben adress, Adresse, Schnudelhupf oder sonstwie heißen kann und weist dieser den String "00001" zu. Der Empfänger muß natürlich die gleiche Adresse haben. Achtung, achte bei Variablennamen genau auf die Schreibweise, die IDE unterscheidet Groß und Kleinbuchstaben, so ist Name nicht gleich name.

Siehe Beispielprogramm:

// Variablen und Instanzendefinition für das NRF Modul
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte address[6] = "00001"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!

Der Aufruf würde dann über:

radio.openReadingPipe(0, address); //Setting the address at which we will receive the data

erfolgen.

In einem späteren Stadium meines Projektes, als ich mehrere Sendermodule im Einsatz hatte, bin ich auf ein "Adress Array" gewechselt, das macht die Programmpflege einfacher und man kann kann die Sendeeinheiten mit der Änderung an nur einer Programmzeile auf eine neue Adresse setzen.

static const uint64_t pipe[6] = {0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL, 0xF0F0F0F0B4LL, 0xF0F0F0F0A5LL, 0xF0F0F0F096LL};

Für Deine ersten Tests solltest Du das aber noch einfach halten, um schlecht findbare Fehler zu vermeiden.
Du kannst also beruhigt mit der einfachen Variante arbeiten, brauchst aber dann für jeden Empfangskanal eine eigene Zuordnung zur Pipe. Z.B.:

radio.openReadingPipe(0, "00001");
radio.openReadingPipe(1, "00002");
radio.openReadingPipe(2, "00003");
usw. bis zur 6. Pipe, mehr kann er nicht.
 

Dogger

Mitglied
Nein weil NRF24L01 + PA+LNA zu viel Strom benötigt.
Masse ist natürlich verbunden!

Ich habe
const byte address[6] = "00001";
übersehen.
 

BAXL

Admin
Mitarbeiter
Hast Du die Adresse auch in Hochkommas gesetzt? Also genau so “00001“

Bist Du sicher, dass der Schneidklemmpfostenstecker ok ist? Also Kontakt und keine Kurzschlüsse?

poste auch mal Deinen Code.
 

Dogger

Mitglied
Ich habe die Versorgungen direkt auf den Platinen gemssen !

Sender :
Code:
// Programm zur Übermittlung eines Schalterzustandes mit einem 2,4 GHz NRF24 Modul

// Bibliotheken zur Bedienung des NRF24 Moduls
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


// Variablen und Instanzendefinition für das NRF Modul
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte address[6] = "00001"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!
boolean button_state = 0;

int button_pin = 7; // Signalpin zum Einlesen des Schaltsignals (Taster, Bewegungsmelder etc.)

void setup() {
Serial.begin(9600); // Start des seriellen Ausgabe per USB an einen PC falls man sich zur Kontrolle im Programmablauf etwas anzeigen lassen möchte
pinMode(button_pin, INPUT); // Port zum Einlesen des Schalterzustandes konfigurieren
radio.begin(); // Start der 2,4 GHz Wireless Kommunikation
radio.openWritingPipe(00001); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
radio.stopListening(); // Das angeschlossene Modul wird als Sender konfigurieret
radio.setChannel(10); //Test
}

void loop()
{

button_state = digitalRead(button_pin); // Einlesen des Schalterzustandes
radio.write(&button_state, sizeof(button_state)); //Senden des Schalterstatus zum Empfänger

delay(50); // kurze Verschnaufpause, damit der Empfänger sich nicht verschluckt
}
Empfänger:

Code:
// Bibliotheken für 2,4 GHz Modul
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(8, 9); // CE, CSN
const byte address[6] = "00001";
boolean button_state = 0;
int led_pin = 7;


void setup() {
pinMode(7, OUTPUT);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0,00001); //Setting the address at which we will receive the data
radio.setPALevel(RF24_PA_MIN); //You can set this as minimum or maximum depending on the distance between the transmitter and receiver.
radio.startListening(); //This sets the module as receiver
Serial.println("gestartet");
radio.setChannel(10); //Test
}

void loop()
{
if (radio.available()) //Looking for the data.
{
Serial.println("empfange!");
char text[32] = ""; //Saving the incoming data
radio.read(&text, sizeof(text)); //Reading the data
radio.read(&button_state, sizeof(button_state)); //Reading the data
if(button_state == HIGH)
{
digitalWrite(7, HIGH);
Serial.println(text);
}
else
{
digitalWrite(7, LOW);
Serial.println(text);}
}
delay(50);
}
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Der Fehler liegt in radio.openWritingPipe(0001);

da muss

radio.openWritingPipe(“00001“);

stehen

bei

radio.openReadingPipe(0,00001);

muss

radio.openReadingPipe(0,“00001“);

stehen. Die "00001" muss genau so da eingesetzt werden, es darf keine 0 fehlen!

Beim Programm für die Übermittlung solltest Du auch die Programmzeilen für das Senderprogramm verwenden. Du hast in beiden Programmen die Befehle für den Datenempfang stehen.

Beim Programm zum Einlesen des Schalterzustandes muß der Pin 7 auch als INPUT gesetzt werden.
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Ganz kurz, damit ich es richtig verstanden habe. Die beiden Codeblöcke, die Du oben gepostet hast, sollen einmal das Sendeprogramm und einmal das Empfängerprogramm sein? Richtig?

Mein Senderprogramm sieht so aus:

Code:
// Programm zur Übermittlung eines Schalterzustandes mit einem 2,4 GHz NRF24 Modul

// Bibliotheken zur Bedienung des NRF24 Moduls
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>


// Variablen und Instanzendefinition für das NRF Modul
RF24 radio(8, 9); // CE, CSN - die Zahlen geben die Digitalports am Arduino an, Instatz um das Modul zu starten
const byte address[6] = "00001"; //Adresse, auf dem die Empfangsdaten gesendet werden sollen. Der Empfänger benötigt dieselbe Adresse!
boolean button_state = 0;

int button_pin = 7; // Signalpin zum Einlesen des Schaltsignals (Taster, Bewegungsmelder etc.)

void setup() {
Serial.begin(9600); // Start des seriellen Ausgabe per USB an einen PC falls man sich zur Kontrolle im Programmablauf etwas anzeigen lassen möchte
pinMode(button_pin, INPUT); // Port zum Einlesen des Schalterzustandes konfigurieren
radio.begin(); // Start der 2,4 GHz Wireless Kommunikation
radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten
radio.setPALevel(RF24_PA_HIGH); // Leistung des NRF Moduls je nach Entfernung kann man von MIN bis MAX einstellen (MAX,HIGH,LOW,MIN)
radio.stopListening(); // Das angeschlossene Modul wird als Sender konfigurieret
}

void loop()
{

button_state = digitalRead(button_pin); // Einlesen des Schalterzustandes
radio.write(&button_state, sizeof(button_state)); //Senden des Schalterstatus zum Empfänger

delay(50); // kurze Verschnaufpause, damit der Empfänger sich nicht verschluckt
}
 

BAXL

Admin
Mitarbeiter
Funktioniert die folgende Zeile nicht bei Dir?

radio.openWritingPipe(address); // Setzen der Sendeadresse zur Übermittlung der Daten

oder Post #11 beachten
 

Dogger

Mitglied
Ich habe sie installiert und die andere rausgeschmissen >> keine Änderung

Ist es Normal das bei :

#include <SPI.h> ( SPI orange )

#include <nRF24L01.h> ( nRF24L01 bleibt schwarz )

#include <RF24.h> ( RF24 orange )
 

Dogger

Mitglied
Ich habe jetzt wieder

radio.openWritingPipe(address);

geschrieben

wenn ich “00001“ schreibe gibt er mir ein Fehler beim hochladen durch ( Post 12 )
 
Top Bottom