Ohne genauer auf die Vor- und Nachteile der einzelnen Standards einzugehen fasse ich hier meine Erfahrungen mit einem Modul für den 2,4 GHz-Funk zusammen: Dem Nordic nRF24L01+ Funkmodul.
Das in der Szene recht weit verbreitete Modul ist über diverse Auktionshäuser sehr kostengünstig zu erwerben (~1,50 € pro Stück). Wem das zu heikel ist, der findet es zu einem höheren Preis auch in deutschen Shops. Die genauen Einzelheiten dieses Moduls findet man zu genüge auf anderen Websiten gelistet, ich beschränke mich hier auf eine kurze Liste:
- 2,4 GHz Basisfrequenz, 125 Kanäle zur "Feinjustierung" zur Auswahl
- 3,3 V Betriebsspannung (hat allerdings scheinbar einen Spannungsregler, 5 V sollten also ebenfalls funktionieren)
- Datenraten von 2 MBPS bis runter auf 250 KBPS. Dabei gilt: Geringere Datenrate bringt größere Reichweite.
- Ansteuerung über SPI
- Transceiver, d.h. ein Gerät für Senden und Empfangen
- AutoAck-Funktion, Ack steht für Acknowledge, d.h. jede gesendete Nachricht wird auf Empfang geprüft. Somit kann sichergestellt werden, dass/ob der Empfänger die Nachricht wirklich empfangen hat. Sehr hilfreiche Funktion!
- Nutzbar mit Arduino, Raspberry Pi und ATtiny
1. RF24 über die Arduino IDE auf einem ATtiny 84A nutzen
Die RF24-Lib lässt sich eigentlich ohne Probleme mit einem ATtiny nutzen (natürlich in Verbindung mit der Arduino IDE und cores für die tinys), das einzige Problem stellt die original SPI-Library dar. Diese SPI-Library kommt nicht mit dem ATtiny-Core klar. Wer hätte das gedacht. Hier muss etwas korrigiert werden. Dazu sollte man die gesamte IDE schließen.Nun holt man sich aus dem Archiv https://github.com/jscrane/SPI die korrigierten Codes und ersetzt damit die originale SPI-Library. Dann sollte das Kompilieren ohne weiteres funktionieren.
2. RF24 auf dem Raspberry Pi mit C/C++
Hier nutze ich folgendes Archiv: https://github.com/ahuillet/RF24Auffällig ist, dass in dem entscheidenden Ordner librf24-rpi zwei weitere Ordner lauern. Einer davon ist mit dem Zusatz -bcm benannt, was für den Baustein des Raspberry Pi steht, welcher unter anderem für die GPIO-Pins und damit für SPI verantworlich ist (Broadcom bcm2835). Darin steckt eine Lib, die eigentlich identisch ist zu der ohne bcm. Lediglich die Art und Weise wie die SPI-Schnittstelle angesprochen wird ist anders, genauer unterscheiden sich die libs nur im verwendeten Treiber. Man nennt die bcm-Variante auch Hardware-SPI. Ich empfehle hier für C/C++ erstmal die bcm-Variante zu testen, die hat bei mir super funktioniert.
Gleichzeitig kann man sich auch noch ans Software-SPI heran wagen (also die lib ohne bcm), insbesondere, wenn man später Python statt C/C++ nutzen möchte. Zuvor ist zur Einrichtung des Software-SPI's folgendes Tutorial hilfreich:
http://www.brianhensley.net/2012/07/getting-spi-working-on-raspberry-pi.html
3. RF24 auf dem Raspberry Pi mit Python
Hier empfehle ich folgendes Archiv:https://github.com/jonathongrigg/RF24/tree/master/raspberrypi/pyRF24
Hat man im vorherigen Schritt die Software-SPI-Variante von RF24 auf dem Pi zum laufen gebracht, lässt sich diese Python-lib direkt installieren. Sie wrappt dabei quasi "nur" die C++ Library. Wichtig ist dabei, dass es sich um eine Lib für Python-Versionen >= 3 handelt!
Ist alles richtig installiert (gemäß der Anleitung auf der Website), lässt sich die lib direkt in Python einbinden und nutzen wie bereits mit dem Arduino.
Ich bin mit dem Autor in Kontakt, unter anderem um die lib auch für den bcm-Treiber fit zu machen und um kleinere Bugs zu fixen. So wird beispielsweise ein 0x00 beim python-seitigen Empfang durch den C-Wrapper fälschlicherweise als das C-typische Abbruchzeichen eines Strings interpretiert und der Rest der Nachricht verschwindet im Äther...Dumm nur, wenn man eigentlich keinen String sondern ein byte-array verschickt hatte und nach der 0x00 noch was kommen sollte...