• 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 NRF24L01 2,4 GHz Sende und Empfangsmodul für Arduino

Runni

Mitglied
Danke, dass du dir den Aufwand machen willst. Das weiß ich sehr zu schätzen.
Ich kann dir auch gerne mal Codes von 3 Modulen zukommen lassen, wie ich mir das Vorstelle, vielleicht springt dir mein Fehler direkt ins Gesicht?
 

Runni

Mitglied
Ich habe mein Programm mal ganz reduziert und will nur jeweils an der Basis eine LED an und ausschalten können. Node 01 funktioniert, Node 011 jedoch kann keine Daten durchschicken zu Node 00 (Basis)
 

Anhänge

BAXL

Admin
Mitarbeiter
Hi Runni, sorry, ich habe noch nicht reingucken können. Textdateien sind prinzipiell kein Problem, aber etwas sperrig zu handhaben, weil man die mit einem externen Betrachter erstmal öffnen muss. Du kannst hier im Forum Code in ein spezielles Fenster einbetten, dann kann ich mit das auch zwischendurch am Smartphone ansehen. Ich schreibe mal eine Anleitung dafür.
 

Runni

Mitglied
Code:
//Code für die Basis Node 00 (Master)

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
#define led1 3
#define led2 4
int Eingang;
RF24 radio(10, 9);               // nRF24L01 (CE,CSN)
RF24Network network(radio);      // Include the radio in the network
const uint16_t this_node = 00;   // Address of this node in Octal format ( 04,031, etc)

void setup() {
  SPI.begin();
  radio.begin();
  network.begin(90, this_node);  //(channel, node address)
  radio.setDataRate(RF24_2MBPS);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  Eingang = 0;
}
  void loop()
{
 
    Eingangsabfrage();
    
    if (Eingang == 100)
                {
                 digitalWrite(led1, HIGH);
               }
    if (Eingang == 200)
                {
                 digitalWrite(led1, LOW);
               }
    if (Eingang == 300)
                {
                 digitalWrite(led2, HIGH);
               }
    if (Eingang == 400)
                {
                 digitalWrite(led2, LOW);
    }
}


void Eingangsabfrage()
{
  network.update();
  while ( network.available() )
              { // Is there any incoming data?
                RF24NetworkHeader header;
                unsigned long incomingData;
                network.read(header, &incomingData, sizeof(incomingData)); // Read the incoming data
                Eingang = incomingData;
                }
}
----------------------------------------------------------------------------------------------------------------------------------------------------
//Code für Node 01

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
int Start = 100;
int Stopp = 200;
const int Taster1 = 3; //LED1 bei Master ein
const int Taster2 = 4; //LED1 bei Master aus
RF24 radio(10, 9);               // nRF24L01 (CE,CSN)
RF24Network network(radio);      // Include the radio in the network
const uint16_t this_node = 01;   // Address of our node in Octal format ( 04,031, etc)
const uint16_t master00 = 00;    // Address of the other node in Octal format

void setup() {
  SPI.begin();
  radio.begin();
  network.begin(90, this_node);  //(channel, node address)
  radio.setDataRate(RF24_2MBPS);
  pinMode(Taster1,INPUT);
  pinMode(Taster2,INPUT);
}
void loop() {
  network.update();
  //===== Sending =====//
if (digitalRead(Taster1)==HIGH) {   // If it's time to send a data, send it!   //LED1 bei Master ein
    RF24NetworkHeader header(master00);   // (Address where the data is going)
    bool ok = network.write(header, &Start, sizeof(Start)); // Send the data
    delay(300);
  }
if (digitalRead(Taster2)==HIGH) {   // If it's time to send a data, send it!   //LED1 bei Master aus
    RF24NetworkHeader header(master00);   // (Address where the data is going)
    bool ok = network.write(header, &Stopp, sizeof(Stopp)); // Send the data
    delay(300);
  }

}
-----------------------------------------------------------------------------------------------------------------------------------------------------
//Code für Node 011

#include <RF24Network.h>
#include <RF24.h>
#include <SPI.h>
int Start = 300;
int Stopp = 400;
const int Taster1 = 3; //LED2 bei Master ein
const int Taster2 = 4; //LED2 bei Master aus
RF24 radio(10, 9);               // nRF24L01 (CE,CSN)
RF24Network network(radio);      // Include the radio in the network
const uint16_t this_node = 011;   // Address of our node in Octal format ( 04,031, etc)
const uint16_t master00 = 00;    // Address of the other node in Octal format

void setup() {
  SPI.begin();
  radio.begin();
  network.begin(90, this_node);  //(channel, node address)
  radio.setDataRate(RF24_2MBPS);
  pinMode(Taster1,INPUT);
  pinMode(Taster2,INPUT);
}
void loop() {
  network.update();
  //===== Sending =====//
if (digitalRead(Taster1)==HIGH) {   // If it's time to send a data, send it!   //LED1 bei Master ein
    RF24NetworkHeader header(master00);   // (Address where the data is going)
    bool ok = network.write(header, &Start, sizeof(Start)); // Send the data
    delay(300);
  }
if (digitalRead(Taster2)==HIGH) {   // If it's time to send a data, send it!   //LED1 bei Master aus
    RF24NetworkHeader header(master00);   // (Address where the data is going)
    bool ok = network.write(header, &Stopp, sizeof(Stopp)); // Send the data
    delay(300);
  }

}
 

Runni

Mitglied
Hi, war wohl ein HW Problem,
hab alles nochmal neu mit anderen Modulen aufgebaut und es geht!
Aber jetzt habe ich ein anderes Problem, irgendwie zieht mir ein simpler Aufbau ArduinoNano + Funkmodul mir in 15 min die 9V Blockbatterie leer.
Was mache ich falsch? Kann ich meinen Code verbessern? Muß da was rein wie sleep-Geschichten im Funkmodulcode?

LG
 

BAXL

Admin
Mitarbeiter
Hallo Runni,

die NRF24 sind richtige Stromfresser, die können im Sendebetrieb locker bis zu 100mA verputzen, ob deshalb die Batterie so schnell leergezogen wird kann ich schlecht sagen, denn der Arduino konsumiert ebenfalls einiges und je nach zusätzlicher Beschaltung (LEDs, Display, Sensoren usw.), kommt noch was obendrauf.
 

Runni

Mitglied
Hallo zusammen,

leider musste ich feststellen, dass meine Funkmodule nicht zuverlässig funktionieren. Eigentlich eher "Sporadisch" .
Ich habe an der Stromversorgung der Funkmodule immer ein 10 müF Kondensator parallel eingelötet gehabt, wie schon am Anfang im Forum beschrieben wurde.
Jetzt habe ich probiert das Funkmodul separat mit 3,3 V zu versorgen, mit einem Festspannungsregler der auf 3,3V Regelt und mit an der Versorgungspannung ( Akku) hängt.
Die Masse ist durchgeschleift verbunden, Akku zu Arduino und Funkmodul.
Aber jetzt funktioniert über Funk gar nichts mehr.
Habe auch probiert im "Void Setup" ein Delay zu setzten, falls das Funkmodul par Millisekunden zu spät da ist. Hat aber auch nichts gebracht.
Hat mir Jemand vielleicht eine Lösung, damit alles stabil wird?
Was mache ich falsch?
Ich verwende einen 1117 Festspannungsregler am Funkmodul mit Peripherie on board (Fertigkaufteil)

Gruß
 
Zuletzt bearbeitet:

BAXL

Admin
Mitarbeiter
An welcher Versorgungsspannung genau? An den 5V vom Nano, oder direkt an der externen Spannungsquelle? Wie sieht die Spannungsquelle aus?
 

Runni

Mitglied
Habe mittlerweile alles zurück gebaut, und es tut trotzdem nichts mehr.
Denke die 3,3V Regler haben die NRF24L01 Module beschädigt.
Warum auch immer -.- .
Eigentlich haben die Spannungsregler-Module Glättungsperipherie und mit dem Oszi habe ich auch keine Spitzen beim einschalten wahrgenommen.
Werde morgen wieder neue Funk-Module hin löten.
Aber dann bleibt das alte Problem und die Funkverbindung bleibt bzw. ist sporadisch.
 

BAXL

Admin
Mitarbeiter
Hast Du denn mal eins von den fertigen Powermodulen für die NRF24 ausprobiert? Damit habe ich ganz gute Erfahrungen gemacht.
 

Runni

Mitglied
Hallo zusammen!

Ich habe jetzt die Fehlerquelle für meine Übertragungsprobleme gefunden. Manche Arduinos mit Kombination aus mancher NRF24L01 Funk-Module kommen wohl nicht mit der externen Einspeissung der Spannungsversorgung klar.
Wenn ich eine 9V Blockbatterie benutzte bei der gesagten Kombination, habe ich Paketverluste. Benutze ich Jedoch die USB Spannungsversorgung des Arduinos, funktioniert alles einwandfrei.
Kennt Jemand das Phänomen? :confused: .
 

BAXL

Admin
Mitarbeiter
Ui, ich hatte eigentlich damit gerechnet, dass du die Versorgung vom Arduino genommen hast und keine 9V Batterie von außen anlegst. Das hattest Du zwar geschrieben habe ich aber irgendwie nicht wahrgenommen. Also ich nehme stets die 5V vom Arduino an das Powermodul des NRF. Deine Infos ist aber sehr interessant.:thumbsup:
 

Runni

Mitglied
Ich nehme auch die 3,3V Versorgung des Arduinos für das NRF Powermodul.
Aber den Arduino selbst wird mit einem 9V Block Akku versorgt. Da ist doch der GND im Arduino doch eh gebrückt.:unsure:

Und wenn ich den Arduino mit USB-5V betreibe (NRF Modul wird immer noch mit 3,3 V des Arduinos betrieben), sind meine Probleme weg.
 
Top Bottom