RF24L01+ Modul an RPI

OP #4458504
Lesenswert?

Hallo liebe Community,

ich versuche schon das ganze Wochenende ein Raspberry PI Model B mit 
einem RF24L01+ Modul zu verbinden und Daten zu senden sowie zu 
empfangen. Als Libary nutze diese RF24 (https://tmrh20.github.io/RF24/).

SPI aktivieren:
Wurde über "rasp-config" aktiviert. Habe dazu noch ein kleinen Test 
gefunden (https://gist.github.com/chrismeyersfsu/3317805), es konnten 
Daten gesendet und empfangen werden also denke ich das man den SPI-Port 
als Fehlerquelle ausschließen kann.

Verkabelung des Modules an den RPI (Laut Lib. Dokumentation):
PIN   NRF24L01   RPI   RPi -P1 Connector
1   GND   rpi-gnd   (25)
2   VCC   rpi-3v3   (17)
3   CE   rpi-gpio22   (15)
4   CSN   rpi-gpio8   (24)
5   SCK   rpi-sckl   (23)
6   MOSI   rpi-mosi   (19)
7   MISO   rpi-miso   (21)
8   IRQ   -   -

Installation der Libary:
    Download the install.sh file from 
http://tmrh20.github.io/RF24Installer/RPi/install.sh
    wget http://tmrh20.github.io/RF24Installer/RPi/install.sh
    Make it executable:
    chmod +x install.sh
    Run it and choose your options
    ./install.sh
    Run an example from one of the libraries
    cd rf24libs/RF24/examples_RPi
    make
    sudo ./gettingstarted

Nachdem die Libary kompieliert wurde, kann man ein Beispiel aufrufen was 
direkt wür den RPI ist. Deren Ausgabe habe ich etwas hier aufgeführt, 
also wenn kein Modul angeschlossen ist kommen bei den "ADDR" nur 000, 
also so falsch kann es nicht angeschlossen sein, denn es wird ja was 
angezeigt. In diesen Menü kann ich dann wählen ob ich etwas senden 
möchte, wenn ich etwas sende habe ich folgende Ausgabe:

Now sending...
failed. (Ich denke das dieses failed dafür steht das nichts gesendet 
werde konnte, dies habe ich den Code entnommen, der hier zu sehen ist)
Failed, response timed out.


printf("Now sending...\n");
unsigned long time = millis();

bool ok = radio.write( &time, sizeof(unsigned long) );

if (!ok){
    printf("failed.\n");
}


================ SPI Configuration ================
CSN Pin          = CE0 (PI Hardware Driven)
CE Pin           = Custom GPIO22
Clock Speed      = 8 Mhz
================ NRF Configuration ================
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7
RX_ADDR_P0-1     = 0x65646f4e32 0x65646f4e31
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR          = 0x65646f4e32
RX_PW_P0-6       = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA            = 0x3f
EN_RXADDR        = 0x02
RF_CH            = 0x4c
RF_SETUP         = 0x07
CONFIG           = 0x0e
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 1MBPS
Model            = nRF24L01+
CRC Length       = 16 bits
PA Power         = PA_MAX

 ************ Role Setup ***********
Choose a role: Enter 0 for pong_back, 1 for ping_out


Ich habe versucht alles so gut wie möglich wiederzugeben ein kleines 
Pinout vom Modul habe ich noch mit angehängt, ich hoffe des es mit der 
Größe passt. Leider bin ich mit meinen Latein am Ende, und hoffe das ihr 
mit etwas helfen könnt.


Es stehen zur verfügung:
Multimeter
2x Raspberry pi
2x Module RF24L01+
Bauteile wie Kondensatoren Widerstände
Leider kein Oszi
Angehängte Dateien:
Gast #4459388
Lesenswert?

Ich habe bisher nur RF24Network (welches auf RF24 aufbaut) benutzt.
Ein schneller Test zeigt, dass bei mir das "GettingStarted" aus RF24 
auch nicht funktioniert das "helloworld" Beispiel aus RF24Network jedoch 
schon.

Ob der Fehler nun am Beispielprogramm oder etwas anderem liegt, kann ich 
dir leider nicht sagen.
Aber vielleicht bringt dich diese Information ja ein wenig weiter.

Viel Erfolg ;)
Gast #4460403
Lesenswert?

Wie sieht Deine Initialisierung aus? Bei mir funktionierte

RF24 radio(RPI_V2_GPIO_P1_22, RPI_V2_GPIO_P1_24, 
BCM2835_SPI_SPEED_8MHZ);

ansonsten habe ich die gleiche Library und die Anschlussbelegung; 
allerdings nutze ich den Teil mit dem "Mesh"

vg

Joachim
Gast #4460573
Lesenswert?

Daneke für die Tipps hat aber leider nichts gebracht, habe es mit der 
Network lib versucht leider auch innerhalb des Sendevorganges ein 
Fehler. Dann habe ich die Initialisierung mal so gelegt wie @jk, aber da 
bekomm ich leider "RF24 HARDWARE FAIL: Radio not responding, verify pin 
connections, wiring, etc.". Ich weiß echt nicht mehr weiter. Hab gestern 
auch einen älteren Kernel getestet glaub 3.18.7, dachte es liegt daran 
aber auch kein Erfolg.
Gast #4460608
Lesenswert?

ok; da sind unsere Hardwareeinstellungen etwas anders:
meine (mit der eben beschriebenen Initialisierung) sind:
CE -> 22
mosi -> 19
miso ->21
sck-> 23
csn-> 24
der CE-pin unterscheidet sich bei uns. Eigentlich müsste es mit Deiner 
Konfiguration dann auch klappen; aber das mag wirklich am Programm 
liegen. Ich kann morgen evtl einen zweiten rpi mit dem 
gettingstartet.cpp ausprobieren, ob das Programm überhaupt vernünftig 
funktioniert.

Ansonsten habe ich mit dem Modulen relativ wenig Probleme; sie arbeiten 
auch mit arduinos mit der tmrh20 library vernünftig zusammen
Gast #4460615
Lesenswert?

Würde mich sehr freuen wenn du das für mich testen könntest, am besten 
mit einer aktuellen wheezy oder Jessi version von Raspian. Und der 
neusten RF24 Lib. Hast du nen anderen RPI oder warum unterscheiden sich 
die Pins? Ich hab das B Model.
Gast #4460626
Lesenswert?

bei mir läuft jessie; und das Modell ist auch B. Die Pins kann man ja 
wahlfrei nehmen (falls das Betriebssystem das nicht irgendwie anders 
nutzt); und bei mir hat es aus der Historie heraus mit dem PIN22 
(=GPIO25) funktioniert. Die lib ist relativ aktuell; allerdings habe ich 
sie nicht über den Installer, sondern "zu Fuß" installiert. Sollte aber 
identisch sein.
Gast #4460667
Lesenswert?

jk schrieb:
> ok; da sind unsere Hardwareeinstellungen etwas anders:
> meine (mit der eben beschriebenen Initialisierung) sind:
> CE -> 22
> mosi -> 19
> miso ->21
> sck-> 23
> csn-> 24
> der CE-pin unterscheidet sich bei uns. Eigentlich müsste es mit Deiner
> Konfiguration dann auch klappen; aber das mag wirklich am Programm
> liegen. Ich kann morgen evtl einen zweiten rpi mit dem
> gettingstartet.cpp ausprobieren, ob das Programm überhaupt vernünftig
> funktioniert.
>
> Ansonsten habe ich mit dem Modulen relativ wenig Probleme; sie arbeiten
> auch mit arduinos mit der tmrh20 library vernünftig zusammen

Habe das mal so versucht, aber leider auch das gleiche Ergebnis. FEHLER 
beim senden :(.
Gast #4460953
Lesenswert?

Hi,

wie hast du das Modul verkabelt ? Steckbrett ?

Meine Erfahrung mit dem Modul war das wenn die Kabelzulang oder man ein 
Steckbrett verwendet das ganze nicht stabil funktioniert.

Da die initialisierung bzw. das auslesen des Modules klappt vermute ich 
eher in diese Richtung.

Versuch doch mal die Übertragung mit kleinster Geschwindigkeit.
Aktuell nutzt du ja 1MBPS, 125kBPS ist glaube ich die kleinst mögliche 
Einstellung.

Das die RX und TX Adresse gleich ist macht nix ??? (Habe meinen Code 
gerade nicht hier)
>RX_ADDR_P0-1     = 0x65646f4e32 0x65646f4e31
>TX_ADDR          = 0x65646f4e32


Grüße,
Mario
Gast #4461133
Lesenswert?

Hab es ohne Steckbrett verkabelt, aber mit ca 25cm langen Kabeln. Ich 
werde mal nach den RF_Ch und den MBPS schrauben wenn ich finde wo. 
Danach wenn es nicht geht Kabel kürzen. Das die Adresse gleich ist bei 
RX TX gleich ist kann ich mir jetzt nicht erklären.
Gast #4461860
Lesenswert?

Ich hatte gestern versprochen, meine beides raspberries mit 
gettingstarted zu verbinden. Nun, das merkwürdige ist, dass, obwohl 
beide Systeme gleich konfiguriert sind, das Senden nur von pi_1 nach 
pi_2 funktioniert; starte ich das Programm neu und nehme die umgekehrte 
Richtung geht es nicht mehr.....
Da muss ich mal nachsehen, warum das passiert; momentan bin ich ratlos

Ansonsten: ich hatte es auch eine Zeitlang auf breadboards aufgebaut; 
jetzt hängen die Funker an ca. 20cm langen Kabeln am pi. Wie schon 
gesagt, alles relativ problemlos
Gast #4461912
Lesenswert?

Also als erstes habe ich versucht an den Übertragungsrate etwas zu 
ändern mit der kleineren bekahm ich auch nur beim senden ein Fehler, bei 
der ganz kleinen Rate wurde irg. wie das Modul garnicht mehr erkannt, 
kann mir nicht vorstellen wie das in zusammenhang liegen kann.

RF_CH konnte ich bis jetzt nicht ändern, ich habe bis jetzt nicht 
gefunden wo oder wie ich das festsetzen kann. Habe noch probiert an das 
Modul einen 22uF Elko dran zu hängen aber auch kein Erfolg damit gehabt 
das eine änderung eintritt.
Gast #4461921
Lesenswert?

Konnte den Channel ändern siehe hier meine Detailausgabe: Leider hier 
auch keine Besserung, kannst du mir mal deine Ausgabe von den RPI geben 
der funktioniert mit dem Modul?


================ SPI Configuration ================
CSN Pin          = CE0 (PI Hardware Driven)
CE Pin           = Custom GPIO22
Clock Speed      = 8 Mhz
================ NRF Configuration ================
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0x65646f4e32 0x65646f4e31
RX_ADDR_P2-5     = 0x33 0xce 0x3e 0xe3
TX_ADDR          = 0x65646f4e32
RX_PW_P0-6       = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA            = 0x3f
EN_RXADDR        = 0x3e
RF_CH            = 0x02
RF_SETUP         = 0x0f
CONFIG           = 0x0e
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 2MBPS
Model            = nRF24L01+
CRC Length       = 16 bits
PA Power         = PA_MAX

Now sending...
failed.
Failed, response timed out.
Now sending...
failed.
Failed, response timed out.
Gast #4461949
Lesenswert?

Empfänger:
================ SPI Configuration ================
CSN Pin          = CE0 (PI Hardware Driven)
CE Pin           = Custom GPIO25
Clock Speed      = 8 Mhz
================ NRF Configuration ================
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0x65646f4e32 0x65646f4e31
RX_ADDR_P2-5     = 0x33 0xce 0x3e 0xe3
TX_ADDR          = 0x65646f4e32
RX_PW_P0-6       = 0x20 0x20 0x20 0x20 0x20 0x20
EN_AA            = 0x3e
EN_RXADDR        = 0x3e
RF_CH            = 0x4c
RF_SETUP         = 0x07
CONFIG           = 0x0e
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 1MBPS
Model            = nRF24L01+
CRC Length       = 16 bits
PA Power         = PA_MAX

 ************ Role Setup ***********
Choose a role: Enter 0 for pong_back, 1 for ping_out (CTRL+C to exit)
>0
Role: Pong Back, awaiting transmission

Got payload(4) 4293148516...
Got payload(4) 4293149719...


Sender:
================ SPI Configuration ================
CSN Pin          = CE0 (PI Hardware Driven)
CE Pin           = Custom GPIO25
Clock Speed      = 8 Mhz
================ NRF Configuration ================
STATUS           = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0
RX_ADDR_P0-1     = 0x65646f4e31 0x65646f4e32
RX_ADDR_P2-5     = 0xc3 0xc4 0xc5 0xc6
TX_ADDR          = 0x65646f4e31
RX_PW_P0-6       = 0x20 0x20 0x00 0x00 0x00 0x00
EN_AA            = 0x3f
EN_RXADDR        = 0x02
RF_CH            = 0x4c
RF_SETUP         = 0x07
CONFIG           = 0x0e
DYNPD/FEATURE    = 0x00 0x00
Data Rate        = 1MBPS
Model            = nRF24L01+
CRC Length       = 16 bits
PA Power         = PA_MAX

 ************ Role Setup ***********
Choose a role: Enter 0 for pong_back, 1 for ping_out (CTRL+C to exit)
>1
Role: Ping Out, starting transmission

Now sending...
Failed, response timed out.

Die Response fehlt; aber das stört mich erst mal nicht. Im Programm muss 
auch noch die Variable radioNumber gesetzt werden
 if(myChar == '0'){
                radioNumber=0;

entsprechend 1 für den else-Zweig
Gast #4461964
Lesenswert?

Aber bei dir kommt dieser Fehler nicht beim senden, das versteh ich 
einfach nicht warum das nicht auch bei mir geht. Dumm gesagt aber kannst 
du evtl. deine gettingstartet.cpp hochladen und mir deine genaue 
verkabelung mitteilen, dann mach ich es ganau wie du. Was anderes fällt 
mir gerade nicht mehr ein :(.
Gast #4465867
Lesenswert?

Habe es mit deiner gettingstartet zum laufen bekommen kann jetzt nicht 
direkt beurteilen an was es alles gelegen haben könnte. Werde mich noch 
etwas damit beschäftigen müssen um ein brauchbaren Sketch entwickeln zu 
können für mein Attiny. Aber besten Dank an alle!
Gast #4466235
Lesenswert?

dann poste mal, was es mit dem attiny gegeben hat. Ich hatte es zwar 
schon mal mit dem attiny84 geschafft, nach einer Rechnerneuinstallation 
aber die passenden libraries (SPI) resp. die Controllerdefinitionen 
nicht mehr gefunden; was immer einen Fehler beim Übersetzen/Linken 
lieferte
Gast #4469282
Lesenswert?

Läuft super mit dem ATtiny, bin begeistert. Es werden Temperatur sowie 
die Spannung zum Empfänger geschickt und in eine Datenbank gespeichert. 
Sitze gerade an der optimierung der Sketches, um evtl. hier und da noch 
ein paar mA zu sparen. Betreibe das RF-Modul mit 3V also 2AA Batterien, 
es wundert mich da vom Modul mindestens 3,3-3,6 gefordert werden das es 
überhaupt gehtS.
#4469309
Lesenswert?

Hannes schrieb:
> es wundert mich da vom Modul mindestens 3,3-3,6 gefordert werden das es
> überhaupt gehtS.

nRF24L01 hat ein supply range von 1,9V - 3,6V. Aber wenn Du Batterien 
hast, achte daruf, dass die Angabe von 900nA im Powerdown-Mode von den 
China-Imitaten nicht eingehalten wird.
Mit meinen Modulen komme ich bei weitem nicht auf diese Werte und habe 
deshalb ein Highside-Switch, mit dem ich das Modul ganz abschalte.

Darf ich fragen, welchen Kanal Du eingestellt hast?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren