nRF24L01 Nedir?
Haberleşme projelerinde ilk akla gelen alternatiflerden biri olan nRF24L01 modülü, 2.400 – 2.4835GHz frekans aralığında çalışan bir radyo alıcı-verici yani transceiver modülür.
İki veya daha fazla mikro denetleyiciyi birbirleriyle kablosuz olarak uzaktan iletişim kurabilmesi, sensör verilerini uzaktan izleme, robotları kontrol etme, ev otomasyonu gibi birçok olasılığa imkan sağlar. Hem ucuz hem de güvenilir 2 yollu RF çözümlerine sahip olmak söz konusu olduğunda, Nordic Semiconductor’ın nRF24L01 alıcı-verici modülünden daha iyisini kimse yapamaz.
nRF24L01+ (artı) alıcı-verici modülü genellikle iki dolardan daha az bir fiyata çevrimiçi olarak edinilebilir, bu da onu alabileceğiniz en ucuz veri iletişim seçeneklerinden biri haline getirir. Ve hepsinden önemlisi, bu modüller çok küçüktür ve neredeyse her projeye kablosuz bir arabirim eklemenize olanak tanır.
nRF24L01 Özellikleri
Radyo Frekansı
nRF24L01 alıcı-verici modülü, dünya çapında 2,4 GHz ISM frekans bandında çalışmak üzere tasarlanmıştır ve veri iletimi için GFSK modülasyonunu kullanır. Veri aktarım hızı 250kbps, 1Mbps ve 2Mbps olarak ayarlanabilir.
Enerji Tüketimi
Modülün çalışma voltajı 1,9 ila 3,6V arasındadır, ancak iyi haber şu ki, mantık pinleri 5 volt toleranslıdır, bu nedenle herhangi bir mantık seviye dönüştürücü kullanmadan Arduino veya herhangi bir 5V mantık mikrodenetleyicisine kolayca bağlayabilirsiniz.
Modül, programlanabilir çıkış gücünü destekler. 0 dBm, -6 dBm, -12 dBm veya -18 dBm’dir ve iletim sırasında tek bir LED’den bile daha düşük olan 0 dBm’de inanılmaz şekilde 12 mA civarında akım tüketir. Hepsinden iyisi, bekleme modunda 26 µA ve güç kapatma modunda 900 nA akım tüketir. Bu nedenle, düşük güçlü uygulamalar için biçilmiş kaftandır.
Haberleşme Protokolü (SPI Arayüzü)
nRF24L01 alıcı-verici modülü, maksimum 10Mbps veri hızıyla 4 pinli Seri Çevresel Arabirim (SPI) üzerinden iletişim kurar. Frekans kanalı (125 seçilebilir kanal), çıkış gücü (0 dBm, -6 dBm, -12 dBm veya -18 dBm) ve veri hızı (250kbps, 1Mbps veya 2Mbps) gibi tüm parametreler SPI arayüzü üzerinden yapılandırılabilir.
SPI veri yolu bir Master ve Slave kavramını kullanır, en yaygın uygulamalarda mikrodenetleyicimiz Master’dır ve nRF24L01 alıcı-verici modülü Slave’dir. I2C veri yolunun aksine, SPI veri yolundaki bağlantı sayısı sınırlıdır. Örnek vermek gerekirse, Arduino Uno’da maksimum iki SPI bağlantı birimi, yani iki nRF24L01 alıcı-verici modülü kullanabilirsiniz.
Özellik Listesi
Frekans Aralığı | 2.4GHz ISM |
Hava Veri Hızı(maks.) | 2 Mb/s |
Modülasyon | GFSK |
Çıkış Gücü(maks.) | 0 dBm |
Çalışma Gerilimi | 1.9V – 3.6V |
Çalışma Akımı(maks.) | 13.5mA |
Bekleme Akımı | 26µA |
Mantık Pinleri | 5V Toleranslı |
İletişim Menzili | 800m(görüş alanı) |
nRF24L01 Modelleri
nRF24L01 entegresini temel alan çeşitli modüller mevcuttur. Aşağıda yaygın olarak kullanılan modeller bulunmaktadır.
nRF24L01 / nRF24L01+
İlk sürüm yerleşik anten kullanır. Bu, modülün daha kompakt bir versiyon olmasına olanak sağlar. Bununla birlikte, daha küçük anten aynı zamanda daha düşük bir iletim aralığı anlamına gelir. Bu versiyon ile 100 metre mesafeden iletişim kurabilirsiniz. Tabii ki bu açık bir alanda açık havada geçerlidir. İç mekanlarda, özellikle duvarlardan geçen menziliniz biraz zayıflayacaktır.
nRF24L01+ PA LNA
İkinci versiyon, bir SMA konektörü ve bir duck anten ile birlikte gelir, ancak gerçek fark bu değildir. Gerçek fark, PA, LNA ve iletme-alma anahtarlama devresini entegre eden özel bir RFX2401C entegresi ile gelmesidir. Bir duck anteni ile birlikte bu menzil genişletici çip, modülün yaklaşık 1000 m’lik önemli ölçüde daha büyük bir iletim menzili elde etmesine yardımcı olur.
PA LNA Nedir?
PA, Güç Amplifikatörü(Power Amplificator) anlamına gelir. Yalnızca nRF24L01+ çipinden iletilen sinyalin gücünü artırır. LNA ise Low-Noise Amplifier anlamına gelir.
LNA’nın işlevi, antenden (genellikle mikrovolt düzeyinde veya -100 dBm’nin altında) son derece zayıf ve belirsiz sinyali almak ve onu daha kullanışlı bir düzeye yükseltmektir (genellikle yaklaşık 0,5 ila 1V)
Alma yolunun düşük gürültülü yükselticisi (LNA) ve iletim yolunun güç yükselticisi (PA), iki sinyali ayıran ve nispeten güçlü PA çıkışının hassas LNA girişini aşırı yüklemesini önleyen bir dupleksleyici aracılığıyla antene bağlanır.
Hatırlatma
Bu fark dışında, her iki modül de bir biri ile uyumludur. Yani, projenizde bu modülleri ayrı ayrı kullanabilirsiniz.
nRF24L01 Çalışma Mantığı
nRF24L012 alıcı-verici modülü, Kanal”Channel” adı verilen belirli bir frekansta veri iletir ve alır. Ayrıca iki veya daha fazla alıcı-verici modülünün birbiriyle haberleşebilmesi için aynı kanalda olmaları gerekir. Bu kanal 2.4 GHz ISM bandındaki herhangi bir frekans olabilir veya daha kesin olmak gerekirse 2.400 ila 2.525 GHz (2400 ila 2525 MHz) arasında olabilir.
Her kanal 1 MHz’den daha az bir bant genişliği kaplar. Bu bize 1MHz aralıklı 125 olası kanal verir. Böylece modül, tek bir yerde 125 bağımsız çalışan modemden oluşan bir ağa sahip olma imkanı veren 125 farklı kanalı kullanabilir.
Kanal, 250 kbps ve 1 Mbps veri hızında 1 MHz’den daha az bant genişliği kaplar. Ancak 2Mbps hava veri hızında, 2MHz bant genişliği işgal edilir (RF kanal frekans ayarının çözünürlüğünden daha geniş). Bu nedenle, kanalların çakışmamasını sağlamak ve 2Mbps modunda çapraz konuşmayı azaltmak için iki kanal arasında 2MHz boşluk bırakmanız gerekir.
Seçilen kanalın RF kanal frekansı aşağıdaki formüle göre ayarlanır:
Frekans(seçilen) = 2400 + CH(seçilen)
Örneğin veri iletimi için kanal olarak 112’yi seçersek, kanalın RF kanal frekansı 2512MHz (2400 + 112) olacaktır.
nRF24L01 Çoklu Alıcı Ağı
nRF24L01+, Multiceiver adlı bir özelliğe sahiptir. Çoklu Verici Tek Alıcının(Multiple Transmitters Single Receiver) kısaltmasıdır. Her bir RF kanalı mantıksal olarak Data Pipes(veri hatları )adı verilen 6 paralel veri kanalına bölünmüştür. Başka bir deyişle, bir data pipe(veri hattı), fiziksel RF kanalındaki mantıksal bir kanaldır. Her veri hattının kendi fiziksel adresi (Data Pipe Address) vardır ve yapılandırılabilir. Örnek olarak:
Yukarıdaki diyagramı basitleştirmek için, birincil alıcının(PRX), aynı anda 6 farklı verici düğümden bilgi toplayan bir hub alıcısı gibi davrandığını hayal edin. Hub alıcısı her an dinlemeyi durdurabilir ve bir verici görevi görür. Ancak bu, bir seferde yalnızca bir pipe/node’da yapılabilir.
nRF24L01 Enhanced ShockBurst Protokolü
nRF24L01 alıcı-verici modülü, Enhanced ShockBurst olarak bilinen bir paket yapısı kullanır. Bu basit paket yapısı, aşağıda gösterilen 5 farklı alana bölünmüştür.
Orijinal ShockBurst yapısı yalnızca Başlangıç(Preamble), Adres(Address), Yük(Payload) ve Döngüsel Artıklık Kontrolü (CRC) alanlarından oluşur. Enhanced ShockBurst, yeni tanıtılan Paket Kontrol Alanı (PCF) kullanarak daha gelişmiş iletişim için daha fazla işlevsellik getirir.
Bu yeni yapı birçok nedenden dolayı kullanışlıdır. İlk olarak, faydalı yük uzunluk belirteciyle değişken uzunluktaki faydalı yüklere izin verir, yani faydalı yüklerin 1 ila 32 bayt arasında değişebileceği anlamına gelir.
İkinci olarak, gönderilen her pakete bir paket kimliği sağlar, bu da alıcı cihazın bir mesajın yeni olup olmadığını veya yeniden iletilip iletilmediğine (ve dolayısıyla göz ardı edilebilir) karar vermesine olanak tanır.
Son olarak ve en önemlisi, her mesaj başka bir cihaz tarafından alındığında gönderilmek üzere bir onay talep edebilir.
nRF24L01 Otomatik Paket İşleme
İki nRF24L01 modülünün birbiriyle nasıl iletişim kurduğunu anlamak için aşağıdaki senaryolara bakalım:
1. Senaryo: Başarılı İletişim
Onay(ACK) ve interrupt(kesme) işlemleri olan bu iletişim bağlantısı, başarılı bir senaryo örneğidir. Burada verici, alıcıya bir veri paketi göndererek iletişimi başlatır. Paketin tamamı iletildikten sonra, alındı paketinin (ACK paketi) alınması için (yaklaşık 130 µs) bekler. Alıcı paketi aldığında, vericiye ACK paketi gönderir. ACK paketini aldıktan sonra verici, yeni verilerin mevcut olduğunu belirtmek için kesme (IRQ) sinyalini onaylar.
2. Senaryo: Başarısız İletişim
Veri paketi kaybıyla iletişim. Bu, iletilen paketin kaybolması nedeniyle yeniden iletimin gerekli olduğu olumsuz bir senaryodur. Paket iletildikten sonra verici, ACK paketinin alınmasını bekler. Verici, Otomatik Yeniden İletim-Gecikme (ARD) süresi içinde almazsa, paket yeniden iletilir. Yeniden iletilen paket alıcı tarafından alındığında, ACK paketi iletilir ve bu da vericide kesme(interrupt) oluşturur.
3. Senaryo: Başarısız İletişim
Onay(ACK) paketi kaybıyla iletişim. ACK paketinin kaybolması nedeniyle yeniden iletimin gerekli olduğu yine olumsuz bir senaryodur. Burada alıcı paketi ilk denemede alsa bile, ACK paketinin kaybı nedeniyle verici, alıcının paketi hiç almadığını düşünür. Böylece, Otomatik Yeniden İletim-Gecikme süresi bittikten sonra paketi yeniden iletir. Şimdi alıcı, öncekiyle aynı paket kimliğini içeren paketi aldığında, onu atar ve tekrar ACK paketini gönderir.
Tüm bu paket işleme, mikro denetleyicinin katılımı olmadan nRF24L01 çipi tarafından otomatik olarak yapılır.
nRF24L01 Pin Diyagramı
nRF24L01 alıcı-verici modülünün pin çıkışına göz atalım.
İki farklı model içinde pin diyagramı tamamen aynıdır.
GND | Toprak Pinidir. Genellikle bu pin bir kare içine alarak işaretlenir, böylece diğer pimleri tanımlamak için referans olarak kullanılabilir. |
VCC | Modül için güç sağlanan pindir. 1,9 ila 3,9 volt arasında herhangi bir değer olabilir. Arduino’nuzda sadece 3.3V çıkışa bağlayabilirsiniz. 5V çıkışına kesinlikle bağlamayın. |
CE | Aktif-YÜKSEK bir pindir. Seçildiğinde, nRF24L01, o anda hangi modda olduğuna bağlı olarak ya gönderir ya da alır. |
CSN | Aktif-DÜŞÜK bir pindir ve normalde YÜKSEK tutulur. Bu pin DÜŞÜK olduğunda, nRF24L01 veri için SPI portunu dinlemeye başlar ve buna göre işler. |
SCK | SPI veri yolu Master’ı tarafından sağlanan saat darbelerini kabul eder. |
MOSI | nRF24L01’e SPI girişidir. |
MISO | nRF24L01’den SPI çıkışıdır. |
IRQ | İşlenecek yeni veriler olduğunda master’ı uyarabilen bir kesme pinidir. |
Uyarı
Bazı modellerin arkasında bulunan pin isimleri, ters basılabiliyor. Her hangi bir kısa devre ya da ters bağlantı modülü tamamen bozabilir. Eğer pin isimlendirmesini modülünüze bakarak yapıyorsanız mutlaka GND pinini multimetrenin “diyot” ayarı ile kontrol edin.
Önerilen içerik: Multimetre Nasıl Kullanılır?
nRF24L01 Sorunları
Ucuz ve yüksek performanslı olmasına rağmen nRF24L01 modülü kullanması biraz keyifsiz bir kablosuz iletişim modülüdür..
- Öncelikle voltaj kaynağı kesinlikle gürültüsüz olmalıdır, ufak bir gürültüden bile anında etkilenip çalışmayı bırakabiliyor.
- Çalışma voltaj aralığı kafa karıştırabilir: Sadece 1.9V – 3.9V arasında çalışabilir. Harici voltajlar modülü doğrudan bozar.
- Kodlanan program optimize edilmezse bağlantı sürekli olarak kopabilir.
Sorunların Çözümleri ve Menzil İyileştirmesi
Genellikle bütün sorunlar güç kaynağından kaynaklanır. Bu sorunlara örnek olarak, menzilin düşük olması, bağlantının kopması, güç kaynağının gürültülü olması, hatta yanlış voltaj çıkışından kaynaklanan doğrudan bozulmaları olarak örnek verebiliriz.
Güç Kaynağı Gürültüsünü Azaltmak
Bir Radyo Frekansı (RF) sinyali üreten bir RF devresi, güç kaynağı gürültüsüne karşı çok hassastır. Kontrol edilmezse, güç kaynağı gürültüsü alabileceğiniz menzili önemli ölçüde azaltabilir.
Güç kaynağı bağımsız bir pil değilse, güç üretimiyle ilişkili gürültü olma olasılığı yüksektir. Bu gürültünün sisteme girmesini önlemek için, güç kaynağı hattına fiziksel olarak nRF24L01+ modülüne mümkün olduğunca yakın bir yere 10 µf filtre kondansatörü yerleştirilmesi tavsiye edilir.
Bunu aşmanın en kolay yolu, nRF24L01 için çok ucuz bir Adaptör Modülü kullanmaktır. Ayrıca bu modül mesafe sorunlarınıda çözecektir.
Adaptör modülünde, nRF24L01 modülünüzü takmanıza izin veren 8 pinli bir dişi konektör bulunur. Hem daha önce tartıştığımız modülü, biri entegre antenli ve diğeri harici antenli (PA/LNA) barındırabilir. Ayrıca SPI ve Interrup bağlantıları için 6 pinli erkek konnektör ve güç girişi için 2 pinli konnektöre sahiptir.
Adaptör modülünün kendi 3,3 volt voltaj regülatörü ve bir dizi filtre kapasitörü vardır, böylece 5 voltluk bir güç kaynağı ile çalıştırabilirsiniz.
Menzil İyileştirmesi
Bir kablosuz iletişim sistemi için önemli bir parametre iletişim aralığıdır. Çoğu durumda, bir RF çözümü seçiminde belirleyici faktör budur. Öyleyse, modülümüz için daha iyi bir menzil elde etmek için neler yapabileceğimizi bakalım.
Kanal Frekansının Değiştirilmesi
Bir RF devresi için başka bir potansiyel gürültü kaynağı, özellikle aynı kanalda ayarlanmış komşu ağlarınız veya diğer elektronik cihazlardan gelen parazit varsa, dış ortamdır.
Bu sinyallerin sorunlara neden olmasını önlemek için nRF24L01 modülünüzün en yüksek 25 kanalını kullanmanızı öneririz. Bunun nedeni, WiFi ağlarının alt kanalların çoğunu kullanmasıdır.
Veri Hızını Düşürmek
nRF24L01, -94dBm olan 250Kbps hızında en yüksek alıcı hassasiyetini sunar. Ancak 2MBps veri hızında alıcı hassasiyeti -82dBm’ye düşer. Konuya biraz hakimseniz, 250Kbps’deki alıcının 2Mbps’den yaklaşık 10 kat daha hassas olduğunu bilirsiniz. Bu, alıcının 10 kat zayıf bir sinyalin kodunu çözebileceği anlamına gelir.
RX Hassasiyeti Nedir?
Alıcı hassasiyeti, alıcının bir RF sinyalini algılayabileceği en düşük güç seviyesidir. Negatif sayının mutlak değeri ne kadar büyük olursa, alıcı duyarlılığı o kadar iyi olur. Örneğin, −94 dBm’lik bir alıcı hassasiyeti, −82 dBm’lik 12 dB’lik bir alıcı hassasiyetinden daha iyidir.
Bu nedenle, veri hızını düşürmek, elde edebileceğiniz menzili önemli ölçüde iyileştirebilir. Ayrıca projelerin çoğu için 250Kbps hız fazlasıyla yeterlidir.
Çıkış Gücünü Arttırın
Maksimum çıkış gücünün ayarlanması da iletişim aralığını iyileştirebilir. nRF24L01, çıkış gücünden birini seçmenizi sağlar; 0 dBm, -6 dBm, -12 dBm veya -18 dBm. 0 dBm çıkış gücünün seçilmesi, daha güçlü sinyal gönderir.
nRF24L01 Örnek Program
Kullanabileceğeniz iki farklı kütüphane mevcut, bunlardan biri RF24 diğeri ise RadioHead. Modülden modüle bazen çalışma farklılığı göstersede, RF24 kütüphanesi RadioHead kütüphanesine göre daha iyi çalışmakta. İki kütüphane içinde örnek kodları paylaşacağız, istediğinizi kullanabilirsiniz.
Örnekler için farklı geliştirme kartları ve bağlantı noktaları kullanılacaktır, kendi kartınıza göre bağlantıları ayarlamayı unutmayın!
- RF24 kütüphanesini indirmek için buraya tıklayın. Bu kütüphaneyi doğrudan Arduino IDE Library Manager’dan da kurabilirsiniz. “rf24” i arayın ve “TMRh20, Avamander” ile olanı bulun ve kurun.
- RadioHead kütüphanesini indirmek için buraya tıklayın. / Resmi kütüphane sayfası.
Kütüphane kurulumunda zorluk çekiyorsanız buradaki yazımızdan yardım alabilirsiniz.
Gerekli Malzemeler
- nRF24L01 x 2
- nRF24L01 Adaptörü x 2 ya da 2 adet 10 uF kondansatör
- Geliştirme Kartı(Arduino) x 2
- Jumper/Bağlantı Kabloları
- İkinci örnek için ekstra Buton ve LED
RF24 Kütüphaneli Örnek
Bağlantı Şeması
Alıcı(Receiver) Kodu
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN pinleri const byte address[6] = "00001"; //verinin akacağı adres, bu adres alıcı ve vericide aynı olmalıdır. void setup() { Serial.begin(9600); radio.begin(); radio.openReadingPipe(0, address); radio.setPALevel(RF24_PA_MIN); radio.startListening(); } void loop() { if (radio.available()) { char text[32] = ""; radio.read(&text, sizeof(text)); Serial.println(text); } }
Verici(Transmitter) Kodu
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> RF24 radio(7, 8); // CE, CSN pinleri const byte address[6] = "00001"; //verinin akacağı adres, bu adres alıcı ve vericide aynı olmalıdır. void setup() { radio.begin(); radio.openWritingPipe(address); radio.setPALevel(RF24_PA_MIN); //burayı menzil-veri boyutu gibi koşulları göz önünde bulundurup değiştirebilirsiniz. radio.stopListening(); } void loop() { const char text[] = "devreyakan.com nRF24L01 Testi"; radio.write(&text, sizeof(text)); delay(1000); }
Not: radio.setPALevel(RF24_PA_MIN); kısmı bazı modüllerde sorun çıkarmakta, eğer veri transferi gerçekleşmiyorsa burayı // ile yorum yaparak deneyebilirsiniz.
Kod Açıklaması
RF24 radio(7, 8); // CE, CSN
SPI iletişimini sağlayacağımız pinleri belirtiyoruz.
const byte address[6] = "00001";
Adresi temsil edecek bir bayt dizisi veya iki modülün iletişim kuracağı pipe’ı oluşturmamız gerekiyor. Bu adresin değerini herhangi bir 5 harfli dizeye değiştirebiliriz ve bu, hangi alıcıyla konuşacağımızı seçmemizi sağlar, yani bizim durumumuzda hem alıcı hem de vericide aynı adrese sahip olacak
radio.openWritingPipe(address);
radio.openReadingPipe(0, address);
Diğer tarafta alıcıda radio.setReadingPipe() fonksiyonunu kullanarak aynı adresi ayarlıyoruz ve bu şekilde iki modül arasındaki iletişimi sağlıyoruz..
radio.setPALevel(RF24_PA_MIN);
radio.setPALevel() işlevini kullanarak Power Amplifier seviyesini ayarlıyoruz, bizim durumumuzda modüller birbirine çok yakın olduğu için bunu minimuma ayarlayacağız. Yukarıda belirttiğimiz gibi sorun yaşıyorsanız bu kısmı iptal edebilirsiniz.
Daha yüksek bir PA seviyesi kullanılıyorsa, çalışırken daha kararlı voltaja sahip olmaları için modüllerin GND ve 3.3V’si arasında bir baypas kapasitörlerinin kullanılması tavsiye edilir. Ya da adaptör kullanabilirsiniz.
Daha sonra modülü verici olarak ayarlayan radio.stopListening() fonksiyonumuz ve diğer tarafta modülü alıcı olarak ayarlayan radio.startListening() fonksiyonumuz var.
radio.stopListening();
radio.startListening();
Döngü bölümünde, vericide, “devreyakan nRF24L01 Testi” mesajını atadığımız bir dizi karakter oluşturuyoruz. Radio.write() işlevini kullanarak bu mesajı alıcıya göndereceğiz. Buradaki ilk argüman, gönderilmesini istediğimiz değişkendir.
void loop() {
const char text[] = "devreyakan nRF24L01 Testi";
radio.write(&text, sizeof(text));
delay(1000);
}
Değişken adından önce “&” kullanarak aslında gönderilmesini istediğimiz verileri saklayan değişkenin bir göstergesini belirledik ve ikinci argümanı kullanarak o değişkenden almak istediğimiz bayt sayısını belirledik. Bu durumda sizeof() işlevi “metin” dizgilerinin tüm baytlarını alır.
radio.write() işlevini kullanarak bir seferde maksimum 32 bayt gönderebiliriz.
Diğer tarafta, alıcıda, loop bölümünde radio.available() fonksiyonunu kullanarak alınacak veri olup olmadığını kontrol ediyoruz. Bu doğruysa, önce gelen verileri kaydedeceğimiz “text” adı verilen 32 öğeden oluşan bir dizi oluşturuyoruz.
void loop() {
if (radio.available()) {
char text[32] = "";
radio.read(&text, sizeof(text));
Serial.println(text);
}
}
Radion.read() işlevini kullanarak verileri okur ve “metin” değişkeninde saklarız. Sonunda sadece seri monitörde metin yazdırıyoruz. Böylece her iki programı da yüklediğimizde, alıcıdaki seri monitörü çalıştırabiliriz ve her saniye “devreyakan nRF24L01 Testi” mesajının yazdırıldığını fark edeceğiz.
RadioHead Kütüphaneli Örnek
Bağlantı Şeması
Alıcı ve Verici modülü için de bağlantı şeması tamamen aynıdır.
Alıcı Kodu
// nrf24 alıcı #include <SPI.h> #include <RH_NRF24.h> RH_NRF24 nrf24; void setup() { Serial.begin(9600); while (!Serial) if (!nrf24.init()) Serial.println("nrf24 bagli mi?"); if (!nrf24.setChannel(1)) Serial.println("kanal secmede hata olustu"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF hatali"); } void loop() { if (nrf24.available()) { // mesaj geldi mi kontrolu uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.recv(buf, &len)) { Serial.print("istek geldi: "); Serial.println((char*)buf); // Send a reply uint8_t data[] = "Baglanti saglandi"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); Serial.println("cevap gonderin"); } else { Serial.println("cevap yok"); } } }
Verici Kodu
// nrf24 verici #include <SPI.h> #include <RH_NRF24.h> RH_NRF24 nrf24; void setup() { Serial.begin(9600); while (!Serial) if (!nrf24.init()) Serial.println("nrf24 bagli mi?"); if (!nrf24.setChannel(1)) Serial.println("kanal secmede hata olustu"); if (!nrf24.setRF(RH_NRF24::DataRate2Mbps, RH_NRF24::TransmitPower0dBm)) Serial.println("setRF hatali"); } void loop() { Serial.println("Aliciya gonderiliyor"); uint8_t data[] = "devreyakan"; nrf24.send(data, sizeof(data)); nrf24.waitPacketSent(); // onay bekleme kısmı uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN]; uint8_t len = sizeof(buf); if (nrf24.waitAvailableTimeout(500)) { // geri donus kısmı if (nrf24.recv(buf, &len)) { Serial.print("cevap geldi: "); Serial.println((char*)buf); } else { Serial.println("hata olustu"); } } else { Serial.println("Cevap yok, alici calisiyor mu?"); } delay(400); }
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.