NRF24L01 İle Çift Yönlü Haberleşme

NRF24L01 modülü, kablosuz haberleşme olarak en çok kullanılan modüllerden bir tanesidir. Bu modülün maliyeti hem ucuz hemde kullanımı kolay olmasıyla tercih edilmektedir. Eğer internette yapılan projelere bakarsanız, bu projelerin çoğu tek yönlü haberleşmektedir. Yani bir modül alıcı olurken diğeri verici olmaktadır. Bu yazımızda NRF24L01 İle Çift Yönlü Haberleşme” nasıl gerçekleşir bunu öğreneceğiz.

NRF24L01 Kablosuz Haberleşme Modülü
NRF24L01 Kablosuz Haberleşme Modülü

Eğer nrf24l01 modülünün nasıl kullanıldığını bilmiyorsanız aşağıdaki linkten ilk onu okumanızı tavsiye ederiz.

Projede Kullanılan Malzemeler

Burada nrf24l01 modülü için adaptör kullanacağız.Adaptörün resmi aşağıdadır.

NRF24L01 Adaptörü

Aslında onu kullanmadan da nrf24l01 modülü üzerinde Vcc ve GND üzerine 10uF kondansatör lehimleyerek yapabilirsiniz. Ama biz modül kullanmanızı tavsiye ederiz. Bağlantınızda sorun yaşamazsınız.

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 Modülü Bağlantı Şeması
Arduino İle NRF24L01 Modülü Bağlantı Şeması

Arduino İle NRF24L01 Adaptörü Bağlantı Pinleri

nRF24L01  AdaptörüArduino Uno
VCC5 V
GNDGND
CS7
CE8
MOSI11
MISO12
SCK13
Arduino İle NRF24L01 Adaptörü Bağlantı Pinleri

Eğer bağlantıları yaptıysak koda geçebiliriz.

NRF24L01 İle Çift Yönlü Haberleşme Kodu

Kodları arduinomuza yüklemeden önce nrf24l01 için gerekli olan kütüphanemizi Arduino IDE’ ye eklememiz lazım.

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+" gonderildi");

    //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)+ " geldi");

    // veriyi stringe çevir ve seri monitöre yazdır
  }

}

Alıcı 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"};    //İ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)+ " geldi"); //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+" gonderildi"); // verinin gönderildiği seri monitöre yazdırılır.
    
  }
}

Projenin videosunu aşağıdan izleyebilirsiniz.Abone olmayı unutmayalım 🙂

NRF24L01 İle Çift Yönlü Haberleşme