NRF24L01 mit Arduino Nano betreiben

Hallo,
ich versuche zurzeit 2 Arduino Nanos mit den nRF2407L01 Modulen ohne Kabel kommunizieren zu lassen.
Die Verkabelung der beiden sieht dabei wie folgt aus:
GND -> GND
VCC -> 3V3
CE -> D6
CSN -> D7
SCK - > D13
MOSI - > D11
MISO -> D12

Diese Bibliothek habe ich eingebunden:

Der Code für den Sender:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(6, 7); // CE, CSN         
const byte addresses [][6] = {"00001", "00002"};  

int b = 50;

void setup() {
  radio.begin();                          
  radio.openWritingPipe(addresses[1]);     
  radio.openReadingPipe(1, addresses[0]);  
  radio.setPALevel(RF24_PA_HIGH); 
  Serial.begin(9600);
}

void loop() 
{
  delay(5)
  radio.stopListening();                             //This sets the module as transmitter
  Serial.println(b);
  radio.write(&b, sizeof(b));  //Sending the data
  delay(2000);
  b=b+1;
  
}

Der Code für den Empfänger:

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

RF24 radio(6, 7); // CE, CSN         
const byte addresses [][6] = {"00001", "00002"};  //Setting the two addresses. One for transmitting and one for receiving

int b;

void setup() {
  radio.begin();                           
  radio.openWritingPipe(addresses[0]);    
  radio.openReadingPipe(1, addresses[1]);  
  radio.setPALevel(RF24_PA_HIGH); 
  Serial.begin(9600);
}

void loop() 
{
  radio.startListening();                   

 if (radio.available())                     
  {
    radio.read(&b, sizeof(b));
    Serial.println(b);
  }
 else
 {
  Serial.println("nichts");
 }
 delay(1500);
}

Wenn ich mir dann aber den Seriellen Monitor anschaue werden immer nur 0 angezeigt.

Weiß jemand, was ich hier falsch gemacht habe?

Mit freundlichen Grüßen
Matthias

Haben Sie versucht, den nRF2407L01 NRF24L01 mit einem dedizierten, hochwertigem 3,3-V-Netzteil mit Strom zu versorgen (und es mit GND Ihres Arduino zu verbinden)?

Wenn Module zum Testen nahe beieinander liegen, verwenden Sie nicht HIGH. setze dies auf LOW (sonst werden Sie wahrscheinlich Interferenzprobleme haben)

Hallo,
Einen "nRF2407L01" gibt es nicht, ich kann zumindest keinen finden.
Sollte es ein Schreibfehler sein, dann bitte im Titel ändern.

Aufbau:
2 Nano und Verkabelung wie von Dir angegeben:
Ausgabe auf dem Empfänger

11:01:19.939 -> 117
11:01:21.431 -> 118
11:01:22.922 -> 119
11:01:24.413 -> nichts
11:01:25.905 -> 120
11:01:27.429 -> 121
11:01:28.921 -> 122
11:01:30.412 -> nichts
11:01:31.903 -> 123

Ich habe eine schwere Vermutung.
Die Module ziehen bei voller Leistung mehr Strom, als der Nano auf der 3,3V Schiene liefern kann.
Wenn Du das auf dem Steckbrett baust, dann als erstes die Leistung auf PA_MIN stellen.
Ich selbst versorge die Module über den 5V-Adapter, da gibt es die Probleme nicht.
Wenn das runtersetzen der Leistung nicht reicht, hilft ein Kondensator mit 10µF der auf die Versorgungspin gelötet wird.

Ich habe jetzt bei beiden die Zeile
radio.setPALevel(RF24_PA_MIN);
geändert und die VCC Leitung mit dem 5V Pins des Arduinos verbunden und es funktioniert trotzdem noch nicht.

Das einzige, was bei meinem Aufbau anders ist, ist dass nur der Empfänger per Kabel mit dem PC Verbunden ist und der Sender mit einer 9V Batterie auf dem Vin Pin betrieben wird, das dürfte aber auch kein Problem sein oder?

Vorwort:
Als Beginner/Anfänger/Neuling, muss man das nicht wissen.
Aber alte Hasen müssen es eigentlich auf den ersten Blick sehen.

Es ist traurig... und es geschieht immer wieder... So oft, dass ein Muster dahinter stecken muss. Eine geheime Weltverschwörung?
Viele Jahre lang habe ich dazu geschwiegen, jetzt bricht es aus mir heraus!

Was?

Es ist doch klar, dass ein offener Input Pin keinen stabilen High oder Low Zustand liefern kann, soll, oder auch tut. Darf er gar nicht.
Wenn man sich dieses Faktum mal in seinen Erkenntnisapparat einsickern lässt und die Konsequenzen daraus zieht, macht es das Leben evtl. einfacher.

Auch findet sich so die Lösung für viele SPI Probleme. Z.B. mit SD Karten usw....

Auch so ein Gedanke.......
Wenn man Probleme mit einem SPI Gerät hat, könnte man mal die Arduino SPI Doku lesen. Oder das Datenblatt zu dem µC, den man da gerade verwendet.
Beide genannten Dokus sind sich da einig.
Sie werden also beide nicht gelesen oder verstanden. Auch nicht von den alten Hasen.

Der CombieDokuVorleseService:
Der Slave Select Pin des ATMega328P hat High oder ein Output zu sein.
Ist er ein Input und Low, schaltet die SPI Einheit des µC in den Slave Mode und die SPI Verbindung bricht in dem Moment ab. Das Totalversagen. Sporadisch. Mal häufiger, mal seltener.

Mein Vorschlag:

  1. pinMode(SS,OUTPUT) in setup(), alternativ interner/externe Pullup
  2. den SS Pin als /CS des nRF24L01+ einsetzen

Wobei ich noch hinzufügen möchte, dass auch jeder /CS Pin durchaus einen externen Pullup habe darf. Nicht muss. Nur wenn ICSP over SPI genutzt wird, ist es ein Muss, damit die Geräte nicht dazwischen Quatschen und so die Programmierung stören.

-------------------

Disclaimer:

  • Dieses ist ein typisches "Combie Posting".
  • Es kann Spuren von Wahnsinn enthalten
  • Es kann Anstoßpunkte für Irritationen, Ungenauigkeiten und Irrtümer enthalten.
  • Es macht keinen Versuch vollständig sein zu wollen.
  • Es wird dringendst dazu aufgefordert, die evtl. gegebenen Informationen, vor der Verwendung, pingelig zu überprüfen.
  • Es enthält keinerlei Zwang, den Vorschlägen/Gedanken zu folgen.
  • Wem dieses Posting nicht schmeckt, darf es einfach im Regal liegen lassen.
  • Es gibt keine Gewähr für die Funktion der evtl. gegebenen Tipps und/oder den Erhalt der geistigen Gesundheit des Gegenüber.
1 Like

ich verstehe jetzt nicht ganz, was mir dieser Kommentar sagt, das mein Problem ist. Könnten Sie mir das eventuell noch einmal einfach erklären bitte.

Nein,
das verträgt der nicht. Der Inboundregulator kann nur bis 3,6V - alles was darüber geht, ist tötlich.
Besorg Dir das:https://www.az-delivery.de/products/adapter-fur-nrf24l01-1

1 Like

Der Kommentar ist eine harsche Kritik an die "Alteingesessenen". Die solltest du dir nicht zu Herzen nehmen.

Aber das andere ist schon für dich bestimmt.

  1. µC Doku lesen
  2. SPI Doku lesen
  3. Den genannten Pin so behandeln, wie ich es beschrieben habe.

Und nein, klarer kann ich es nicht beschreiben.
Das ist schon so scharf formuliert, wie es nicht schärfer/klarer geht

Und ob das dein Problem löst, kann ich trotzdem nicht beschwören.
Es könnte dein Problem sein.
Es könnte zu deinem Problem werden.

Nur du kannst das potentielle Problem unterbinden, und so feststellen ob dort die Lösung ist.

Ohne das dazu erwerbbare Adapter-Modul oder einen 3,3V Regler, bedeutet das den Tot des nRF24l01 Moduls. Der nRF24l01 verträgt maximal 3,6V am VIN.

Die anderen Pins sind 5V tolerant.

Ein 10μF zwischen 3,3V und GND reicht in den meisten Fällen um die Stromspitzen zu Puffern.

Die nRF24l01-Module haben eigentlich die nötigen PullUps/Downs auf dem Board verbaut.

Ok Danke, habe leider gerade keine Kondensatoren zur Hand. Besorge mir welche und Versuche es. Gebe dann bescheid, ob es geklappt hat oder nicht.

Also würde dieser Kondensator ausreichen:
https://at.rs-online.com/web/p/aluminium-elektrolytkondensatoren/2286622

Ja. Auch andere mit mehr Kapazität. Das ist relativ unkritisch.

Ok Danke. Mich hat das nur irritiert, da dieser ein 12V Kondensator ist und war mir nicht sicher, ob das irgendetwas aussagt

16V

Oberhalb von 16V kann er explodieren

Zu groß darf die angegebene Spannung auch nicht sein, da der der Elko dann seine Formierung verlieren kann. Seine Werte verändert.

Aber ein 10V oder 16V Elko ist hier für schon ok.

1 Like

Wenn ich das richtig verstehe was du meinst, wird das in der Bibliothek gemacht als Konsequenz radio.begin()

RF24/RF24.cpp at e4e7156f00418cb9e18d340fb7319d96145f2302 · nRF24/RF24 · GitHub

Nein!

Siehe:

SS != 7
SS == 10

guter Fang!

Edit:
ich habe jetzt folgendes Tutorial versucht und bin auf ein interessantes Ergebnis gekommen:

Bei einem Arduino sieht die Ausgabe wie gewünscht aus. Beim anderen sind alle Adressen 0x00. Wenn ich jetzt die beiden Module vertausche, dann ist trotzdem beim gleichen Arduino die Ausgabe falsch. Bedeutet das, dass dieser Nano kaputt ist?

Prüfe mal dein Kabel. Auch auf Durchgang.

Poste deine Sketche bitte in Code-Tags