• 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
no matching function for call to 'openReadingPipe(int, const char [6])'

Auch wenn ich : //const byte address[6] = "00001"; ausklammere
 

BAXL

Admin
Mitarbeiter
NRF24 Compilermeldung.jpg Ich kopiere mal meinen letzten Stand ein, der ohne Beanstandungen kompiliert wird:

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

// Die Betriebsspannung vom NRF24 Modul MUSS!! an 3,3V vom Arduino angeschlossen werden
// ACHTUNG!!! ca 10 nF Elko zwischen 3,3V und Masse schalten um die Übertragung zu stabilisieren

// 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
  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
  Serial.println(button_state);           // Kontrollausgabe des Schalterzustandes am PC-Monitor

/*  if(button_state == HIGH)
    {
      const char text[] = "Your Button State is HIGH"; // Erstelle Zeichenkette als Textmitteilung
      radio.write(&text, sizeof(text));                //Sende Zeichenkette zum Empfänger
    }
  else
    {
      const char text[] = "Your Button State is LOW";   // Erstelle Zeichenkette als Textmitteilung
      radio.write(&text, sizeof(text));                 //Sende Zeichenkette zum Empfänger
    }
*/

//      const char text[] = "Your Button State"; // Erstellen einer Zeichenkette als Textmitteilung
//      radio.write(&text, sizeof(text));        // Senden der Zeichenkette zum Empfänger

  radio.write(&button_state, sizeof(button_state));  //Senden des Schalterstatus zum Empfänger
  delay(50);
}
 

Dogger

Mitglied
ZU der Frage ob es mit der Adresse geht :

Auch wenn ich : //const byte address[6] = "00001"; ausklammere[/QUOTE]
Funktionieren ist gerade relativ !

Aber es kommt keine Fehlermeldung
 
D

Deleted member 1492

Gast
Mensch BAXL! Als Initiator dieser Ecke bin ich grad mal völlig von der Rolle! :thumbsup::thumbsup:

@Dogger das wird, es wird eine Lösung geben, nur Geduld! ;)
 

BAXL

Admin
Mitarbeiter
Man merkt aber wieder einmal, selbst bei ausgetesteten Sachen kann bei der eigenen Adaption irgendwo ein klitzekleiner Fehler stecken.

Grundlage für meinen Code findet man auf dieser Seite.

Die passende Lib gibt es hier.
 
D

Deleted member 1492

Gast
Wobei Fehler meist nur winzig sind, sei es ein vergessenes Komma oder Anführungsstriche.
Das ist der Punkt, wo ich bei Problemen immer zuerst suche.
 

BAXL

Admin
Mitarbeiter
Folgenden Sketch für den Empfänger habe ich auch gerade noch einmal ohne Fehlermeldung kompiliert:

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, address);   //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");
}
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);
}
 

Dogger

Mitglied
Funktionieren ist gerade relativ !
Damit meine ich das ich nicht sagen kann ob es funktioniert weil ich ja keine Übertragung habe.
Ich habe jetzt eine App geladen mit der ich das W-Lan Signal sehen kann. ( habe keine Fritzbox hier im keller)
Die erkennt nur das Signal von meinem Repeater und einer entfernten Fritzbox!
Keine Ahnung ob der NRF24 überhaupt sendet.
Auch das Beispiel (Getting Started example sketch for nRF24L01+ radios)
bekomme ich nicht ans laufen.
Ich werde jetzt alles nochmal neu aufbauen und ein Elko direkt an den NRF24 setzten und dann berichten.
 

BAXL

Admin
Mitarbeiter
Ich würde, wenn es möglich ist, ganz minimalistisch verkabeln und auf das Flachbandkabel verzichten. Jede Verbindung zwei mal überprüfen. Meine Sketches funktionieren so. Wenn Die von Deinem Compiler ohne Fehlermeldung kompiliert werden, dann lasse sie erstmal so. Wahrscheinlich liegt ein Hardwarefehler vor, wenn dann keine Datenübertragung stattfindet. Bei mir hat es bis zum ersten funktionierenden NRF24-Pärchen auch etwas gedauert und der Fehler war immer etwas an der Hardware. Und ganz wichtig, am Anfang immer genug Zeit zwischen den abgesendeten Datenpaketen lassen.

Hast Du Dir denn auch mal am Monitor die ankommenden Daten angesehen?
 

Dogger

Mitglied
@BAXL
Betrachte mal genauer das Bild von der Platine und der Verdrahtung von NANO.
Mosi und Miso sind vertauscht!?

Aber das war leider auch nicht meine Lösung !
Mit dem Code von oben klappt es auch nicht bzw wieder das gleiche Problem:
Taster kann ich beim Sender im Seriellen Monitor sehen.
Beim Empfänger im Seriellen Monitor kommt :

21:12:09.968 -> gestartet
21:12:10.048 -> empfange!
21:12:10.048 ->
21:12:10.088 -> empfange!
21:12:10.088 ->
21:12:10.128 -> empfange!
Und das dann immer weiter …

Übertragung von Taster zur LED geht natürlich nicht !
 

Dogger

Mitglied
Deinen auf deiner Projektseite 2te und 3te Bild

Nach dem ich eine Steckerkupplung gelötet habe um das Flachband raus zu bekommen kommt immer noch der Fehler.
Aber ich habe eine interessante Erkenntnis gemacht:
Der Serielle Monitor vom Empfänger stoppte nach der Meldung gestartet.
Als ich dann Sender Arduino resetete lief der Monitor vom Empfänger wieder weiter.
Das würde ich als eine Informations-Übertragung zählen !!!
 

Dogger

Mitglied
...
Ändere ich beim Sender die Adresse auf 00002 bekomme ich nicht dieses Phonemen.
> Die Adresse stimmt

edit:
Kann ich mir irgendwie auf den Seriellen Monitor holen was der Empfänger an Daten bekommt ?
 

BAXL

Admin
Mitarbeiter
Dann ist die Verkabelung jetzt scheinbar in Ordnung. Poste doch nochmal die Codes, die jetzt aktuell auf den Arduinos läuft.
 

Dogger

Mitglied
Die Verkabelung läuft !

Ich habe den Code genommen den du oben reingesetzt hast.

Und darin war der Harken

>>> //radio.read(&text, sizeof(text)); //Reading the data

Hab mir gedacht wofür nach einem text fragen wenn gar keiner Gesendet wird ?

Ich habe es rausgeschmissen und jetzt läuft der Taster und schaltet Pin 7 am Empfänger.

Wofür ist den “text“ ?

... In dem Code oben war der Text beim Sender ausgeklammert

edit
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
Der auskommentierte code war aus einer früheren Version und hat jetzt keine Aufgabe mehr, ich habe den kompletten Sketch deshalb so gepostet um sicher zu sein, dass wirklich alles da ist und nicht etwas beim Bereinigen des Codes aus Versehen verlorengegangen ist.
 

Dogger

Mitglied
Ja aber der Empfänger hat wahrscheinlich auf text gewartet.
Die Progamzeile war noch nicht ausgeklammert
Ist übrigens auch in dem Code auf deinem Thema so.
 
Top Bottom