Arduino und NRF24L01

Der Grund für diese kurze Lernkurve:

Mein Sohn mag es, in seinem Zimmer vom Rest der lauten Familie ferngehalten zu werden. Seine Mutter braucht von Zeit zu Zeit seine Anwesenheit, um seinem autistischen Bruder und den Mahlzeiten usw. zu helfen. Er fragte mich, ob er etwas in seinem Zimmer hätte, das seine Mutter davon abhalten würde, die Treppe hoch und runter zu gehen, um ihn zu holen, und ich schlug eine Wi-Fi-Türklingel vor . Einfache Lösung. Er wollte etwas, das in beide Richtungen ging. Keine weiteren Details wie Audio oder Video. Ich hatte gehört, dass das NRF24L01 ein sehr kostengünstiges und dennoch effektives kleines Funkgerät ist, also beschloss ich, einige Nachforschungen anzustellen und zu sehen, was ich mir einfallen lassen könnte.

Es gibt eine Reihe von Instructables, die zeigen, wie das Funkmodul NRF24L01 mit einem Arduino verwendet wird. Ich fand, dass es schwierig war, ein einfaches Setup zu finden, bei dem zwei Arduinos genau auf die gleiche Weise kommunizieren konnten. Ich wollte, dass beide Setups auf dieselbe Weise gesendet und empfangen werden, und das würde die einfachste Art definieren, beide Dinge auf zwei Arduinos zu tun. Sobald zwei Arduinos miteinander kommunizieren, habe ich den Grundrahmen, um sie auf andere Dinge auszudehnen.

Dieses Instructable produziert nicht das Produkt, das mein Sohn möchte, sondern das Framework dafür und viele andere einfache Zwei-Wege-Anwendungen.

Schritt 1: Das NRF24L01-Modul

Die Hauptmerkmale des NRF24L01 sind folgende:

Arbeitet im 2, 4-Hz-ISM-Band. Die Versorgungsspannung beträgt 3, 3 V (sehr wichtig, um sich daran zu erinnern). Die SPI-Pins sind 5 V-tolerant, was für Arduino-Anwendungen nützlich ist. Sie verfügen über 126 wählbare Kanäle (Frequenzen). Kanäle können helfen, mögliche Interferenzen mit zu vermeiden Geräte in der Nähe, die dieselbe Frequenz verwenden. Kann Versuch und Irrtum sein. Kanäle in Schritten von 1 MHz wählbar

Modulabmessungen (ungefähr): Kleine Platine mit eingebauter Antenne: - 30 mm x 16 mm Klein mit vertikaler Antennenhalterung: - 30 mm x 16 mm Groß mit horizontaler Antennenhalterung: - 41 mm x 16 mm (Antennenhalterung ragt weitere 7 mm heraus)

Die Boards sind nicht Steckbrett-freundlich, müssen also mit weiblichen Dupont-Kabeln verbunden werden. Es gibt auch eine Adapterplatte, die immer noch nicht Steckbrett-freundlich ist, aber die Stifte in einer einzigen Reihe mit Vcc und GND alleine ausbricht. Ein weiterer Vorteil der Adapterplatte besteht darin, dass sie über einen integrierten 3, 3-V-Regler (und Bypass-Kondensatoren) verfügt, sodass Sie eine 5-V-Versorgung verwenden können.

Es wurden Probleme bei der Verwendung der 3, 3-V-Versorgung vom Arduino festgestellt, da Sie Kondensatoren auf die Platine löten müssen, um Stromstöße usw. zu vermeiden. Ich entschied mich für die einfachere Option und verwendete die Adapterplatte und ließ alles von 5 V laufen. Abmessungen der Adapterplatte: - 27 mm x 19 mm. Fügt der Länge jedes Boards ca. 17 mm hinzu und natürlich auch ein bisschen Tiefe. Es ist möglich, die Stiftleisten der Buchse und der Buchse zu entlöten und die Platinen einfach miteinander zu verlöten. Es würde Ihnen einen kleineren Fußabdruck geben, aber nichts für schwache Nerven.

Schritt 2: Zusammensetzen

Liste der Einzelteile:

  • 2 X Arduinos
  • 2 X Steckbretter
  • 2 X NRF24L01
  • [optional] 2 X YL-105 Breakout-Boards für den NRF24L01. Dies ermöglicht eine 5-V-Verbindung und eine einfachere Verkabelung
  • 2 X Momentschalter
  • 2 X rote LEDs
  • 2 X gelbe LEDs
  • 4 x 220 Ohm Widerstände
  • Überbrückungsdrähte

Ich verwende AliExpress für fast alle meine billigen Komponenten, insbesondere wenn ich mehr als einen Artikel benötige.

Es sind hauptsächlich billige Komponenten aus China, aber ich habe noch keine einzige schlechte Komponente gehabt.

Ich liebe es, den Arduino zu benutzen, und deshalb ist alles, was ich mache, Niederspannung und billige Komponenten sind dem Job gewachsen. Wenn ich jedoch jemals zu etwas Kritischerem oder Hochspannungsartigem usw. übergehen würde, würde ich meine Komponenten höchstwahrscheinlich von einem anderen Ort beziehen.

Verbindungen:

Das Modul kommuniziert über das SPI-Protokoll. Serial Peripheral Interface Bus

Die hier verwendete Stiftanordnung war:

NRF24L01 Arduino-Stift

VCC 3.3 V Wenn Sie die Breakout-Karte YL-105 verwenden, kann die Vcc-Leitung zum 5-V-Arduino-Pin führen

GND GND

CS 8 (Kann ein beliebiger nicht verwendeter Pin sein, ist aber im Code definiert)

CE 7 (Kann ein beliebiger nicht verwendeter Pin sein, ist aber im Code definiert)

MOSI 11 (Muss der SPI MOSI Pin 11 oder ICSP Pin 4 sein)

MISO 12 (Muss der SPI MISO Pin 12 oder ICSP Pin 1 sein)

SCK 13 (Muss der SPI SCK Pin 13 oder ICSP Pin 3 sein)

Verkabelung für LEDs und Schalter:

  • Arduino Pin 2 an gelbe LED lange Kabelanode
  • Gelbe kurze Leitung - Kathode zum 220-Ohm-Widerstand, dann zweite Widerstandsleitung zum GND
  • Arduino Pin 3 an rote LED lange Kabelanode
  • Rote kurze Leitung - Kathode zum 220-Ohm-Widerstand, dann zweite Widerstandsleitung zum GND
  • Arduino Pin 4 zum Schalten, andere Seite des Schalters zum GND

Der physische Aufbau der beiden Boards ist identisch.

Es gibt geringfügige Softwareunterschiede bei den Lese- und Schreibrohren für die jeweiligen Karten.

Schritt 3: Der Code

Der Code, den ich für beide Arduinos erstellt habe, ist fast identisch, daher zeige ich nur einen davon.

Alle Codedateien stehen zum Download zur Verfügung.

#include // kommt mit Arduino

#include "RF24.h" // kann über die IDE gefunden werden: Skizzieren / Bibliothek einschließen / Bibliotheken verwalten / Nach RF24 suchen und RF24 nach TMRh20 suchen / Weitere Informationen / Installieren

// Taste und LEDs einrichten

#define button 4

#define verifyLed 2

#define led 3

RF24 NRF24L01 (7, 8); // Objekt namens NRF24L01 erstellen. Angabe der CE- und CSN-Pins, die auf dem Arduino verwendet werden sollen

Byteadresse [] [6] = {"pipe1", "pipe2"}; // setze Adressen der 2 Pipes zum Lesen und Schreiben

boolean buttonState = false; // wird sowohl zum Senden als auch zum Empfangen verwendet

void setup () {

// Arduino Pins einrichten

pinMode (Schaltfläche, INPUT_PULLUP);

PinMode (Bestätigt, AUSGABE); // gelbe LED

PinMode (LED, OUTPUT); // rote LED

NRF24L01.begin (); // öffne die Pipes zum Lesen und Schreiben von Board 1

NRF24L01.openWritingPipe (Adresse [0]); // Schreibpipe öffnen, um Pipe 1 zu adressieren

NRF24L01.openReadingPipe (1, Adresse [1]); // Lesepipe von Adresspipe 2 öffnen

// Dies ist der einzige Unterschied zwischen den beiden erforderlichen Skizzen

// Die beiden folgenden Zeilen beziehen sich auf Tafel zwei. Beachten Sie, wie die Lese- und Schreibpfeifen umgekehrt sind

// NRF24L01.openReadingPipe (1, Adresse [0]); // Leseleitung von Adressleitung 1 öffnen

// NRF24L01.openWritingPipe (Adresse [1]); // Schreibpipe öffnen, um Pipe 2 zu adressieren

NRF24L01.setPALevel (RF24_PA_MAX); // HF-Ausgangsleistung auf Minimum setzen, RF24_PA_MIN (bei Bedarf auf RF24_PA_MAX ändern)

NRF24L01.setDataRate (RF24_250KBPS); // Datenrate auf 250kbps setzen

// Wenn die Frequenz von 110 unten ein Problem mit anderen Wi-Fi für Sie ist, erhöhen Sie um 1, bis es in Ordnung ist

// Vergiss nicht, dass beide Codesätze die gleiche Häufigkeit haben müssen

NRF24L01.setChannel (110); // Frequenz auf Kanal 110 einstellen.

}}

void loop () {

// Schaltflächenwechsel auf das andere Arduino übertragen

Verzögerung (10);

NRF24L01.stopListening ();

buttonState = digitalRead (Schaltfläche); // Test auf Tastendruck auf DIESER Platine

Wenn die Schaltfläche (buttonState == LOW) // hochgezogen ist, testen Sie sie auf LOW

{

NRF24L01.write (& buttonState, sizeof (buttonState)); // Sende den LOW-Status an ein anderes Arduino-Board

// blinkt die gelbe LED, um den Fortschritt anzuzeigen

digitalWrite (bestätigt, HOCH);

Verzögerung (100);

digitalWrite (bestätigt, NIEDRIG);

}}

buttonState = HIGH; // setze die Button State Variable zurück


// Empfangstastenwechsel vom anderen Arduino

Verzögerung (10);

NRF24L01.startListening ();

if (NRF24L01.available () ) // Haben wir eine Übertragung von einer anderen Arduino- Karte?

{

NRF24L01.read (& buttonState, sizeof (buttonState)); // Aktualisiere die Variable mit neuem Status

NRF24L01.stopListening ();

}}

if (buttonState == HIGH) // teste den Schaltflächenstatus des anderen Arduino

{

digitalWrite (LED, LOW);

}}

sonst

{

flashLed (); // zeigt an, dass die Taste auf der anderen Karte gedrückt wurde

}}

buttonState = HIGH; // setze die Button State Variable zurück

}}

// Die rote LED fünfmal blinken lassen

void flashLed ()

{

für (int i = 0; i <5; i ++)

{

digitalWrite (LED, HIGH);

Verzögerung (200);

digitalWrite (LED, LOW);

Verzögerung (200);

}}

}}

Schritt 4: Arduino-Code und Fritzing-Dateien

Wenn Sie den Code nicht zu unterschiedlichen Zeiten auf die beiden Arduinos hochladen, stellen Sie sicher, dass Sie zwei verschiedene COM-Ports ausgewählt haben. Andernfalls haben Sie auf beiden genau den gleichen Code.

Ich hoffe, dass dies für Sie von Interesse sein kann und einem Anfänger bei der ersten Implementierung eines NRF24L01 hilft.

Wenn nichts anderes, erhalten Sie einen Arbeitsrahmen, auf dem Sie aufbauen können.

Anhänge

  • Arduino_nRF24L01_with_LED.ino Herunterladen
  • Arduino_nRF24L01_with_LED_2.ino Herunterladen
  • Arduino NRF24L01.fzz Herunterladen

Schritt 5: Update basierend auf möglichen Problemen

Ich habe einige Kommentare von Tony in Italia und Andrea erhalten, bei denen beide Probleme haben, diese Schaltung mit einem Arduino Nano zu verbinden.

Vor ungefähr einem Jahr habe ich zwei Nanos gekauft, bin aber nie dazu gekommen, sie zu verwenden. Deshalb habe ich diese Gelegenheit genutzt, um sie zu verlöten und zu verwenden.

Ich hatte den ursprünglichen Build auseinander genommen und ihn wie zuvor mit einem Arduino UNO aus dem Instructable neu erstellt, um sicherzustellen, dass alles funktionierte.

Ich habe ein paar Bilder von diesem Build hinzugefügt.

Es zeigt die Verkabelung etwas anders und ist möglicherweise leichter zu erkennen.

Ich hatte eine leichte Panne / Verzögerung auf einem der NRF24L01-Boards, aber es schien sich von selbst zu klären.

Ich habe die UNOs ausgetauscht und durch die Nanos ersetzt, eine Skizze auf einen Nano und die andere Skizze auf den anderen Nano hochgeladen, und ich hatte Probleme erwartet, aber alles funktionierte ohne Änderungen am Code.

Es ist wichtig, dass die verschiedenen Skizzen auf die beiden Arduinos hochgeladen werden.

Die Unterschiede sind nur geringfügig, aber sehr wichtig.

Ich habe auch ein paar Bilder für diesen Build hinzugefügt.

Das lässt mich denken, dass möglicherweise eine schlechte Verbindung besteht oder meine Anweisungen nicht eindeutig waren.

Ich habe YL-105 Breakout Boards für die NRF24L01s verwendet, damit ich 5V verwenden kann.

Wenn Sie die Breakout-Boards nicht verwenden, müssen Sie 3.3v verwenden.

Wenn Sie 5 V in den NRF24L01 drücken, stirbt dieser höchstwahrscheinlich.

Auf der NRF24L01-Platine werden sieben Drähte verwendet

  • GND
  • Positiv 3, 3v
  • CS an Arduino Pin 8 (im Code definiert)
  • CE an Arduino Pin 7 (im Code definiert)
  • MOSI an Arduino Pin 11 (obligatorisch)
  • MISO zu Arduino Pin 12 (obligatorisch)
  • SCK zu Arduino Pin 13 (obligatorisch)
  • IRQ wird nicht verwendet
  • Gelbe LED lange Kabelanode an Arduino Pin 2
  • Gelbe kurze Leitungskathode zum 220-Ohm-Widerstand, dann zweite Widerstandsleitung zum GND
  • Rote LED-Langleitungsanode an Arduino-Pin 3 Rote Kurzleitungskathode an 220-Ohm-Widerstand, dann zweite Widerstandsleitung an GND
  • Arduino Pin 4 zum Schalten, andere Seite des Schalters zum GND

Wenn ich jemals einen Build habe, der nicht zu funktionieren scheint, nehme ich ihn auseinander und beginne erneut, insbesondere mit einem Build, der recht klein ist. Auf diese Weise eliminiere ich alle vorherigen Fehler.

Das einzige, was ich für falsch halten kann, ist, dass MOSI und MISO möglicherweise vertauscht wurden.

Hoffe, das hilft ihnen und allen anderen, die Probleme haben könnten.

Schritt 6: Videodemonstration hinzugefügt

Das Video wurde hochgeladen, um eine schnelle Demonstration des Setups und der Verwendung zu geben.

Ähnlicher Artikel