You are on page 1of 7

WIRELESS NETWORK PROJECT

JTD - POLINEMA

MODUL 2
NRF24L01 2.4GHz TRX

PENGANTAR
NRF24L01 adalah piranti Low Power Transceiver yang bekerja pada Band 2.4 sampai 2.4835
GHz dengan kecepatan transfer hingga 2Mbps. Secara umum piranti NRF24L01 ini mempunyai
spesifikasi sebagai berikut:
Tabel 1. Karakteristik Umum NRF24L01
Parameter Nilai Tipikal
Frekuensi Kerja 2.4 GHz sampai 2.4835 GHz
Jumlah kanal 125 kanal
Multiceiver 6 pipe per kanal
Spasi antar kanal 1 MHz atau 2 MHz
Kecepatan Transfer 250 Kbps sampai 2 MBps
Power 0, -6, -12 dan -18 dBm
Interface 4 wire SPI

Dalam bentuk praktis NRF24L01 dikemas dengan runutan kaki sebagai berikut:

Gambar 1. Petunjuk tata letak interface SPI pada NRF24L01


WIRELESS NETWORK PROJECT
JTD - POLINEMA

Adapun fungsi dari masing – masing kaki dinyatakan sebagaimana Tabel 2. berikut ini
Tabel 2. Fungsi pin SPI pada board NRF24L01
No Pin Fungsi Deskripsi
1 Gnd Power Ground (0)
2 Vcc Power +3.3 V max
Aktifasi Board NRF24L01 dan pengaturan
3 CE Chip Enable
mode TX maupun RX
4 CSN Chip select untuk SPI
5 SCK Digital Input Clock untuk SPI
6 MOSI Digital Input SPI Slave Input
7 MISO Digital Output SPI Slave Output
8 IRQ Digital Output Interrupt

Untuk dapat memanfaatkan fitur-fitur yang dimiliki oleh NRF24L01 menggunakan board
Arduino, para pengembang Arduino telah mengembangkan sebuah library khusus yang disebut RF24
(dapat didownload secara gratis di internet). Berikut ini fungsi-fungsi yang umum digunakan dalam
komunikasi data berbasis NRF24L01.
Tabel 3. Fungsi-fungsi dalam RF24 (hanya yang umum digunakan)
No Sintaks Fungsi
1 RF24( CE, CSN) Constructor dengan penetapan letak pin CE
dan CSN pada Arduino
2 begin( ) Memulai operasi chip NRF24L01
3 openWritingPipe (uint64_t alamat) Open pipe untuk penulisan (Tx)
4 openReadingPipe(uint8_t nomor, Open Pipe untuk pembacaan (Rx), nomor ->
uint64_t alamat) nomor pipe ( 1 - 5), alamat-> alamat 40 bit
5 startListening( ) Mode Rx
6 stopListening( ) Mode Tx
7 available( ) Pengecekan data ada di buffer ata
8 read( *buff, uint8_t panjang) Pembacaan data dari buffer
9 write( *buff, uint8_t panjang) Penulisan data ke buffer untuk dikirim
10 setChannel(uint8_t kanal) Set kanal dari 0 -127
 Untuk lebih detilnya lihat pada makalah RF24 Class Reference
WIRELESS NETWORK PROJECT
JTD - POLINEMA

MULTICEIVER
Multiceiver adalah fitur dalam NRF24L01, dimana 1 buah NRF dalam mode Rx (Receiver)
dapat melayani penerimaan data dari 6 buah NRF lain dalam mode Tx pada satu kanal frekuensi.
Secara diagram dapat digambarkan sebagai berikut:

Gambar 2 Sistem Multiceiver


Pada dasarnya konsep Muticeiver adalah membagi masing-masing PTX (yaitu PTX1 sampai PTX6)
agar mempunyai saluran tersendiri (disebut pipe) sedemikian rupa sehingga setiap PTX dapat
dikenali dan dilayani oleh PRX secara mandiri. Pengaturan pipe ini dilakukan dengan cara memberi
alamat yang berbeda untuk masing-masing PTX sebagaimana diagram berikut:

Gambar 3 Pola pemberian alamat pada pipe


WIRELESS NETWORK PROJECT
JTD - POLINEMA

Dari gambar 3 diatas terlihat bahwa:


a. Pipe 0 harus dibuat berbeda dengan pipe 1 sampai 5
b. Pipe 5 mempunyi 4 Byte atas yang sama ( Byte 1 sampai Byte 4) dan 1 Byte bawah yang
berbeda (Byte 0)

KOMUNIKASI POINT TO POINT


Dalam komunikasi point to point setiap pasangan (terdiri dari 2 node) harus melakukan
pengaturan piranti NRF sebagai berikut:
1. Setiap pasangan harus mengatur kanal komunikasi yang berbeda (pilih nomor kanal diatas
100 agar tidak ter-interferensi dengan piranti lain maupun dengan pasangan yang lain)
2. Setiap pasangan node mengatur alamat yang sama untuk operasi Tx dan Rx. Gunakan nomor
pipe 1 sampai 5 dengan tata cara pengalamatannya
3. Lakukan penataan tata hubung komponen (Arduino dan NRF24L01) sebagai berikut:
Tabel 4. Tata Hubung NRF24L01 dan Arduino
NRF24L01 Arduino
GND GND
Vcc 3.3V
CE D9 ( 9 )
CSN D10 (10)
MOSI D12 (12)
MISO D11 (11)
SCK D13 (13)

LATIHAN I KOMUNIKASI 1 ARAH


a. Ketikkan program berikut untuk TX (node 1)

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

uint64_t addrTx = 0x0F0F0F0F01LL; // Alamat TX

struct data_s
{
char Kalimat[20];
};
WIRELESS NETWORK PROJECT
JTD - POLINEMA

data_s Data;

RF24 Radio(9,10); // CE = 9 CSN = 10

void setup()
{
Radio.begin();
Radio.setChannel(100);
Radio.openWritingPipe( addrTx );

Data.Kalimat[0] = 'A'; Data.Kalimat[1] = 'c';


Data.Kalimat[2] = 'h'; Data.Kalimat[3] = 'm';
Data.Kalimat[4] = 'a'; Data.Kalimat[5] = 'd';

Radio.write( &Data, sizeof(Data) );

delay(200);
}

void loop()
{

b. Ketikkan program berikut untuk RX (node 2)


#include <SPI.h>

#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

uint64_t addrRx = 0x0F0F0F0F01LL; // Alamat RX

struct data_s
{
char Kalimat[20];
};

data_s Data;

RF24 Radio(9,10); // CE = 9 CSN = 10

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(100);
Radio.openReadingPipe(1, addrRx );
Radio.startListening();
delay(200);
}
WIRELESS NETWORK PROJECT
JTD - POLINEMA

void loop()
{
if (Radio.available())
{
Radio.read(&Data, sizeof(Data));

Serial.println(Data.Kalimat);
delay(100);
}
}

LATIHAN 2 ARAH SIMPLEX


a. Ketikkan program berikut pada masing-masing pasangan node. Gunakan channel yang
berbeda untuk tiap pasangan Node
#include <nRF24L01.h>
#include <RF24.h>
#include <RF24_config.h>

#include <SPI.h>

uint64_t pipe = 0xF0F0F0F0F01LL;


uint8_t CE = 9;
uint8_t CSN = 10;
int n = 0;
boolean Flag = false;

struct payload
{
char Kata[20];
};

payload Data;

RF24 Radio(CE, CSN);

void setup()
{
Serial.begin(9600);

Radio.begin();
Radio.setChannel(100); //set berbeda untuk tiap pasangan node
Radio.openReadingPipe(1, pipe);
Radio.startListening();
}

void loop()
{
if ( Radio.available() )
{
Radio.read(&Data, sizeof(Data) );
Serial.println(Data.Kata);
}
WIRELESS NETWORK PROJECT
JTD - POLINEMA

if (Flag == true)
{
Radio.stopListening(); delay(100);
Radio.openWritingPipe(pipe); delay(100);
Radio.write(&Data, sizeof(Data) ); delay(100);
Flag = false;
Radio.startListening();
delay(100);
}

void serialEvent()
{
while (Serial.available() )
{
char data = (char)Serial.read();
Data.Kata[n] = data; n++;
if (data == '_') { Flag = true; n=0; }
}
}

You might also like