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.
Az nRF24L01 modulok közös jellemzői
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.
Az NRF24 IC-k típusai
NRF24L01 + PA + LNA modul (8 pin)
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
Pinout
1 | Ground | Ground | Grund | Arduino pin |
2 | Vcc | Power | Tápfeszültség: 3.3V (!!) | Adaptermodul: 5V, direkt bekötés: 3.3V |
3 | CE | Chip Enable | Az SPI kommunikáció engedélyezése | D7 |
4 | CSN | Ship Select Not | A bemenetet HI-ra kell állítani, különben tiltja az SPI kommunikációt | D8 |
5 | SCK | Serial Clock | Az SPI-hez szükséges órajel | D13 |
6 | MOSI | Master Out Slave In | Adatok fogadására szolgáló pin | D11 |
7 | MISO | Master In Slave Out | Adatok küldésére szolgáló pin | D12 |
8 | IRQ | Interrupt | (opcionális) interrupt pin, „LO” aktív | -, nem kell bekötni |
nRF24L01 + SI24R1 receiver modul (8 pin)
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ő.
Pinout
1 | Ground | Ground | Grund | Arduino pin |
2 | Vcc | Power | Tápfeszültség: 3.3V (!!) | Adaptermodul: 5V, direkt bekötés: 3.3V |
3 | CE | Chip Enable | Az SPI kommunikáció engedélyezése | D7 |
4 | CSN | Ship Select Not | A bemenetet HI-ra kell állítani, különben tiltja az SPI kommunikációt | D8 |
5 | SCK | Serial Clock | Az SPI-hez szükséges órajel | D13 |
6 | MOSI | Master Out Slave In | Adatok fogadására szolgáló pin | D11 |
7 | MISO | Master In Slave Out | Adatok küldésére szolgáló pin | D12 |
8 | IRQ | Interrupt | (opcionális) interrupt pin, „LO” aktív | -, nem kell bekötni |
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
nRF24L01 + (alapmodul) illesztőmodul YL-105
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 szoftver
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); } }