- Lernen Sie das RF-Modul nRF24L01 kennen
- Schnittstelle von nRF24L01 mit Arduino
- Empfängerseite: Arduino Uno nRF24L01 Modulverbindungen
- Senderseite: Arduino Nano nRF24L01 Modul Anschlüsse
- Arbeiten mit dem drahtlosen Transceiver-Modul nRF24L01 +
- Programmierung von nRF24L01 für Arduino
- Servomotor mit nRF24L01 drahtlos steuern
Während das Internet der Dinge (IoT), Industrie 4.0, Kommunikation von Maschine zu Maschine usw. immer beliebter wird, ist die Notwendigkeit einer drahtlosen Kommunikation immer wichtiger geworden, da mehr Maschinen / Geräte in der Cloud miteinander sprechen können. Entwickler verwenden viele drahtlose Kommunikationssysteme wie Bluetooth Low Energy (BLE 4.0), ZigBee, ESP43-WLAN-Module, 433-MHz-HF-Module, Lora, nRF usw. Die Auswahl des Mediums hängt von der Art der Anwendung ab, in der es verwendet wird.
Ein beliebtes drahtloses Medium für die lokale Netzwerkkommunikation ist unter anderem der nRF24L01. Diese Module arbeiten mit 2,4 GHz (ISM-Band) mit einer Baudrate von 250 Kbit / s bis 2 Mbit / s, was in vielen Ländern legal ist und in industriellen und medizinischen Anwendungen eingesetzt werden kann. Es wird auch behauptet, dass diese Module mit geeigneten Antennen bis zu einer Entfernung von 100 Metern zwischen ihnen senden und empfangen können. Interessant richtig !!? In diesem Tutorial erfahren Sie mehr über diese nRF24l01-Module und wie Sie sie mit einer Mikrocontroller-Plattform wie Arduino verbinden können. Wir werden auch einige Lösungen für die häufig auftretenden Probleme bei der Verwendung dieses Moduls vorstellen.
Lernen Sie das RF-Modul nRF24L01 kennen
Die nRF24L01-Module sind Transceiver-Module, dh jedes Modul kann Daten sowohl senden als auch empfangen. Da es sich jedoch um Halbduplex- Module handelt, können sie Daten gleichzeitig senden oder empfangen. Das Modul verfügt über den generischen IC nRF24L01 von nordischen Halbleitern, der für das Senden und Empfangen von Daten verantwortlich ist. Der IC kommuniziert über das SPI-Protokoll und kann daher problemlos mit beliebigen Mikrocontrollern verbunden werden. Mit Arduino wird es viel einfacher, da die Bibliotheken leicht verfügbar sind. Die Pinbelegung eines Standardmoduls nRF24L01 ist unten dargestellt
Das Modul hat eine Betriebsspannung von 1,9 V bis 3,6 V (normalerweise 3,3 V) und verbraucht im Normalbetrieb nur 12 mA weniger Strom, wodurch es batterieeffizient ist und daher sogar mit Knopfzellen betrieben werden kann. Obwohl die Betriebsspannung 3,3 V beträgt, sind die meisten Pins 5 V tolerant und können daher direkt mit 5 V-Mikrocontrollern wie Arduino verbunden werden. Ein weiterer Vorteil der Verwendung dieser Module besteht darin, dass jedes Modul über 6 Pipelines verfügt. Das heißt, jedes Modul kann mit 6 anderen Modulen kommunizieren, um Daten zu senden oder zu empfangen. Dadurch eignet sich das Modul zum Erstellen von Stern- oder Maschennetzwerken in IoT-Anwendungen. Außerdem haben sie einen weiten Adressbereich von 125 eindeutigen IDs, daher können wir in einem geschlossenen Bereich 125 dieser Module verwenden, ohne sich gegenseitig zu stören.
Schnittstelle von nRF24L01 mit Arduino
In diesem Tutorial erfahren Sie, wie Sie den nRF24L01 mit Arduino verbinden, indem Sie den mit einem Arduino verbundenen Servomotor steuern, indem Sie das Potentiometer des anderen Arduino variieren. Der Einfachheit halber haben wir ein nRF24L01-Modul als Sender und das andere als Empfänger verwendet, aber jedes Modul kann so programmiert werden, dass Daten einzeln gesendet und empfangen werden.
Das Schaltbild zum Verbinden des nRF24L01-Moduls mit Arduino ist unten dargestellt. Aus Gründen der Vielfalt habe ich die UNO für die Empfängerseite und Nano für die Senderseite verwendet. Die Logik für die Verbindung bleibt jedoch auch für andere Arduino-Boards wie Mini und Mega gleich.
Empfängerseite: Arduino Uno nRF24L01 Modulverbindungen
Wie bereits erwähnt, kommuniziert der nRF24L01 mit Hilfe des SPI-Protokolls. Bei Arduino Nano und UNO werden die Pins 11, 12 und 13 für die SPI-Kommunikation verwendet. Daher verbinden wir die MOSI-, MISO- und SCK-Pins von nRF mit den Pins 11, 12 bzw. 13. Die Pins CE und CS können vom Benutzer konfiguriert werden. Ich habe hier Pin 7 und 8 verwendet, aber Sie können jeden Pin verwenden, indem Sie das Programm ändern. Das nRF-Modul wird über den 3,3-V-Pin von Arduino mit Strom versorgt, was in den meisten Fällen funktioniert. Wenn nicht, kann eine separate Stromversorgung versucht werden. Neben der Anbindung des nRF habe ich auch einen Servomotor an Pin 7 angeschlossen und über den 5-V-Pin von Arduino mit Strom versorgt. In ähnlicher Weise ist die Senderschaltung unten gezeigt.
Senderseite: Arduino Nano nRF24L01 Modul Anschlüsse
Die Anschlüsse für den Sender sind ebenfalls dieselben. Außerdem habe ich ein Potentiometer verwendet, das über den 5-V-Ad-Ground-Pin von Arduino angeschlossen ist. Die analoge Ausgangsspannung, die zwischen 0 und 5 V variiert, wird an den A7-Pin des Nano angeschlossen. Beide Karten werden über den USB-Anschluss mit Strom versorgt.
Arbeiten mit dem drahtlosen Transceiver-Modul nRF24L01 +
Damit unser nRF24L01 jedoch geräuschfrei funktioniert, sollten Sie die folgenden Punkte berücksichtigen. Ich habe lange an diesem nRF24L01 + gearbeitet und die folgenden Punkte gelernt, die Ihnen helfen können, nicht an eine Wand getroffen zu werden. Sie können diese ausprobieren, wenn die Module nicht normal funktionierten.
1. Die meisten auf dem Markt befindlichen nRF24L01 + -Module sind gefälscht. Die billigen, die wir bei Ebay und Amazon finden können, sind die schlechtesten (Keine Sorge, mit wenigen Verbesserungen können wir sie zum Laufen bringen).
2. Das Hauptproblem ist die Stromversorgung, nicht Ihr Code. Die meisten Online-Codes funktionieren ordnungsgemäß. Ich selbst habe einen Arbeitscode, den ich persönlich getestet habe. Lassen Sie mich wissen, wenn Sie sie benötigen.
3. Achten Sie darauf, dass die Module, die als NRF24L01 + gedruckt werden, tatsächlich Si24Ri sind (Ja, ein chinesisches Produkt).
4. Die Klon- und Fake-Module verbrauchen mehr Strom. Entwickeln Sie daher Ihren Stromkreis nicht basierend auf dem Datenblatt nRF24L01 +, da Si24Ri einen hohen Stromverbrauch von ca. 250 mA hat.
5. Achten Sie auf Spannungswelligkeiten und Stromstöße. Diese Module sind sehr empfindlich und können leicht verbrennen. (;-(2 Module bisher gebraten)
6. Das Hinzufügen einiger Kondensatoren (10uF und 0,1uF) über Vcc und Gnd des Moduls hilft dabei, Ihre Versorgung rein zu machen, und dies funktioniert für die meisten Module.
Wenn Sie dennoch Probleme haben, melden Sie sich im Kommentarbereich oder lesen Sie diese durch oder stellen Sie Ihre Fragen in unserem Forum.
Überprüfen Sie auch unser durchlässiges Projekt zum Erstellen eines Chatrooms mit nRF24L01.
Programmierung von nRF24L01 für Arduino
Aufgrund der leicht verfügbaren Bibliothek, die von maniacbug auf GitHub erstellt wurde, war es sehr einfach, diese Module mit Arduino zu verwenden. Klicken Sie auf den Link, um die Bibliothek als ZIP-Ordner herunterzuladen und Ihrer Arduino IDE hinzuzufügen, indem Sie die Option Skizze -> Bibliothek einschließen -> ZIP-Bibliothek hinzufügen verwenden . Nach dem Hinzufügen der Bibliothek können wir mit der Programmierung für das Projekt beginnen. Wir müssen zwei Programme schreiben, eines für die Senderseite und das andere für die Empfängerseite. Wie ich bereits sagte, kann jedes Modul sowohl als Sender als auch als Empfänger arbeiten. Beide Programme finden Sie am Ende dieser SeiteIm Sendercode wird die Empfängeroption auskommentiert und im Empfängerprogramm wird der Sendercode auskommentiert. Sie können es verwenden, wenn Sie ein Projekt ausprobieren, in dem das Modul als beides arbeiten muss. Die Arbeitsweise des Programms wird unten erklärt.
Wie bei allen Programmen beginnen wir mit der Aufnahme der Header-Dateien. Da der nRF das SPI-Protokoll verwendet, haben wir den SPI-Header und auch die gerade heruntergeladene Bibliothek hinzugefügt. Die Servobibliothek dient zur Steuerung des Servomotors.
#einschließen
Die nächste Zeile ist die wichtige Zeile, in der wir die Bibliothek über die CE- und CS-Pins informieren. In unserem Schaltplan haben wir CE an Pin 7 und CS an Pin 8 angeschlossen, also setzen wir die Leitung auf
RF24 myRadio (7, 8);
Alle Variablen, die der RF-Bibliothek zugeordnet sind, sollten als zusammengesetzte Variablenstruktur deklariert werden. In diesem Programm wird die Variable msg verwendet, um Daten vom RF-Modul zu senden und zu empfangen.
Strukturpaket { int msg; }; typedef struct package Package; Paketdaten;
Jedes RF-Modul hat eine eindeutige Adresse, über die es Daten an das jeweilige Gerät senden kann. Da wir hier nur ein Paar haben, setzen wir die Adresse sowohl im Sender als auch im Empfänger auf Null. Wenn Sie jedoch mehrere Module haben, können Sie die ID auf eine beliebige eindeutige 6-stellige Zeichenfolge setzen.
Byteadressen = {"0"};
Als nächstes initialisieren wir innerhalb der Void-Setup- Funktion das HF-Modul und stellen die Arbeit mit rauschfreiem 115-Band ein. Außerdem stellen wir das Modul so ein, dass es im Modus mit minimalem Stromverbrauch und einer Mindestgeschwindigkeit von 250 Kbit / s arbeitet.
void setup () { Serial.begin (9600); myRadio.begin (); myRadio.setChannel (115); // 115 Band über WIFI-Signalen myRadio.setPALevel (RF24_PA_MIN); // MIN Power Low Rage myRadio.setDataRate (RF24_250KBPS); // Mindestgeschwindigkeit myservo.attach (6); Serial.print ("Setup initialisiert"); Verzögerung (500); }}
Die Funktion void WriteData () schreibt die an sie übergebenen Daten. Wie bereits erwähnt, verfügt der nRF über 6 verschiedene Pipes, in die wir Daten lesen oder schreiben können. Hier haben wir 0xF0F0F0F066 als Adresse zum Schreiben von Daten verwendet. Auf der Empfängerseite müssen wir dieselbe Adresse für die ReadData () - Funktion verwenden, um die geschriebenen Daten zu empfangen.
void WriteData () { myRadio.stopListening (); // Stoppen Sie den Empfang und starten Sie die Übertragung von myRadio.openWritingPipe (0xF0F0F0F066); // Sendet Daten an diese 40-Bit-Adresse myRadio.write (& data, sizeof (data)); Verzögerung (300); }}
Die Funktion void WriteData () liest die Daten und fügt sie in eine Variable ein. Von 6 verschiedenen Pipes, mit denen wir hier Daten lesen oder schreiben können, haben wir 0xF0F0F0F0AA als Adresse zum Lesen von Daten verwendet. Dies bedeutet, dass der Sender des anderen Moduls etwas auf diese Adresse geschrieben hat und wir es daher von derselben lesen.
void ReadData () { myRadio.openReadingPipe (1, 0xF0F0F0F0AA); // Welche Pipe soll gelesen werden, 40 Bit Adresse myRadio.startListening (); // Transminting beenden und Reveicing starten if (myRadio.available ()) { while (myRadio.available ()) { myRadio.read (& data, sizeof (data)); } Serial.println (data.text); } }
Abgesehen von diesen Zeilen werden die anderen Zeilen im Programm verwendet, um den POT zu lesen und ihn mithilfe der Kartenfunktion in 0 bis 180 umzuwandeln und an das Empfängermodul zu senden, wo wir das Servo entsprechend steuern. Ich habe sie nicht Zeile für Zeile erklärt, da wir dies bereits in unserem Servo Interfacing-Tutorial gelernt haben.
Servomotor mit nRF24L01 drahtlos steuern
Sobald Sie mit dem Programm fertig sind, laden Sie den Sender- und Empfängercode (siehe unten) auf die entsprechenden Arduino-Karten hoch und schalten Sie sie über den USB-Anschluss ein. Sie können auch den seriellen Monitor beider Karten starten, um zu überprüfen, welcher Wert gesendet und welcher empfangen wird. Wenn beim Drehen des POT-Knopfes auf der Senderseite alles wie erwartet funktioniert, sollte sich auch das Servo auf der anderen Seite entsprechend drehen.
Die vollständige Arbeitsweise des Projekts wird im folgenden Video gezeigt. Es ist ganz normal, dass diese Module beim ersten Versuch nicht funktionieren. Wenn Sie auf ein Problem gestoßen sind, überprüfen Sie den Code und die Verkabelung erneut und befolgen Sie die oben angegebenen Richtlinien zur Fehlerbehebung. Wenn nichts funktioniert, poste dein Problem in den Foren oder im Kommentarbereich und ich werde versuchen, es zu lösen.