NRF24L01 İle Sohbet ve Dosya Gönderme
İnternette nRF24L01 ile yapılmış bir çok proje bulunmaktadır. Projelerin çoğu uzaktan kontrol sistemleridir. Peki nRF24l01 ile başka neler yapılabilir hiç düşündünüz mü? Ben düşünürken aklıma NRF24L01 ile bilgisayarlar arası dosya göndereme fikri geldi. Bu yazımızda “NRF24L01 İle Sohbet ve Dosya Gönderme” projesini yapacağız. Peki dosya dediğimde aklına ne geliyor? Benim aklıma müzik dosyaları, resim, pdf dosyaları veya program dosyaları gibi bir çok şey geliyor. Bu yazımızda bu projeyi yapacağız ve projenin yararlı olup olmadığını göreceğiz.
Projemize başlamadan önce NRF24L01 modülünün nasıl kullanıldığını aşağıdaki linkten yazımızı okumanızı tavsiye ederim.
Eğer nrf24l01 modülünün kullanımını biliyorsanız ikinci adım olarak aşağıdaki linkten nrf24l01 ile çift yönlü haberleşmeyi anlattığımız yazımızı okuyabilir ve videomuzu izleyebilirsiniz.
Projede Gerekli Olan Malzemeler:
- 2 adet Arduino Uno(istediğiniz başka modelleri de kullanabilirsiniz)
- 2 adet nRFl2401 modülü
- 2 adet nRF24l01 adaptörü(Elinizde yoksa nRF24l01 modülüne 10uF kondansatör lehimleyerek kullanabilirsiniz. )
- Dişi-Erkek Jumper kablolar
Arduino İle nRF24l01 Modülü Bağlantı Şeması
Başlık olarak nrf24l01 modülü dedim ama adaptör ile nrf24l01 modülü bağlantı şeması aynı aslında tek fark adaptör kullanmazsanız Vcc’yi arduino da 3.3V pinine bağlamanız lazım.

Arduino İle NRF24L01 Adaptörü Bağlantı Pinleri
nRF24L01 Adaptörü | Arduino Uno |
VCC | 5 V |
GND | GND |
CS | 7 |
CE | 8 |
MOSI | 11 |
MISO | 12 |
SCK | 13 |
Eğer bağlantıları yaptıysak koda geçebiliriz.
Arduino NRF24L01 Modülü Kodu
Kodları arduinomuza yüklemeden önce nrf24l01 için gerekli olan kütüphanemizi Arduino IDE’ ye eklememiz lazım.
- NRF24L01 kütüphanesini indirmek için buraya tıklayın!
Verici Modülün Kodu
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(8, 7); // CE, CSN
const byte addresses [][6] = {"00001", "00002"}; //alıcı ve verici adresleri
char b[32];
void setup() {
Serial.begin(115200);
radio.begin(); //Telsiz iletişiminin başlatılması
radio.openWritingPipe(addresses[1]); //Verileri göndereceğimiz adresin ayarlanması
radio.openReadingPipe(1, addresses[0]); //Verileri alacağımız adresin ayarlanması
radio.setPALevel(RF24_PA_MIN); //Verici ve alıcı arasındaki mesafeye göre minimum veya maksimum olarak ayarlayabilirsiniz.
}
void loop()
{
delay(5);
if(Serial.available()){
//Eğer seri porttan veri gelmişse
String a=Serial.readString();
//Gelen Stringi oku ve a değişkeninde tut
a.trim();
// a stringinin başında ve sonunda bulunan boşlukları ve "\n"(enter) varsa sil
a.toCharArray(b,32);
// a stringini b char dizisine çevir.
radio.stopListening(); //Bu, modülü verici olarak ayarlar
radio.write(&b, 32); //veri gönderilir.
//Serial.println(a);
//Verinin gönderildiği seri monitöre yazdırılır.
delay(5);
//5 mikrosaniye beklenir.
}
radio.startListening(); //Bu, modülü alıcı olarak ayarlar
if(radio.available()){
//nrf24l01 modülüne veri geldiyse
radio.read(&b, 32); //veriyi oku
Serial.println(String(b));
// veriyi stringe çevir ve seri monitöre yazdır
}
}
Alıcı Kodu
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(8, 7); // CE, CSN
const byte addresses [][6] = {"00001", "00002"}; //İki adresin ayarlanması. Biri iletmek ve biri almak için
char b[32];
void setup() {
Serial.begin(115200); // seri haberleşmeyi 115200 baudrate de başlatıyoruz.
radio.begin(); //Telsiz iletişiminin başlatılması
radio.openWritingPipe(addresses[0]); //Verileri göndereceğimiz adresin ayarlanması
radio.openReadingPipe(1, addresses[1]); //Verileri alacağımız adresin ayarlanması
radio.setPALevel(RF24_PA_MIN); //Verici ve alıcı arasındaki mesafeye göre minimum veya maksimum olarak ayarlayabilirsiniz.
}
void loop()
{
delay(5); //5 mikrosaniye bekliyoruz.
radio.startListening(); //Bu, modülü alıcı olarak ayarlar
if (radio.available()) //Eğer gelen veri varsa
{
radio.read(&b, 32); // gelen veriyi oku ve b değişkenine kaydet
Serial.println(String(b)); //b char dizisini stringe çevir.
delay(5); //5 mikrosaniye bekle
}
if(Serial.available()){ //Seri haberleşmeden eğer veri geldiyse
String a=Serial.readString(); // gelen veriyi oku ve a değişkenine kaydet
a.trim(); // a stringinin başında ve sonunda boşluk veya "\n"(enter) varsa sil
radio.stopListening(); //Bu, modülü verici olarak ayarlar
a.toCharArray(b,32); //a string değişkenini char dizisine çevirir
radio.write(&b, 32); //b değişkeni gönderilir
//Serial.println(a); // verinin gönderildiği seri monitöre yazdırılır.
}
}
AD Arduino File Sender v1.0 Programı
C# ile yazdığımız program arduinonun bilgisayar ile haberleşmesini sağlayan programdır. Programımız bilgisardan okuduğu verileri arduinoya göndermektedir. Pogramın dili İngilizce’dir. Basit bir ingilizcesi var kolaylıkla anlarsınız.
Projenin çalıştırılabilir halini indirmek için tıklayın.
Projenin github adresine gitmek için tıklayın.

Pogramımızı açtığımızda ilk bu ekranımız karşımıza gelmektedir. Bu ekranımız bizim sohbet ve dosya gönderme ekranımız. Send butonu ile metin kutumuza yazdığımız metin gönderilmektedir. “Select File And Send” butonu ile göndereceğimiz dosyayı seçip göndermemizi sağlamaktadır. Fakat bu butonları kullanmadan önce ayarlarımızı yapmamız lazım. Aşağıdaki resim bizim ayarlarımızın yapıldığı ekrandır.

Burada ilk olarak arduinonun bağlı olduğu portu seçmemiz lazım. “…” butonumuza tıklayarak bilgisayarımıza bağlı olan arduino kartlarının bağlı olduğu portlar listelenmektedir. İkinci olarak arduino ile programımız arasındaki bağlantı hızını seçiyoruz. Biz 115200 olarak ayarlayacağız. Üçüncü olarak kaç mikro saniyede veri gönderileceğini ayarlıyoruz. İdeali 1000’dir. Değiştirmenizi tavsiye etmem. Connect butonu programın arduinoya bağlanmasını sağlamaktadır. Disconnect butonu bağlantının kapanmasını sağlamaktadır.
Not: Program ile dosya gönderdiğimiz zaman gönderilen dosya program ile aynı dizine kaydedilmektedir.
Projenin videosunu aşağıdan izleyebilirsiniz.