- Das RF-Modul nRF24L01
- Schaltplan
- Programmieren von Raspberry Pi zum Senden von Nachrichten mit nRF24l01
- Programmieren von Arduino UNO zum Empfangen von Nachrichten mit nRF24l01
Entwickler verwenden viele drahtlose Kommunikationssysteme wie Bluetooth Low Energy (BLE 4.0), ZigBee, ESP8266 Wi-Fi-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 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 Signale bis zu einer Entfernung von 100 Metern zwischen ihnen senden und empfangen können. Wir haben zuvor nRF24L01 mit Arduino verwendet, um den Servomotor zu steuern und einen Chatraum zu erstellen.
Hier verwenden wir das RF-Transceiver-Modul nRF24L01 - 2,4 GHz mit Arduino UNO und Raspberry Pi, um eine drahtlose Kommunikation zwischen ihnen herzustellen. Der Raspberry Pi fungiert als Sender und Arduino Uno hört Raspberry Pi und druckt die von Raspberry Pi mit nRF24L01 gesendete Nachricht auf einem 16x2-LCD. nRF24L01 verfügt außerdem über integrierte BLE-Funktionen und kann auch drahtlos über BLE kommunizieren.
Das Tutorial ist in zwei Abschnitte unterteilt. Der erste Abschnitt enthält die Schnittstelle von nRF24L01 mit Arduino als Empfänger und der zweite Abschnitt enthält die Schnittstelle von nRF24L01 mit Raspberry Pi als Sender. Der vollständige Code für beide Abschnitte mit Arbeitsvideo wird am Ende dieses Tutorials angehängt.
Das RF-Modul nRF24L01
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.
Schaltplan
nRF24L01 mit Arduino:
Der Schaltplan zum Verbinden von nRF24L01 mit Arduino ist einfach und enthält nicht viele Komponenten. Der nRF24l01 wird über eine SPI-Schnittstelle verbunden, und das 16x2-LCD ist mit dem I2C-Protokoll verbunden, das nur zwei Drähte verwendet.
nRF24L01 mit Raspberry Pi:
Der Schaltplan zum Verbinden von nRF24L01 mit Raspberry Pi ist ebenfalls sehr einfach und nur die SPI-Schnittstelle wird zum Verbinden von Raspberry Pi und nRF24l01 verwendet.
Programmieren von Raspberry Pi zum Senden von Nachrichten mit nRF24l01
Die Programmierung des Raspberry Pi erfolgt mit Python3. Sie können C / C ++ auch als Arduino verwenden. Es gibt jedoch bereits eine Bibliothek für nRF24l01 in Python, die von der Github-Seite heruntergeladen werden kann. Beachten Sie, dass sich das Python-Programm und die Bibliothek im selben Ordner befinden sollten, da das Python-Programm die Bibliothek sonst nicht finden kann. Nach dem Herunterladen der Bibliothek extrahieren Sie einfach einen Ordner, in dem alle Programme und Bibliotheksdateien gespeichert werden. Wenn die Installation der Bibliothek abgeschlossen ist, schreiben Sie einfach das Programm. Das Programm beginnt mit der Aufnahme von Bibliotheken, die in Code wie der GPIO- Importbibliothek für den Zugriff auf die Raspberry Pi-GPIOs und die Importzeit verwendet werden für den Zugriff auf die zeitbezogenen Funktionen. Wenn Sie Raspberry Pi noch nicht kennen, können Sie sofort mit Raspberry Pi beginnen.
RPi.GPIO als GPIO importieren Importzeit import spidev aus lib_nrf24 importieren NRF24 importieren
Stellen Sie den GPIO-Modus auf " Broadcom SOC-Kanal". Dies bedeutet, dass Sie sich auf die Pins mit der Nummer "Broadcom SOC Channel" beziehen. Dies sind die Nummern nach "GPIO" (z. B. GPIO01, GPIO02…). Dies sind nicht die Board-Nummern.
GPIO.setmode (GPIO.BCM)
Als nächstes richten wir die Pipe-Adresse ein. Diese Adresse ist wichtig, um mit dem Arduino-Empfänger zu kommunizieren. Die Adresse wird im Hex-Code angegeben.
Rohre =,]
Starten Sie das Radio mit GPIO08 als CE und GPIO25 als CSN-Pins.
radio.begin (0, 25)
Stellen Sie die Nutzlastgröße auf 32 Bit, die Kanaladresse auf 76, die Datenrate von 1 MBit / s und die Leistungsstufen auf mindestens ein.
radio.setPayloadSize (32) radio.setChannel (0x76) radio.setDataRate (NRF24.BR_1MBPS) radio.setPALevel (NRF24.PA_MIN)
Öffnen Sie die Pipes, um mit dem Schreiben der Daten zu beginnen, und drucken Sie die grundlegenden Details von nRF24l01.
radio.openWritingPipe (Pipes) radio.printDetails ()
Bereiten Sie eine Nachricht im Zeichenfolgenformular vor. Diese Nachricht wird an Arduino UNO gesendet.
sendMessage = Liste ("Hi..Arduino UNO") während len (sendMessage) <32: sendMessage.append (0)
Beginnen Sie mit dem Schreiben in das Radio und schreiben Sie die gesamte Zeichenfolge weiter, bis das Radio verfügbar ist. Notieren Sie sich dazu die Zeit und drucken Sie eine Debug-Erklärung zur Nachrichtenübermittlung.
while True: start = time.time () radio.write (sendMessage) print ("Nachricht gesendet: {}". format (sendMessage)) send radio.startListening ()
Wenn die Zeichenfolge abgeschlossen und die Pipe geschlossen ist, drucken Sie eine Debug-Meldung mit Zeitüberschreitung.
während nicht radio.available (0): time.sleep (1/100), wenn time.time () - Start> 2: print ("Timed out"). # print Fehlermeldung, wenn Radio funktioniert nicht oder nicht mehr brechen
Hören Sie nicht mehr Radio, schließen Sie die Kommunikation und starten Sie die Kommunikation nach 3 Sekunden neu, um eine weitere Nachricht zu senden.
radio.stopListening () # Radio Time schließen.Sleep (3) # Verzögerung von 3 Sekunden
Das Raspberry-Programm ist einfach zu verstehen, wenn Sie die Grundlagen von Python kennen. Das vollständige Python-Programm finden Sie am Ende des Tutorials.
Ausführen des Python-Programms in Raspberry Pi:
Das Ausführen des Programms ist sehr einfach, nachdem Sie die folgenden Schritte ausgeführt haben:
- Speichern Sie die Python-Programm- und Bibliotheksdateien im selben Ordner.
- Mein Programmdateiname für Sender lautet nrfsend.py und alle Dateien befinden sich im selben Ordner
- Gehe zum Befehlsterminal von Raspberry Pi. Suchen Sie die Python-Programmdatei mit dem Befehl „cd“.
- Öffnen Sie dann den Ordner und schreiben Sie den Befehl " sudo python3 your_program.py " und drücken Sie die Eingabetaste. Sie können die grundlegenden Details von nRf24 sehen und das Radio beginnt alle 3 Sekunden mit dem Senden der Nachrichten. Das Debuggen der Nachricht wird angezeigt, nachdem das Senden mit allen gesendeten Zeichen abgeschlossen ist.
Jetzt sehen wir das gleiche Programm wie der Empfänger in der Arduino UNO.
Programmieren von Arduino UNO zum Empfangen von Nachrichten mit nRF24l01
Das Programmieren des Arduino UNO ähnelt dem Programmieren des Raspberry Pi. Wir werden ähnliche Methoden anwenden, jedoch mit unterschiedlichen Programmiersprachen und Schritten. Die Schritte umfassen den Leseteil von nRF24l01. Die Bibliothek für nRF24l01 für Arduino kann von der Github-Seite heruntergeladen werden. Beginnen Sie mit der Aufnahme der erforderlichen Bibliotheken. Wir verwenden 16x2 LCD mit I2C Shield, also schließen Sie die Wire.h- Bibliothek ein, und auch der nRF24l01 ist mit SPI verbunden, also schließen Sie die SPI-Bibliothek ein.
#einschließen
Fügen Sie eine RF24- und LCD-Bibliothek für den Zugriff auf die RF24- und LCD-Funktionen hinzu.
#einschließen
Die LCD-Adresse für I2C ist 27 und es handelt sich um ein 16x2-LCD. Schreiben Sie dies in die Funktion.
LiquidCrystal_I2C lcd (0x27, 16, 2);
Der RF24 ist mit Standard-SPI-Pins zusammen mit CE in Pin 9 und CSN in Pin 10 verbunden.
RF24-Radio (9, 10);
Starten Sie das Radio, stellen Sie den Leistungspegel und den Kanal auf 76 ein. Stellen Sie auch die Pipe-Adresse wie bei Raspberry Pi ein und öffnen Sie die Pipe zum Lesen.
radio.begin (); radio.setPALevel (RF24_PA_MAX); radio.setChannel (0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe (1, Pipe);
Starten Sie die I2C-Kommunikation und initialisieren Sie die LCD-Anzeige.
Wire.begin (); lcd.begin (); lcd.home (); lcd.print ("Empfangsbereit");
Hören Sie Radio für eingehende Nachrichten und stellen Sie die Nachrichtenlänge auf 32 Byte ein.
radio.startListening (); char receiveMessage = {0}
Wenn ein Radio angeschlossen ist, lesen Sie die Nachricht und speichern Sie sie. Drucken Sie die Nachricht auf dem seriellen Monitor und drucken Sie sie auch auf dem Display aus, bis die nächste Nachricht eintrifft. Stoppen Sie das Radio, um zu hören, und versuchen Sie es nach einiger Zeit erneut. Hier sind es 10 Mikrosekunden.
if (radio.available ()) { radio.read (receiveMessage, sizeof (receiveMessage)); Serial.println (receiveMessage); Serial.println ("Radio ausschalten."); radio.stopListening (); String stringMessage (receiveMessage); lcd.clear (); Verzögerung (1000); lcd.print (stringMessage); }}
Laden Sie den vollständigen Code, der am Ende angegeben wurde, in die Arduino UNO hoch und warten Sie, bis die Nachricht empfangen wird.
Damit ist das vollständige Tutorial zum Senden einer Nachricht mit Raspberry Pi & nRf24l01 und zum Empfangen mit Arduino UNO & nRF24l01 abgeschlossen. Die Nachricht wird auf dem 16x2-LCD gedruckt. Die Pipe-Adressen sind sowohl in Arduino UNO als auch in Raspberry Pi sehr wichtig. Wenn Sie bei diesem Projekt auf Schwierigkeiten stoßen, kommentieren Sie dies bitte unten oder wenden Sie sich an unser Forum, um eine ausführlichere Diskussion zu erhalten.
Überprüfen Sie auch das Demonstrationsvideo unten.