nRF24L01

Das Kommunikationsmodul, das häufig als KY-067 bezeichnet wird, basiert auf dem IC nRF24L01 von Nordic Semiconductor. Es lauft mit ULP-IC (Ultra Low Power), 2 Mbit/s und 2,4 GHz ISM-Band (ohne Lizenz).

Technische Merkmale:

  • GFSK Kodierung
  • Auto-Bestätigungsfunktion
  • Adresse und CRC Berechnung (Anwendung)
  • Datenrate von 1 oder 2 Mbit/s ("on air")
  • SPI Geschwindigkeit: 0..10 Mbps
  • Verbesserter ShockBurst ™ -Hardwareprotokollbeschleuniger, der die Hochgeschwindigkeitsschnittstelle SPI für den Anwendungscontroller unterstützt
  • 125 auswählbare HF-Kanäle (2400,2525 MHz ISM, 1 MHz pro Kanal)
  • Jedes Modul kann mit 6 anderen gleichzeitig kommunizieren
  • Anwendung von Frequenzsprüngen
  • 5V Signaleingänge
  • Stromversorgung: 1,9 bis 3,6 V
  • Der Zugriff auf die Module erfolgt von Arduino aus über SPI Kommunikation.

Pinbelegung der Module

NrAbk.FunktionBeschreibungArduino Uno Pin
1GndGroundGrundGND
2VccPowerStromversorgung : 3.3V (!!)Mit Adaptermodul 5V
Ohne Adapter 3.3V
3CEChip EnableAktivieren die SPI-KommunikationD7
4CSNShip Select NotDer Eingang muss auf HI eingestellt sein,
sonst wird es die SPI-Kommunikation deaktiviert
D8
5SCKSerial ClockDie für den SPI erforderliche TaktsignalD13
6MOSIMaster Out Slave InPIN zum Empfangen von DatenD11
7MISOMaster In Slave OutPIN zum Senden zu DatenD12
8IRQInterrupt(optional) Interrupt Pin, "LO" aktivkeine Notwendigkeit,
verdrahtet zu werden
Modul Id Modul (oben) Modul (unten) Modul ICBemerkung
0830AE-
1405FJ-
1242AF-
1408AF-
1322DQ-
1331AF-

nRF24L01

Zusätzlich zum IC-Integrationspanel enthält das Modul auch einen Leistungsverstärker (LNA) und eine Antenne (PA). Kann also relativ über größere Entfernungen angewendet werden.

  • Bei einer Datenrate von 250 Kb kann die Übertragungsentfernung bis zu 1100 Meter betragen
  • Bei einer Datenübertragungsrate von 1 MB kann die Übertragungsentfernung bis zu 750 Meter betragen

nRF24L01 + SI24R1 receiver modul

Dieses Modul integriert sich auch die Antenne auf der Leiterplatte, die zum einen Seite günstiger aber Reichweite kleiner ist - 100..250 m - als die externen Antennenmodule (siehe oben). Glücklicherweise beide haben die gleiche Fußlayout.

Standardmäßig gibt der SI24R1 ungefähr 2 ~ 3dBm Ausgangsleistung aus. Durch Setzen des niedrigsten Bitwerts von Register 0x06 (RF_SETUP) auf 1 kann dieser Wert auf 7 dBm erhöht werden.

nRF24L01B (10 pin)

Die Modulverkabelung unterscheidet sich von den anderen. Es hat 10 Pins anstelle von 8, 2 gnd und 2 Vcc anstelle von jeweils einem. Herkömmliche Adaptermodule sind dafür nicht nutzbar!

NRF24L01 - Arduino Nano-Verdrahtung

Arduino Uno/Nano - nRF24L01

3,3V - Vcc
GND - GND
D13 - SCK
D12 - MISO
D11 - MOSI
D10 - CSN
D9 - CE






nRF24L01 + (Grundmodul) YL-105 Adapter

en: Socket Adapter Module Board For 8 Pin NRF24L01+ Wireless Transceiver

Dieses Schnittstellenmodul löst das 3,3lV / 5 V-Schnittstellenproblem, indem es sowohl Strom- als auch Signalpegel bei 5 V bereitstellt. Es erledigt die 3.3V-Wandlung "inside". Darüber hinaus wird das Netzteil (5 V) separat eingeführt, was möglicherweise zu Problemen mit der Batterie des Moduls führt, die in bestimmten Betriebsarten nicht ausreichend Strom versorgt werden. Das Modul konvertiert die Signale mit einem AMS1117-3.3 IC.

nRF24L01 + Interface Modul

nRF24L01 Testprogram

Ich habe den Originalcode mit 2 LEDs ergänzt. Diese zeigen an, wann das Modul sendet oder empfängt. Die LEDs müssen mit einem 100-Ohm-Widerstand an Pin 9 und das Ende an GND angeschlossen werden.

nRF24L01 Send

/*
* Arduino Wireless Communication Tutorial
*     Example 1 - Transmitter Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  pinMode(9, OUTPUT);
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();
}
void loop() {
  digitalWrite(9, HIGH);
  const char text[] = "Hello World";
  radio.write(&text, sizeof(text));
  delay(20);
  digitalWrite(9, LOW);
  delay(1000);
}

nRF24L01 Receive

/*
* Arduino Wireless Communication Tutorial
*       Example 1 - Receiver Code
*                
* by Dejan Nedelkovski, www.HowToMechatronics.com
* 
* Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
*/
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(7, 8); // CE, CSN
const byte address[6] = "00001";
void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
  radio.begin();
  radio.openReadingPipe(0, address);
  radio.setPALevel(RF24_PA_MIN);
  radio.startListening();
}
void loop() {
  digitalWrite(9, LOW);
  if (radio.available()) {
    char text[32] = "";
    radio.read(&text, sizeof(text));
    Serial.println(text);
    digitalWrite(9, HIGH);
    delay(20);
  }
}