NRF24L01+ mit Repeater

Hallo Zusammen,

Ich Oute mich erstmal. Ich bin Arduino begeistert, habe auch das ein oder andere kleine Projekt gestemmt aber nun komme ich an meine Grenzen :blush: .

Kurze Schilderung meines Problemes: Ich habe zwei NRF24L01+ Module als kleine Bi-Directionale Datenbrücke laufen zum Testen. Läuft auch ganz gut bin sehr zufrieden. Nur leider muss ich für den Praxiseinsatz ein weiteres Modul dazwischen schalten um ein Hinderniss (Berg) zu überwinden.

So und nun mein Problem: Ich brauche nun aber nen Schubs für den Sketch des Repeaters.
Angefangen haben ich den Getting Started Sketch aus der RF24 Libary umzustricken für meine Zwecke
und hab Sie grob verstanden. Dort wird normale die Serielle Schnittstelle benuzt um festzulegen wer Sender oder Empfänger ist. Habe die geändert auf Hardware Pins.
Nur wie der Sketch für den Repeater ausssehen soll will mir nicht einleuchten da er Gleichzeitig Sender und Empfänger ist. Er muss ja ständig hin und herschalten in seiner Funktion :o .

Ein Mesh möchte ich nett unbedingt, da es für mich sehr Kompliziert klingt und bei meinen Eigentlichen Projekt eher störend ist.

Schon mal Danke im vorraus für eure Tipps oder Codeschnippsel, Stefan

Hallo,

ich hatte vor längerer Zeit auch mal NRF24L01+ Modulen angefangen, aber Grundlage war bei mir das pingpair Beispiel.

Wenn in dem Funknetzwerk nicht noch viel mehr Teilnehmer Platz finden sollen könnte folgendes funktionieren.

Du kannst bei den Teilen bis zu 6 Pipes öffnen.
Senden geht immer nur auf Pipe0 (wenn man wie du nicht ständig umschalten will)
Empfangen geht immer auf allen Pipes.

Jede Pipe hat eine Adresse.
const uint64_t pipes[3] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0D2LL, 0xF0F0F0F0C3LL};

Beim ersten Teilnehmer nimmst du die erste Adresse für Pipe0. (0xF0F0F0F0E1LL)
Beim zweiten Teilnehmer (Repeater) nimmst du die zweite Adresse für Pipe0. (0xF0F0F0F0D2LL)
Beim dritten Teilnehmer nimmst du die dritte Adresse für Pipe0. (0xF0F0F0F0C3LL)
(Die Reihenfolge der Adressen im Array für jeden Teilnehmer also umsortieren)

Jeder Teilnehmer sendet dann immer über Pipe0 empfängt aber immer auf allen 3 Pipes.
Dann kannst du bei Bedarf mit dem Repeater auch Telegramme ausfiltern die er nicht wiederholen soll.
Je nach Telegrammlänge und Datenrate sollte der Repeater einige ms (20?) warten bevor er einen Empfang weiter leitet. Das gibt dem eigentlich für den Empfang bestimmten Teilnehmer etwas Zeit falls er das Originaltelegramm doch empfangen haben sollte.

Gruß
Peter

Sodarle mal schauen ob ich das verstanden habe wie du es meinst :-[

A+C = Wären die Sender/Emfänger
B= Repeater

Sehen dann so die Verwendung der drei Pipes-Adressen aus?

Pipe-Adresse 1 0xF0F0F0F0E1LL
Pipe-Adresse 2 0xF0F0F0F0D2LL
Pipe-Adresse 3 0xF0F0F0F0C3LL

A sendet auf Pipe-Adresse 1 0xF0F0F0F0E1LL und Empfängt von B über die Pipe-Adresse 2 0xF0F0F0F0D2LL, zu C hat er ja keinen Kontakt (geht Physikalisch nicht)

B sendet auf Pipe-Adresse 2 0xF0F0F0F0D2LL und Empfängt von A über Pipe-Adresse 1 0xF0F0F0F0E1LL und Empfängt von B Pipe-Adresse 3 0xF0F0F0F0C3LL

C sendet auf Pipe-Adresse 3 0xF0F0F0F0C3LL und Empfängt von B über Pipe-Adresse 2 0xF0F0F0F0D2LL, zu A hat er ja keinen Kontakt (geht Physikalisch nicht)

Nur mir Stellt sich gerade die Frage wenn über den Repeater B Daten verschicke in Form von zb Arrys wie es in vielen Beispielen gemacht wird, und er aber nur auf einer Pipe senden kann, dann kommt es doch zu Problemen kommen da ja A+C Gleichzeitig zuhören oder???
Meintwegen denkt dann A es ist ein Sensorwert und C hält es für einen Befehl zb Relay ansteuern???

Hallo Stefan,

hab sowas vor 2 Jahren mal programmiert. Da hat die Reichweite vom Keller zur Wohnung nicht
gereicht. Habe dann die Daten vom Keller über einen Repeater weitergeschickt.
Wenn Bedarf besteht, kann ich Dir ja die Programme per E-Mail schicken.

Schöne Woche wünscht

Kalli

Kalli du hast eine PM. Vielen Dank schon mal.

Ich schau mir deine Sachen mal an und vielleicht komme ich ja dann auf die Rätsels Lösung und kann hier sowas für andere Veröffentlichen. Bin mit Sicherheit nicht der erste der so ein Problem hat.

MfG, Stefan

Pipe0 von Teilnehmer A hat die Adresse 0xF0F0F0F0E1LL
Pipe0 von Teilnehmer B hat die Adresse 0xF0F0F0F0D2LL
Pipe0 von Teilnehmer C hat die Adresse 0xF0F0F0F0C3LL
Pipe1 und Pipe2 bekommen dann jeweils die beiden verbleibenden Adressen.
Über Pipe0 wird immer gesendet.

Metaworld82:
...

Nur mir Stellt sich gerade die Frage wenn über den Repeater B Daten verschicke in Form von zb Arrys wie es in vielen Beispielen gemacht wird, und er aber nur auf einer Pipe senden kann, dann kommt es doch zu Problemen kommen da ja A+C Gleichzeitig zuhören oder???
Meintwegen denkt dann A es ist ein Sensorwert und C hält es für einen Befehl zb Relay ansteuern???

Ich habe in den ersten Bytes eines jeden Telegramms immer eine Kennung für Absender und Empfänger drin. Somit kann ich am Inhalt der Telegramme immer erkennen wo es herkommt und wo es hin soll.
Zur Not reicht dazu ein Byte. High-Nibble = Absender, Low-Nibble = Ziel.