Arduino ile kablosuz veri transferinde kullanılan bu modül için bu yazı devamında arduino nrf24l01 kullanımı detayları ve çift yönlü olarak karşılıklı kesin veri iletimine ulaşabileceksiniz. Uygun anten kullanımı ile metrelerce hatta kilometre mesafesinde komut gerçekleştirebilirsiniz.
Arduino NRF24L01 Kullanımı Çift Yönlü Garantili Haberleşme
Kablosuz veri iletiminde transferde sorun olması gibi sorunlar nedeniyle bazen stabil çalışma söz konusu olmuyor. Bunun önüne geçmek ve kontrol sağlamak için en azından mesajın karşıya gidip gitmediğini kontrol eden ve bize ileten bir kodlama ile çözüm bulmaya çalıştım.
Bu yazımda hem çift taraflı yani alıcı verici olarak tek yönlü değil iki arduino’nun da birbirine mesaj gönderebildiği yazılımı sizlerle paylaşacağım. Böylece komut gönderdiğimizde karşı tarafa komut geldi mi sorup cevap alabileceğimiz bir yazılım olacak.
Denemelerini yaptım ve sizlerle görseller ile paylaşıyorum. Aklınıza takılanları yazı devamındaki yorum alanından sorabilirsiniz.
Kodlamanın iç kısmında açıklamaları görebilirsiniz bunun yanında detaylı olarak hangi kod kısmının ne işe yaradığını da size anlatmaya çalışacağım.
NRF24L01 Çift Yönlü Haberleşme
Verici Kodları:
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define button 4 RF24 radio(7, 8); // CE, CSN const byte addresses[][6] = {"00001", "00002"}; int butonDurum = 0; int rapor=0, kontrol=0, gelen=0; void setup() { Serial.begin(9600); pinMode(button, INPUT); radio.begin(); radio.openWritingPipe(addresses[0]); // 00002 radio.openReadingPipe(1, addresses[1]); // 00001 radio.setPALevel(RF24_PA_MIN); } void loop() { delay(5); radio.stopListening(); butonDurum = digitalRead(button); //Serial.print("buton durum="); //Serial.println(butonDurum); delay(75); if(butonDurum == HIGH){ rapor=1; gonder(); } if (kontrol ==1 ){ delay(5); radio.startListening(); if ( radio.available()) { while (radio.available()) { radio.read(&gelen, sizeof(gelen)); Serial.print("Gelen Mesaj= "); Serial.println(gelen); delay(100); } } if (gelen==1){ Serial.println("Komut İletildi. Led Yandı!"); kontrol=0; gelen=0; delay(10); } if (gelen==2){ Serial.println("Komut İletildi. Led SÖNDÜ!"); kontrol=0; gelen=0; delay(10); } } } void gonder(){ radio.stopListening(); radio.write(&rapor, sizeof(rapor)); Serial.print("Gönderilen Mesaj= "); Serial.println(rapor); kontrol=1; delay(5); }
Alıcı Kodları:
#include <SPI.h> #include <nRF24L01.h> #include <RF24.h> #define led 4 RF24 radio(7, 8); // CE, CSN const byte addresses[][6] = {"00001", "00002"}; int butonDurum = 0; int rapor=0, gelen=0; int ac=0; void setup() { Serial.begin(9600); pinMode(led, OUTPUT); digitalWrite(led, LOW); radio.begin(); radio.openWritingPipe(addresses[1]); // 00002 radio.openReadingPipe(1, addresses[0]); // 00001 radio.setPALevel(RF24_PA_MIN); } void loop() { delay(5); radio.startListening(); if ( radio.available()) { while (radio.available()) { radio.read(&rapor, sizeof(rapor)); Serial.print("butonDurum="); Serial.println(rapor); } } if (rapor==1){ Serial.println("Led yak mesajı geldi."); if(ac==0){ digitalWrite(led, HIGH); ac=1; gelen=1; led_yandi(); } else if(ac==1){ digitalWrite(led, LOW); ac=0; gelen=2; led_yandi(); } delay(50); } } void led_yandi(){ radio.stopListening(); radio.write(&gelen, sizeof(gelen)); delay(10); gelen=0; rapor=0; }
Günlük çalışmalarım ve paylaşımlarım için beni youtube ve instagramdan takip edebilirsiniz.