nRF24L01

Sok helyen KY-067 néven emlegetett kommunikációs modul a Nordic Semiconductor nRF24L01 IC-jére épül, mely ultra alacsony fogyasztású (ULP) 2 Mbps RF adó-vevő IC, a 2,4 GHz-es ISM (licencmentes) sávban forgalmaz.

Technikai jellemzők:

  • GFSK kódolás
  • Automatikus nyugtázás funkció
  • Cím és CRC számítás (alkalmazás)
  • 1 vagy 2Mbps (on air) adatátviteli sebesség
  • SPI sebesség: 0..10 Mbps
  • Enhanced ShockBurst ™ hardver-protokoll-gyorsító, mely támogatja a nagysebességű SPI interfészt az alkalmazásvezérlő számára
  • 125 választható RF csatorna (2400..2525 Mhz ISM, csatornánként 1 MHz)
  • Minden modul 6 másikkal tarthat egyidejűleg kapcsolatot
  • frekvenciaugrás alkalmazása
  • 5V-os jelbemenetek
  • Tápfeszültség: 1,9 .. 3,6 V

A modulok az Arduino felől SPI kommunikációval érhetők el. Bővebben erről: Arduino SPI.

A modulok pin kiosztása

1GroundGroundGrundArduino pin
2VccPowerTápfeszültség: 3.3V (!!)Adaptermodul: 5V, direkt bekötés: 3.3V
3CEChip EnableAz SPI kommunikáció engedélyezéseD7
4CSNShip Select NotA bemenetet HI-ra kell állítani, különben tiltja az SPI kommunikációtD8
5SCKSerial ClockAz SPI-hez szükséges órajelD13
6MOSIMaster Out Slave InAdatok fogadására szolgáló pinD11
7MISOMaster In Slave OutAdatok küldésére szolgáló pinD12
8IRQInterrupt(opcionális) interrupt pin, "LO" aktív-, nem kell bekötni
Modul Id Modul (felülről) Modul (alulról) Modul ICmegjegyzés
0830AE-
1405FJ-
1242AF-
1408AF-
1322DQ-
1331AF-

nRF24L01

A modul az IC-t integráló panelon kívül egy LNA-t, teljesítményerősítőt (PA) és egy antennát is tartalmaz, ezáltal viszonylag nagyobb távolságra is alkalmazható.

  • 250 Kb-os adatátviteli sebesség mellett az átviteli távolság akár 1100 méter is lehet
  • 1 Mb adatátviteli sebesség mellett az átviteli távolság akár 750 méter is lehet

nRF24L01 + SI24R1 receiver modul

Ez a modul a nyák-on integrálja az antennát is, mely egyfelől olcsóbb, másfelől viszont a hatótávolsága is kisebb - 100..250 m - mint a külső antennás moduloké. Szerencsére a csatlakozófelületük (mármint a lábkiosztásuk) megegyezik.

Az alapértelmezett beállítások szerint az SI24R1 nagyjából 2 ~ 3dBm kimeneti teljesítményt ad le. A 0x06 (RF_SETUP) regiszter legalacsonyabb bitértékének az 1-re állításával ez az érték 7dBm-re emelhető.

nRF24L01B (10 pin)

A modul vezetékezése eltér a többitől. Ennek 10 csatlakozója van, 2 Vcc-vel és 2 GND-vel. A többi modulnál használt adapterek (pl. YL-105) itt nem alkalmazhatók !

NRF24L01 - Arduino Nano vezetékezés

Arduino Uno/Nano - nRF24L01

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






nRF24L01 + (alapmodul) YL-105 illesztőmodul

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

Ez az illesztőmodul megoldja a 3.3V/5V illesztési problémát azáltal, hogy a tápja és a jelek szintje is 5V-os, a 3.3V konverziót "belül" oldja meg. Ezen felül a táp (5v) is külön kerül bevezetésre, ami segítséget nyújthat a modul egyik akkut problémájára, hogy adott működési módok esetén nem kap elég áramot. A konverziót a modul egy AMS1117-3.3 IC-vel végzi.

nRF24L01 + (alapmodul) illesztőmodul

nRF24L01 tesztprogram

Az eredeti kódot kiegészítettem 2 LED-del. Ezek jelzik, mikor küld vagy fogad a modul. A LED-eket a 9-es pinre kell kötni, egy 100 ohmos ellenállással, a végét a GND-re.

nRF24L01 küldés

/*
* 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 fogadás

/*
* 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);
  }
}