Author Topic: Arduino (tw. auch andere MC) und nRF24L01+  (Read 20742 times)

stega

  • freakyfriday
  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
  • Carpe diem.
Arduino (tw. auch andere MC) und nRF24L01+
« on: April 28, 2014, 12:01:08 AM »
Ich habe mich in den letzten Wochen stark mit den verschiedenen Bibliotheken für die Kommunikation mit den nRF24L01+-Modulen beschäftigt. Vielleicht hilft die folgende Übersicht auch anderen, die nach bestimmten Varianten der bekannten Bibliotheken suchen.

1) Standard-Libs von Originalautor Maniacbug

RF24: http://maniacbug.github.io/RF24/
-> Getting started: http://maniacbug.wordpress.com/2011/11/02/getting-started-rf24/

RF24Network (aka mesh network): http://maniacbug.github.io/RF24Network/
-> Wireless sensor network: http://maniacbug.wordpress.com/2012/03/30/rf24network/

---

2) Angepasste Libs für Digistump DigiX:
RF24: In Software-Addon von Digistump dabei
-> http://digistump.com/wiki/digix/tutorials/mesh

RF24NEtwork: http://digistump.com/board/index.php/topic,1389.0.html (Download in Antwort von Digistump)
-> ACHTUNG: nur die einfachen Beispiele können kompiliert werden (helloworld_rx/helloworld_tx), bei den anderen klappt es bei mir ohne Modifikationen nicht

---

3) Beschreibung und Links für den Einsatz mit ATtiny 84:
Beschreibung -> http://hardy.dropbear.id.au/blog/2014/02/prototyping-nrf24l01-modules-on-arduino#more-247

---

4) RF24SH (selbstorganisierendes Mesh -> Arduino, RasPi, Teensy): https://github.com/x-warrior/RF24SH
-> Beschreibung http://www.matbra.com/en/code/rf24sh-internet-das-coisas/

---

5) Tipps für ATtiny85:
-> http://www.verious.com/tutorial/process-of-getting-attiny85-to-work-with-n-rf24l01-on-rf24-libraries/

---

UPDATE: weitere Libs & Tipps z.T. neueren Datums:

6) NRF24 (mit hilfreichen Tipps, um die nRF-Module auch mit Leonardo/Yún und Mega verbinden zu können):
-> http://airspayce.com/mikem/arduino/NRF24/

---

7) Radiohead (für eine Vielzahl an Funkmodulen und verschiedenen Vernetzungstechniken wie Punkt-zu-Punkt, Mesh u.ä. -> Weiterentwicklung von verschiedenen Libs, inkl. NRF24):
-> http://airspayce.com/mikem/arduino/RadioHead/


Viel Erfolg!

Gruss,
Rolf
« Last Edit: May 02, 2014, 11:38:26 PM by stega »

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #1 on: April 30, 2014, 10:24:08 AM »
@Rolf,

Danke für deine hilfreiche Auflistung.

Hast du bei deinen Versuchen auch Prototypen aufgebaut?

Ich habe auch schon mit diesen Modulen "gespielt". Aber die erreichten Distanzen zwischen Sender und Empfänger waren für mich nicht befriedigend. Was hast du für Distanzen erreicht?

Gruss
Thomas

stega

  • freakyfriday
  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
  • Carpe diem.
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #2 on: April 30, 2014, 10:33:37 PM »
@Thomas,

die Funkmodule sind seit dem letzten Freaky Friday zu einer intensiveren Beschäftigung geworden. Zuerst bloss mit dem Zusammensuchen nützlicher Links, dann mit der Suche nach funktionsfähigen Libs für den DigiX und nun am Prototyping.

Zur Zeit ist es wirklich eine Art "Spiel": Zwei Schritte vor, einer zurück, ein Schritt vor, zwei zurück etc.

Heute laufen zur selben Zeit 3 Microcontroller (MC): Ein Arduino Uno, ein Arduino Yún und ein DigiX. Akteller Test-Sketch ist der "GettingStarted"-Sketch von maniacbug (Beispiel der Original-Lib RF24).

Beobachtungen:
- Distanz im Gebäude mit Backsteinmauern: ca. 5-10m (variabel).
- Beim Yún habe ich wohl (konzeptbedingt - Bridge etc.) noch einen Fehler drin: Dieser sendet wie wild und empfängt dauernd dieselbe Payload (aber keine eines anderen MC) -> dies schiebe ich aktuell auf meine Kappe, habe wahrscheinlich die Yún-Eigenheiten noch zu wenig gewürdigt :).
- DigiX und Uno können miteinander kommunizieren, der Uno taugt allerdings nur als Sender, nicht als Empfänger. Der DigiX ist der geborene Empfänger, aber bringt seine Messages offenbar nicht zum Uno durch. Das sieht im Serial Monitor dann etwa so aus:

MC:                                           DigiX                                                                       I   Uno
Rolle:                                         Receiver                                                                  I   Transmitter
Msg-Pattern in SerialMonitor:       Got Payload <Nummer>...Sent Response.                  I   Now sending <Nummer>...ok...Failed, Response timed out.

---------

MC:                                           DigiX                                                                       I   Uno
Rolle:                                         Transmitter                                                             I   Transmitter
Msg-Pattern in SerialMonitor:       Now sending <Nummer>...failed.                              I   Now sending <Nummer>...ok...Failed, Response timed out.
                                                 Got response <Nummer>, round-trip delay: <Wert>. I

---------

MC:                                           DigiX                                                                       I   Uno
Rolle:                                         Transmitter                                                             I   Receiver
Msg-Pattern in SerialMonitor:       Now sending <Nummer>...failed.                              I  <empty>
                                                 Failed, response timed out.                                       I

Wenn beide MC in ihren "Lieblingsrollen" agieren, meldet der Uno dennoch einen Timeout, aber die Daten kommen beim DigiX an.

Ich setze die Module von iTeadstudio ein.

Gruss,
Rolf

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #3 on: May 01, 2014, 12:37:34 PM »
Quote
- Distanz im Gebäude mit Backsteinmauern: ca. 5-10m (variabel).


Bezüglich Distanz habe ich die gleichen Erfahrungen gemacht.
Da mir aber diese kurze Distanz nicht reicht, habe ich die Experimente mit den NRF24L01-Modulen momentan zur Seite gelegt.

Ich nutze weiterhin die RFM12B Transceiver für mein Sensor Node Projekt.
http://arduino-praxis.ch/2013/02/sensor-nodes/

Mit dieser Lösung kann ich auch meinen Sensor im Gefrierschrank im Keller, 3 Stockwerke tiefer, problemlos empfangen.

Gruss
Thomas

stega

  • freakyfriday
  • Newbie
  • *
  • Posts: 38
  • Karma: +0/-0
  • Carpe diem.
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #4 on: May 02, 2014, 11:51:36 PM »
@Thomas: Deine Sensor-Nodes habe ich im Vorfeld angesehen und finde sie sehr gelungen. Da der DigiX einen Sockel für ein nRF24L01+ Modul hat und die Reichweite gemäss Berichten anderer Anwender für meine Bedürfnisse ausreichend erschien, begab ich mich auf die Reise mit den nRF24L01+ Modulen.

Für mich ist die bei mir erzielte Reichweite genügend. Allenfalls kann sie mit den Modulen mit Antenne (CrazyFly) oder dem langsameren Übertragungsmodus gesteigert werden. Die Test- bzw. Weiterentwicklungsszenarien gehen nicht aus  :D

Inzwischen läuft's auch mit dem Yún und meine Lib-Liste wurde mit einem Links auf entsprechende Tipps angepasst. Mit dem DigiX gibt's noch Fragen an den Hersteller, da ich nicht sicher bin, ob ein HW- oder SW-Fehler vorliegt (oder der Fehler vor dem Bildschirm sitzt  ;)).

Gruss,
Rolf

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #5 on: May 03, 2014, 11:32:53 AM »
Quote
Da der DigiX einen Sockel für ein nRF24L01+ Modul hat und die Reichweite gemäss Berichten anderer Anwender für meine Bedürfnisse ausreichend erschien, begab ich mich auf die Reise mit den nRF24L01+ Modulen.
Der Sockel für das nRF24-Modul erleichtert den Einstieg.
Bei meinen Experimenten habe ich mir selbst Adapter für meine Arduino-Boards aufgebaut.

Ich habe das Thema zwar momentan beiseite gelegt, aber ganz abgeschlossen ist es noch nicht  :)

Ein Punkt den ich noch untersuchen werde, ist der Stromverbrauch. Für drahtlose Anwendungen mit Batteriebetrieb soll dieser natürlich so gering wie möglich sein.

Gruss
Thomas

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #6 on: July 31, 2014, 03:20:37 PM »
Hallo zusammen,

Ich habe mir mal eine Auswahl an nRF24L01+ Modulen besorgt und bin nun am Testen.

Ich hab mir vorerst mal ohne Probleme ein Mesh mit 3 Knoten mit RF24Network aufgebaut, das tut wunderbar ist aber nicht wirklich prickelnd, da das Mesh von RF24Network nicht selbstorganisierend ist. Grade für Anwendungen die mobil sein sollten ist das nix.

Mittlerweile hab ich eine Mitteilung gefunden, dass RF24 und RF24Network eingestellt wurden und komplett durch die RadioHead Library ersetzt.

Das heisst, dass ich ab sofort meine Bemühungen auf diese Library konzentrieren werde. Hier vorab aber schon mal einige Tipps die mir weitergeholfen haben wenns Probleme gab:
  • Ein 0.1uF Kondensator zwischen 3.3V und GND kann bei instabilen Verbindungen Wunder wirken
  • Je langsamer die Geschwindigkeit desto grösser die Reichweite. Während bei 2Mbps wohl nur noch ein paar Meter sind, sollte man mit 250kbps durchaus auch durch 1-2 Mauern kommen.
  • Die Sendeleistung kann eingestelt werden, idealerweise gerade so stark wie nötig.

[Update:] Mit den Standard Modulen von uns komme ich mit 250kbps problemlos 20m weit mit einer Backsteinmauer dazwischen.

Ich melde mich wieder, sobald ich mal 3-4 Knoten mit der RadioHead Library am Laufen habe.

Grüsse - Christoph
« Last Edit: July 31, 2014, 03:46:47 PM by boxtec-support »

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #7 on: August 02, 2014, 02:12:43 PM »
Ein Mesh mit 7 Knoten läuft nun mit der RadioHead Lib. Dabei gab es ein paar interessante Stolpersteine/Erkenntnisse:

- Ein irrlichternder Kontroller mit nRF24 Modul kann das ganze Mesh zum Erliegen bringen, genauso wenn das Problem vor dem Computer zweimal die gleiche Knotennummer verteilt  8)

- Die Stabilität der 3.3V Versorgung scheint von immenser Bedeutung, und zwar speziell beim Senden. Zurzeit hab ich einen Knoten der die restlichen fortlaufend kontaktiert und eine Antwort erwartet. Dabei zeigt sich, dass aus Sicht des zentralen Knotens die Aussenstellen relativ instabil sind (je nach Knoten 30-50% Verlust). Interessant ist das dies stark vom verwendeten Board (weniger vom Modul abhängt). Interessanterweise erhalten aber die Remote Knoten die Sendungen vom Kontroller mit einer viel höheren Zuverlässigkeit (>90%). Daraus schliesse ich mal wild spekulierend, dass eine stabile 3.3V Quelle vor allem beim Senden von entscheidender Bedeutung ist.
So will z.B. der gute alte Duemilanove gar nicht beim Mesh mitspielen - auf keine Geissart und egal mit welchem Modul. Hänge ich mein Handy an den USB Bus zum Laden, laufen zwar alle Boards weiter, aber das Mesh bricht pronto zusammen.

- Das Wechseln des Kanals kann ja nach "Vorbelastung" des 2.4GHz Bands massive Verbesserungen bringen. MIt Channel 1 lief fast gar nichts, mit Channel 50 sehr befriedigend.

- Wenn die Zuverlässigkeit nicht passt und alle Module nah beieinander liegen, hilft es die Sendeleistung zu reduzieren, mit -12db arbeiten die Module alle nebeneinander auf dem Tisch sehr ansprechend, mit 0db muss ich sie räumlich verteilen, damit ich die gleiche Stabilität hinkriege.

- Mit zunehmender Grösse des Experiments wurden aus Inventargründen ausserdem die Jumperwires immer länger, dies scheint auch deutlich mit der Zuverlässigkeit der Übertragungen zu korrelieren.

Fazit: Dafür, dass ich für den Preis der verwendeten Module noch nicht mal 2 XBees erhalte, bin ich sehr zufrieden mit den ersten Resultaten. Es zeigt sich aber, dass man mit Jumperwires und Breadboards den Modulen und hohen Frequenzen nicht ganz gerecht wird und ein dediziertes Board wie der Devduino eine gute Wahl ist. Wobei ich mir nur schwer vorstellen kann, wie der von der CR2032 Batterie gespiesen anständig senden kann.
Andererseits muss hier zur Ehrenrettung der XBees auch gesagt werden, dass der Vergleich hinkt. Das XBee entspricht eher einem nRF24 Modul mit angeschlossenem ATmega1284 und ausgereifter Mesh Firmware vorinstalliert. Dem XBee sende ich einfach Daten und es kümmert sich darum, bei der RadioHead Mesh Implementation befindet sich der Kontroller öfters in einem blockierten  Zustand, der das Empfangen weiterer Daten (auch zum Weiterleiten als Mesh-Knoten) verhindert und zu Paketverlusten und Neu-Übertragungen führt. D.h. eigentlich wär es ideal wenn das nRF24 Modul gleich mit einem eigenen Mikrokontroller käme und wir diesen z.B. über I2C oder UART ansprechen könnten. An diesem Punkt verliert aber die Lösung sehr viel preisliche Attraktivität.
Was ich an diesem Punkt auch noch nicht abschätzen kann ist, wie weit es das Mesh instabil macht, wenn viele der Knoten nur kurz aufwachen, einen Messwert senden und dann wieder lange schlafen. Bei XBee löst man dies mit einer Rollenzuteilung des Modules als Router oder Endpoint (der auch schlafen darf), RadioHead kennt diese Unterscheidung nicht.
Ein dediziertes Sensor Knoten Board a la Devduino könnte in der Tat hilfreich sein, jedoch würde ich persönlich eine LiPo Lösung bevorzugen.

Grüsse - Christoph

arduinopraxis

  • freakyfriday
  • Hero Member
  • *
  • Posts: 553
  • Karma: +11/-0
  • Arduino Praxiseinstieg (4.Auflage)
    • Arduino Praxiseinstieg, 4. Auflage
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #8 on: August 02, 2014, 04:40:32 PM »
Hallo Christoph,

Quote
Ein Mesh mit 7 Knoten läuft nun mit der RadioHead Lib. Dabei gab es ein paar interessante Stolpersteine/Erkenntnisse:
Deine Tests hören sich interessant an. Die vielen Infos und Resultate muss ich zuerst verarbeiten ;)

Gruss
Thomas

boxtec-support

  • Moderator
  • Hero Member
  • *****
  • Posts: 787
  • Karma: +15/-0
    • Boxtec Web
Re: Arduino (tw. auch andere MC) und nRF24L01+
« Reply #9 on: August 03, 2014, 10:11:02 PM »
Hallo Thomas,

Ich hab das ganze im Playground noch etwas leserlicher zusammengefasst:

http://playground.boxtec.ch/doku.php/wireless/nrf24

Die beiden fehlenden Sketches für Mesh kommen die nächsten Tage noch.

Grüsse - Christoph

 

anything