İki Bluetooth ile Arduino’ lar Arası İletişim

Merhabalar…

Bu konuda iki HC-05 (Bluetooth modül) arası iletişime değineceğiz. Öncelikle bu modüllerin nasıl çalıştığına bakalım.

 

 

 

 

 

 

Bluetooth cihazlar iletişimi eşleşerek sağlarlar. Yani iletişimi kurmadan önce farklı bir bluetooth cihaz ile eşleşmiş olmanız gerekir. Bu eşleşme master ve slave cihazlar arasında gerçekleşir.

Master modüller bağlantıları başlatabilirler. Bağlantı başlatabilmeleri için 10m alan içerisinde slave modül bulunması gerekir. Çünkü master modülün bağlantı kurma çağrısına sadece slave modüller cevap verebilir.

HC serisi bluetooth modüllerden HC-05 hem master hemde slave olarak kullanabilir.Ancak bu işlem için bluetooth modüle bir ayar yapılması gerekir. Ayar yapabilmek  için AT COMMANDS isimli komutlar kullanılır. Bu komutların yardımı ile Bluetooth modülün master ve slave olma durumu değiştirilebilir.

At Komutları ile bluetooth modülün master-slave ayarı değiştirilebileceği gibi modül ismi, Baud Rate, modül şifresi gibi ayarlar da değiştirilebilir.

Eşleşme sağlandıktan sonra veri transferi işlemi için kullandığınız denetleyici üzerindeki seri iletişim kullanılabilir. Bu iletişim seri iletişim standartlarına uygun olarak yapılmalıdır. Örneğin Arduino kullanıyorsak digital 0 ve 1 pinleri Bluetooth üzerinde RX ve TX ‘e uygun olarak bağlanmalıdır. Daha sonra yazılım üzerinden seri haberleşmeyi başlatıp COM port üzerinden ide ile haberleşme yapılır gibi haberleşilebilir.

Şimdi Arduino ile Bluetooth AT komutlarını kullanmaya bakalım:

Öncelikle Arduino’ ya atmamız gereken yazılıma bakalım

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // RX, TX

void setup() {
  Serial.begin(9600);
  pinMode(9,OUTPUT); 
  digitalWrite(9,HIGH);
  Serial.println("Enter AT commands:");
  mySerial.begin(38400);
}

void loop()
{
  if (mySerial.available())
    Serial.write(mySerial.read());
  if (Serial.available())
    mySerial.write(Serial.read());
}

AT komutlarını kullanabilmek için gereken yazılım yukarıdaki gibidir. Bu yazılım da yaptığımız işlem seri monitörden girdiğimiz komutu Bluetooth modüle’ a yazmak ve Bluetooth modülden gelen cevabı Seri Mönitörde görmemizi sağlamaktır.

Burada dikkat edilmesi gereken Bluetooth Modülün 38400 baud rate’ de çalıştırılması gerektiğidir. Yoksa Bluetooth modülden istediğiniz yanıtları alamayabilirsiniz.

Bağlantı şemamızı şekildeki gibi kurmamız gerekir.

 

 

Bağlantınızın son hali bu şekilde olacaktır. Ancak 5V pinini Arduino’ ya güç verdikten sonra bağlarsanız olası hataları en aza indirgemiş olursunuz. Ayrıca eğer kullandığınız modülün üzerinde buton varsa 5V pinin bağlarken bu butonu basılı tutmalısınız. Aksi taktirde cihaz AT komutlar için hazır duruma gelmeyecektir. 

 Bluetooth modülünüzün AT komutların kullanımı için hazır hale geldiğini üzerindeki uyarı ışığından anlayabilirsiniz. Eğer ışığının 2′ şer sn aralıklara uzun uzun yanıp sönüyorsa bağlantınızı doğru yapmışsınız demektir.

Artık cihazımız hazır ve AT komutlarımızı uygulayabiliriz. Öncelikle bu komutların ne olduğuna bakalım:

AT : Cihaz bağlantıya hazır mı kontrol eder. “OK” ifadesi dönüyorsa bağlantıya hazırdır.
AT+NAME : Default ismi gösterir
AT+ADDR : Default adresi gösterir
AT+VERSION : Versiyonu Gösterir
AT+UART : Ayarlanmış olan Baud Rate’ yi gösterir
AT+ROLE: Master yada Slave olma durumunu gösterir(1=master/0=slave)
AT+RESET : Ayarları resetler ve AT moddan çıkar
AT+ORGL : Fabrika ayarlarına geri döner
AT+PSWD: Default parolayı gösterir

AT+CMODE: Eşleşme modunu gösterir.

Bu komutları bu şekilde kullandığınız zaman size “OK” Değeri ve girilen parametrenin sonucunu döndürür. Eğer siz bu değeri değiştirmek isterseniz bu şekilde kullanılması gerekir:

AT+UART=9600,0,0  //Baud rateyi değiştirir

AT+ROLE=1      //Master - Slave durumunu değiştirir(Master Ayarlar)

AT+CMODE=1    //Eşleşme modunu otomatik yapar

Daha önce de belirttiğimiz gibi iki Bluetooth modülün eşleşebilmesi için birinin master diğerinin slave olması gerekmekte. Bu ayarı AT komutları yardımı ile rahatlıkla gerçekleştirmek mümkün. Eşleşme sağlandıktan sonra haberleşme çift yönlü olarak gerçekleştirilebilir.

Ayrıca AT komutları gönderilirken Serial monitör vb. araçta “Both NL & CR” seçeneği seçilmelidir. Bu seçenek farklı terminallerde farklı şekilde olabilir. Ama hepsi aynı işe yarar. Siz komutu yazıp Enter tuşuna bastığınızda komutun sonuna ‘\r\n’ ekleyerek gönderir. Bu seçimi yapmazsanız cihazdan “OK” yanıtı alamazsınız.

Şimdi bununla ilgili basit bi uygulama yapalım. Farklı iki Arduinu’ yu Bluetooth modüller yardımı ile kablosuz haberleştirelim. Bu haberleşmenin gerçekleştiğini gözlemleyebilmek için de 2 led kullanalım. Cihazlardan biri diğerine 1 göndersin. Bu değeri okuyan cihaz bağladığımız ledi pwm ile yavaş yavaş yakıp söndürsün. Bu işlemden sonra diğer cihaza 2 göndersin. Bu cihazda bağlı ledi pwm ile yakıp söndürsün ve bu işlem böylece devam etsin.

Bunu iki Arduino aynı yazılımı yükleyerek yapalım:

#include <SoftwareSerial.h>

SoftwareSerial BtSerial(10, 11);

char gelenKarakter;  //Bluetooth' dan okunan değer
char *gonderilenKarakter;    //Bluetooth' dan gönderilen değer
int ledPin1 = 5;    //1. Arduino ya bağlı led
int ledPin2 = 6;    //2. Arduino ya bağlı led

void setup()
{
	pinMode(ledPin1, OUTPUT);
	pinMode(ledPin2, OUTPUT);
	Serial.begin(9600);
	BtSerial.begin(9600);
}

void loop()
{
	if(BtSerial.available() > 0)
	{
                //haberlşeme varsa kuyruktaki verileri değişkene yazdık
		gelenKarakter = BtSerial.read();
                
                //gelen değere göre ledlerimizi yakıp seri porta gelen değeri ve gönderilen
                //değerleri yazdırdık
		if(gelenKarakter == '1')
		{
			Serial.print("Alınan Karakter: ");
			Serial.println(gelenKarakter);
			gonderilenKarakter = "2";
			for(int i = 0; i < 255; i = i + 2)
			{
				analogWrite(ledPin1, i);
				delay(15);
			}
			digitalWrite(ledPin1, LOW);
			BtSerial.write(gonderilenKarakter);
			Serial.print("Gonderilen Karkater: ");
			Serial.println(gonderilenKarakter);
		}else if(gelenKarakter == '2')
		{
			Serial.print("Alınan Karakter: ");
			Serial.println(gelenKarakter);
			gonderilenKarakter = "1";
			for(int i = 0; i < 255; i = i + 2)
			{
				analogWrite(ledPin2, i);
				delay(15);
			}
			digitalWrite(ledPin2, LOW);
			BtSerial.write("1");
			Serial.print("Gonderilen Karkater: ");
			Serial.println(gonderilenKarakter);
		}
	}

        //Döngünün başlaması için gerekli değeri yolladık
	if(Serial.available() > 0)
	{
		BtSerial.write(Serial.read());
	}
}

 

Bu yazılımı iki arduino’ ya yüklediğiniz zaman cihazlar ilk verinin gelmesini birbirinden bekleyecektir. Eğer bağlantınızı aşağıdaki şekildeki gibi yapmışsanız soldaki Arduino ile Seri Mönitörden 1 göndererek bağlantınızı bağlatabilirsiniz.

Bağlantı şemamız bu şekilde olmalıdır

 

Untitled Sketch 2_bb

 

Teşekkürler

69 Comments

Add a Comment

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir