Arduino ile Bluetooth İletişimi
HC-05 ve HC-06 Bluetooth Modülleri

HC-05 ve HC-06, bluetooth protokolünü kullanarak kablosuz haberleşmeyi sağlayan bluetooth modülleridir. Arduino projelerine kablosuz bağlantı sağlamak için en yaygın kullanılan çözümlerden biri haline gelmiştir. Çok yönlülükleri ve uygun fiyatları sayesinde bu cihazlar; bilgisayarlar, akıllı telefonlar, robotik, ev otomasyonu ve diğer bluetooth özellikli cihazlarla kablosuz iletişim sağlayarak mikrodenetleyici tabanlı projelerde kullanılırlar.
HC-05 ve HC-06 bluetooth modülleri, bluetooth 2.0 protokolünü kullanır. Seri Port (UART) üzerinden herhangi bir mikro denetleyici ile (Örn: Arduino) iletişim sağlayabilir. İç mekân haberleşmeleri için geliştirilmiş bu modüller, 2.4Ghz ile 2.48Ghz haberleşme frekansı aralığını kullanır. Ortalama bluetooth modülleri arasındaki engelsiz mesafe aralığı yaklaşık olarak 10 metredir. İletişim hızı 300 baudrate ile 115200 baudrate arasında yapılandırılabilir.
HC05 ve HC06 bluetooth kartları fiziksel tip olarak birbirlerine benzerdir. Fakat HC-05 bluetooth modülü 6 pinli, HC-06 modülüyse 4 pinlidir. HC-05 modülü, kendisine gelen isteklere cevap verirken aynı anda başka bluetooth cihazlarına da bağlantı isteği gönderebilir. HC-06 ise sadece kendisine gelen istekleri kabul edebilir. Başka bluetooth kartına bağlantı isteği gönderemez. Bundan dolayı HC-05 modülüne master-slave modlu, HC-06 modülüne slave modlu denir.
HC-05 Bluetooth Modülü Özellikleri

Bluetooth Protokolü: Bluetooth 2.0+EDR(Gelişmiş Veri Hızı)
2.4GHz haberleşme frekansı - 10 Metre Haberleşme Mesafesi
Hassasiyet: -80 dBm
Çıkış Gücü: +4 dBm
Asenkron Hız: 2.1 MBps/160 KBps
Senkron Hız: 1 MBps/1 MBps
Güvenlik: Kimlik Doğrulama ve Şifreleme
Çalışma Gerilimi: 3,3V-6V(Önerilen 3.3V)
Akım: 50 mA
Boyutları: 43x16x7mm
HC-06 Bluetooth Modülü Özellikleri

Bluetooth Protokolü: Bluetooth 2.0+EDR(Gelişmiş Veri Hızı)
2.4GHz haberleşme frekansı - 10 Metre Haberleşme Mesafesi
Hassasiyet: -80 dBm
Çıkış Gücü: +4 dBm
Asenkron Hız: 2.1 MBps/160 KBps
Senkron Hız: 1 MBps/1 MBps
Güvenlik: Kimlik Doğrulama ve Şifreleme
Çalışma Gerilimi: 1.8-3.6V(Önerilen 3.3V)
Akım: 50 mA
Boyutları: 43x16x7mm
Önemli:
Modüller 3,3V ile 6 V arasında gerilimle çalışabiliyor. Ancak veri gönderme-alma pinleri 3,3 Volt ile çalıştığı için, 5 Volt temelinde çalışan Arduino Uno’ya bağlarken araya birkaç dirençten oluşan küçük bir gerilim bölücü devre kurmamız modülün sağlığı için önemlidir. Bu gerilim bölücü devre Rx pinine bağlanmaktadır. Tx pininden veriyi zaten bluetooth modülü gönderdiği için, bu pine gerilim bölücü direnç koymaya gerek yoktur. Bu durum konunun ilerleyen bölümlerinde şema ile anlatılacaktır.
Slave ve Master Modlar
HC-05 ve HC-06 bluetooth modüllerinde, Slave ve Master modlar, iki cihaz arasındaki iletişim için kullanılır. Slave modunda olan bluetooth modülüne dışarıdan bir bağlantı yapılabilirken, bu modül ile başka bir bluetooth cihazına ilk bağlantı yapılamaz. Master modunda olan bluetooth modülü ise dışardaki bir bluetooth cihazına doğrudan ilk bağlantıyı yapmanıza olanak sağlar. İki bluetooth modül birbiri ile haberleşirken, biri Slave diğeri Master modda olmalıdır. HC-06 sadece Slave modda çalışabildiği için HC-05’i Master olarak atamak yeterlidir.
Hangi Modülü Kullanmalıyım?
Basit projeler için basit bir Bluetooth modülüne ihtiyacınız varsa HC-06 mükemmel bir seçimdir. HC-06'nın kullanımı kolaydır ve bu onu yeni başlayanlar için harika bir seçim haline getirir. Kullanıcı dostu ve bütçe dostudur. Daha fazla esnekliğe ve gelişmiş özelliklere ihtiyacınız varsa HC-05 doğru seçenektir.
HC06 ve HC05 Bluetooth Modül Pinlerinde Yazan İfadelerin Anlamı
Satın aldığımız bluetooth modüllerin Tx ve Rx pinlerinde yazan ifadelerin anlam karışıklığına neden olmaması için aşağıdaki modül resmi üzerinde açıklama yapılmıştır.

HC-05 ve HC-06 Bluetooth Modüllerini AT Modu İle Yapılandırma
Bluetooth modüllerinde, modül adı, şifre, iletişim hızı vb. parametreleri değiştirmek için modülü aldığımız moda AT modu denir. AT, ATtention kelimesinin kısaltmasıdır. Bu kelime Türkçe'de dikkat anlamına gelmektedir. AT komutları UART haberleşmede kullanılan standart bir komut setidir. Bilgisayar, mikrokontroller veya çevre birimler arasında haberleşmeyi sağlar. AT komutları GSM modülleri, modemler ve bluetooth gibi haberleşme birimlerini yönetmek ve kontrol etmek için kullanılır. Cep telefonunuz ile bir arama veya SMS gönderme gibi işlem yapılırken GSM modülüne AT komutları gönderilir.
NOT: Arduino’nun CH340 çipli olması durumunda kütüphanesiz yani doğrudan modüle erişilemeyeceği ile ilgi bir kaynakta bilgi vardı. Fakat yapılan uygulamalarda CH340 çipli Arduino ile modüle doğrudan erişim sağlandı.
HC-06’yı AT moduna Alma
HC-06, başka bir cihazla eşleştirilmediğinde otomatik olarak AT moduna geçer. Modül AT moduna geçtiğinde üzerindeki LED yavaş yavaş, geçmediğinde hızlı hızlı yanıp söner. HC-06 Bluetooth modülleri standart olarak 9600 Baud oranı ile gelirler.
1. Kütüphanesiz(Doğrudan) Erişim İle AT Modu
Bu durumda modüle doğrudan erişim mümkündür. Bunun için; Arduino’ya void setup(); ve void loop(); fonksiyonları bulunan boş bir kod atılır. Arduino ile HC-06 kablo bağlantısı yapılır. Kablo bağlantısında; Arduino’nun Tx ve Rx pinleri sırasıyla HC-06’nın Tx ve Rx pinlerine bağlanır. AT modunda Arduino ile HC-06 9600 baud hızında haberleşir. Arduino seri port ekranı açılarak Baud hızı: 9600'e ve Satır Sonu: Hem NL(New Line) hem de CR(Carriage Return) olarak ayarlanır. Artık HC-06 modüle, AT komutları gönderebilir ve modülün ayarlarında değişiklik yapabiliriz.

2. USB-TTL Dönüştürücü İle Erişerek AT Modu
Bu yöntem de aynı kütüphanesiz erişimdeki gibi uygulanır. Modüle doğrudan erişim mümkündür. Kullanılan USB-TTL dönüştürücünün Windows tarafından görüldüğünden emin olunmalıdır. Bunun için aygıt yöneticisinden kontrol edilmelidir. Eğer USB-TTL dönüştürücüyü windows görmediyse sürücüsü yüklenmelidir. Yaptığımız uygulamada yandaki resimde görünen FT232R USB-TTL dönüştürücüyü kullandık. Windows bu dönüştürücüyü görmediği için sürücüsünü indirip yükledik. FT232R USB-TTL dönüştürücünün sürücüsü klasör içerisinde yer almaktadır.
Ardından FT232R ile HC-06’nın kablo bağlantısı yapılır. Kablo bağlantısında; FT232R’in Tx ve Rx pini sırasıyla HC-06’nın Rx ve Tx pinine bağlanır. Üzerindeki jumper ile FT232R 3,3V’da kullanmak üzere ayarlanır. Arduino’ya boş kod atıldıktan sonra HC-06 modülü USB-TTL dönüştürücü ile bilgisayara bağlanır ve ardından Arduino seri port ekranı açılarak HC-06’nın bağlı olduğu COM seçilir. Baud hızı: 9600'e ve Satır Sonu: Hem NL(New Line) hem de CR(Carriage Return) olarak ayarlanır. Artık Arduino seri port ekranından AT komutları gönderebilir ve modülün ayarlarında değişiklik yapabiliriz.
3. Kütüphane Kullanarak Erişim İle AT Modu
Diğer bir yol ise <SoftwareSerial.h> kütüphanesini kullanmaktır. Bu kütüphane ile her türlü Arduino kartıyla sorunsuz bir şekilde iletişim kurulabilir. Bu kütüphane dâhili olarak Arduino içerisinde yer almaktadır. Bu kütüphane zaten HC-06 bluetooth modülü ile Arduino arasında haberleşme için kullanılır. Aynı zamanda AT komutları ile modülün ayarlarında değişiklik de yapılabilir. Öncelikle modülü yapılandırmak için aşağıdaki kodlar Arduino’ya yüklenir. AT modunda Arduino ile HC-06, 9600 baud hızında haberleştiği için, bluetooth.begin(9600); yapılır. Ardından <SoftwareSerial.h> kütüphanesinin Arduino kartında Tx ve Rx olarak yapılandırılmasına izin verdiği pinlerden 2 tanesi Tx ve Rx pini olarak belirlenir(SoftwareSerial kütüphanesi her Arduino board’da aynı pinlerle kullanılamayabiliyor). Ardından Arduino ile HC-06 kablo bağlantısı yapılır. Kablo bağlantısında; Arduino’nun Tx ve Rx pinleri sırasıyla HC-06’nın Rx ve Tx pinlerine bağlanır.

#include <SoftwareSerial.h> // Yazılımsal Seri Port kütüphanesi
int RX = 7; // Yazılımsal Seri Port'un RX pini
int TX = 6; // Yazılımsal Seri Port'un TX pini
SoftwareSerial bluetooth(RX,TX); // Kütüphanemizi ayarlıyoruz
void setup() {
Serial.begin(9600); // Seri Port Ekranı bağlantısı başlatılıyor
bluetooth.begin(9600); // HC-06 Seri Port bağlantısı başlatılıyor
Serial.println("Hazır"); // Artık AT komutu göndermeye hazırız
}
void loop() {
if (bluetooth.available()){ // HC-06'dan gelen veri Seri Port Ekranı'na
Serial.write(bluetooth.read()); // yazılıyor
}
if (Serial.available()){ // Seri Port Ekranı'ndan gelen veri HC-06'ya
bluetooth.write(Serial.read()); // gönderiliyor
}
}
Ardından Arduino seri port ekranı açılır. Baud hızı: 9600'e ve Satır Sonu: Hem NL(New Line) hem de CR(Carriage Return) olarak ayarlanır. Artık Arduino seri port ekranından AT komutları gönderebilir ve modülün ayarlarında değişiklik yapabiliriz.
HC-05’i AT moduna Alma
HC-05’i AT moduna alma işlemleri de hemen hemen HC-06 ile aynıdır. Burada dikkat edilmesi gereken; Arduino’nun Rx ve Tx pinleri kullanılarak yapılan doğrudan erişimde, Arduino seri port ekranında baud hızını 38400 yapmak ya da kütüphane ile erişimde bluetooth.begin(38400); olarak ayarlamaktır. Çünkü AT modunda Arduino ile HC-05, 38400 baud hızı ile iletişim kurar. Bir diğer dikkat edilmesi gereken ise, bağlantıları yapmadan önce, yukarıda belirtildiği gibi, doğrudan ve kütüphane ile erişimdeki kodların atılmış olması ve modüle güç verilmeden önce modül üzerinde bulunan butona basılı tutup daha sonra modüle güç verilmesidir. HC-05 AT moduna bu şekilde alınır. Bu buton Key/EN pinini Vcc’ye bağlar. Key/EN pini modülün üzerinde bulunan çipin 34. pinidir. Butona basıldığında çipin 34. pini HIGH(3,3V), basılmadığında LOW(0V) olur. HC-05’i AT modundan çıkarmak için ise butona basmadan modüle enerji vermek yeterlidir.
Eğer modül USB-TTL dönüştürücü ile AT moduna alınacaksa, az önce bahsedildiği gibi modüle, TTL dönüştürücü üzerinden güç verilmeden önce modül üzerinde bulunan butona basılı tutup daha sonra güç verilmelidir.
Bu işlemlerden sonra bluetooth modülü üzerinde bulunan ledin yavaş yavaş yanıp sönmesi gerekmektedir. Hızlı hızlı yanıp sönüyorsa modül AT moduna geçememiştir. Bu durumda Vcc bağlantısını kesip devreyi kontrol etmek gerekir. Modülün Key/EN pininin, çipin 34. pinine lehimlenip lehimlenmediğini ve bu 34. pinin Vcc’ye gidip gitmediğini multimetre ile kontrol edebilirisiniz.
Son olarak Arduino seri port ekranı açılır. Doğrudan erişimde, Baud hızı: 34800’e, kütüphane ile erişimde Baud hızı: 9600’e ve her iki durumda da Satır Sonu: Hem NL(New Line) hem de CR(Carriage Return) olarak ayarlanır. Artık Arduino seri port ekranından AT komutları gönderebilir ve modülün ayarlarında değişiklik yapabiliriz.
Baud Hızıyla İlgili Önemli NOT:
HC-05; AT modunda Arduino ile 38400 baud hızda, veri modunda genellikle 9600 baud hızda iletişim kurar. HC-06; AT modunda Arduino ile 9600 baud hızda, veri modunda genellikle 9600 baud hızda iletişim kurar. HC-05 ve HC-06’yı AT moduna alma işleminde, kütüphane kullanılıyorsa, Serial.begin(baud); hangi baud hızında başlatıldıysa Arduino seri port ekranında o baud hızı seçilmelidir. Arduino’nun bluetooth ile iletişim kurduğu baud hızı ile seri port ekranı ile iletişim kurduğu baud hızını karıştırmayınız.
En Çok Kullanılan AT Modu Komutları
Bazı uygulama videolarında komut sonuna soru işareti koyulduğu, bazılarında koyulmadığı görüldü. Bizim uygulama yaptığımız HC-05 bluetooth modülünde, bilgi sormak için komut gönderdiğimizde komutun sonuna soru işareti koymamız gerekti. Modülde değişiklik yapmak için komut gönderdiğimizde soru işareti koymadık. Uygulama yaptığımız modülde password 6 haneli olması gerekiyor.
HC-05 AT Komutları Kullanımı:
1. AT : Modülün yanıt verip vermediğini kontrol etmemizi sağlar. Herhangi bir noktalama işareti koymadan seri port ekranına AT yazıp gönderdiğimizde OK cevabı geldiyse bluetooth modüle doğru şekilde bağlanmışız demektir.
2. AT+NAME? : Modülün mevcut adını görüntüler. Yeni isim vermek için AT+NAME = yeni isim yazmalıyız.
Örnek: AT+NAME: HC-05
3. AT+PSWD? : Modülün mevcut pin kodunu görüntüler. Genelde 1234‘tür. Fakat bizim kullandığımız HC-05’te pin kodu 6 haneli olmak zorunda. Pin değiştirmek için: AT+PSWD = pin_no yazmalıyız.
Örnek: AT+PSWD = 123456
4. AT+UART? : Modülün mevcut Baud hızını görüntüler. Kullanabileceğimiz seçenekler 1200, 2400, 4800, 9600(varsayılan), 19200, 38400, 57600 ve 115200’dür. Yeni Baud hızını belirlemek için AT+UART = baudoranı,0,0 yazmalıyız.
Örnek: AT+UART = 9600,0,0.
UYARI: Baud hızını değiştirdikten sonra modül ile olan iletişim kopacaktır. Programda ve seri port penceresinde yeni Baud hızını ayarlayıp yeniden bağlanmamız gerekir.
5. AT+ROLE? : Modülün mevcut rolünü görüntüler. Yani modülün master mı? slave mi? olduğu bilgisini verir. ROLE = 1 ise master, ROLE = 0 ise slave’dir. Rolü kendimiz belirlemek için: AT+ROLE=1 yaparsak Master, AT+ROLE=0 yaparsak Slave olur.
6. AT+VERSION? : Modülün versiyonunu görüntüler.
7. AT+STATE? : Modülün mevcut durumunu görüntüler. Bağlı değilse PAIRABLE olarak cevaplayacaktır.
8. AT+ADDR? : Modülün mevcut adresini görüntüler.
9. AT+RESET? : Modülü yeniden başlatır.
10. AT+ORGL? : Modülün isim ve pin dâhil tüm ayarlarını fabrika ayarlarına sıfırlar.
HC-05 AT modunda örnek seri port ekranı:

HC-06 AT Komutları Kullanımı:
1. AT : Modülün yanıt verip vermediğini kontrol etmemizi sağlar. Herhangi bir noktalama işareti koymadan seri port ekranına AT yazıp gönderdiğimizde OK cevabı geldiyse bluetooth modüle doğru şekilde bağlanmışız demektir.
2. AT+NAME : Modülün adını değiştirir. HC05'in aksine, varsayılan adı görüntülemeyiz. Yeni isim vermek için AT+NAMEyeni isim yazmalıyız. Yeni isim verdikten sonra modülün enerjisini kesip tekrar vermemiz gerekmektedir.
Örnek: AT+NAMEkablosuz
3. AT+PIN : Modülün mevcut pin kodunu görüntüler. Genelde 1234‘tür. Fakat bizim kullandığımız HC-06’da pin kodu 6 haneli olmak zorunda. Pin değiştirmek için: AT+PINpinno yazmalıyız. Yeni pin verdikten sonra modülün enerjisini kesip tekrar vermemiz gerekmektedir.
Örnek: AT+PIN123456
4. AT+BAUD : Modülün mevcut Baud hızını görüntüler. Kullanabileceğimiz seçenekler:
1-1200,
2- 2400
3- 4800,
4- 9600(varsayılan)
5- 19200,
6- 38400
7- 57600
8- 115200’dür.
Yeni Baud hızını belirlemek için AT+BAUDx yazmalıyız. X, yukarıdaki baud hızlarının sıra numarasıdır. Örneğin; Baud hızını 38400 yapmak için AT+BAUD6 yapmalıyız. Yeni baud hızı belirledikten sonra modülün enerjisini kesip tekrar vermemiz gerekmektedir.
UYARI: Baud hızını değiştirdikten sonra modül ile olan iletişim kopacaktır. Programda ve seri port penceresinde yeni Baud hızını ayarlayıp yeniden bağlanmamız gerekir.
5. AT+VERSION: Modülün versiyonunu görüntüler.
6. AT+ADDR : Modülün mevcut adresini görüntüler.
7. AT+RESET : Modülü yeniden başlatır.
8. AT+ORGL : Modülün isim ve pin dâhil tüm ayarlarını fabrika ayarlarına sıfırlar.
HC-06 AT modunda örnek seri port ekranı:

HC-06 ve HC-05 Bluetooth Modüllerinin Arduino ile Veri İletişimi
a- Kütüphane İle Modüle Erişim
Arduino’nun Tx ve Rx pinleri sırasıyla bluetooth modülün Rx ve Tx pinlerine bağlanır.

Modülün varsayılan adı genellikle “HC-06”, “HC-05” veya benzeri bir isimdir. Eşleştirme şifresi genellikle “1234” veya “0000” olur. AT modundan öğrenmek daha doğru olur.
Uygulamada kullandığımız HC-05’de; Ad: HC-05, Şifre: 123456 olarak ayarladık. HC-05 veri modunda genellikle 9600 baud hızda iletişim kurar. Fakat uygulamada kullandığımız HC-05 bluetooth modülünde baud hızını 115200 olarak belirlediğimizde iletişim kurabildik. Veri geldikten sonra sonuçları Serial.println(); ile sadece Arduino seri port ekranına yazdırdık. Bundan dolayı seri port ekranını açtığımızda baud hızını 9600 yaptık. Eğer sonuçları bluetooth.println(); ile yazdırsaydık bluetooth terminali ekranında görecektik.
Uygulamada kullandığımız HC-06’da; Ad: HC-06, Şifre: 123456 olarak ayarladık. HC-06 veri modunda genellikle 9600 baud hızda iletişim kurar.
Uygulamalarımızda SoftwareSerial.h kütüphanesini kullanacağız. SoftwareSerial.h kütüphanesi, Arduino’nun donanım seri portuna ek olarak yazılım tabanlı seri portlar oluşturmamızı sağlar. Bu kütüphane dâhili olarak Arduino içerisinde yer almaktadır. Arduino'nun mevcut Rx ve Tx pinleri dışındaki diğer dijital pinlerinde de seri iletişim sağlamak için geliştirilmiştir. Bunun için SoftwareSerial.h kütüphanesinin Arduino kartında Tx ve Rx olarak yapılandırılmasına izin verdiği pinlerden 2 tanesi Tx ve Rx pini olarak belirlenir(SoftwareSerial kütüphanesi her Arduino board’da aynı pinlerle kullanılamayabiliyor).
SoftwareSerial.h kütüphanesinin özellikleri:
Aynı anda hem veri alıp hem de iletemez.
Birden fazla yazılım seri portu kullanılıyorsa, aynı anda yalnızca bir tanesi veri alabilir.
Mega ve Mega 2560 kartlarındaki Rx için kullanılabilir pinler: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69). Leonardo ve Micro kartlarındaki RX için kullanılabilir pinler: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI).
Arduino veya Genuino 101 kartlarında şu anki maksimum Rx hızı 57600bps'dir.
Arduino veya Genuino 101 kartlarında Rx, dijital pin 13'te çalışmıyor.
Kütüphane kodları:
1. SoftwareSerial bluetooth(Rx,Tx,ters_lojik);
Rx ve Tx pinlerinin belirlendiği bluetooth isminde SoftwareSerial nesnesi tanımlandı. Burada Rx ve Tx pinleri <SoftwareSerial.h> kütüphanesinin Arduino kartında desteklediği pinlerden herhangi 2’si olabilir. Birden fazla SoftwareSerial nesnesi oluşturulabilir. Ancak belirli bir anda yalnızca biri etkin olabilir. Yani biz Arduino’ya birden fazla bluetooth modülü bağlayabilir ve her ikisi için de ayrı ayrı SoftwareSerial nesnesi oluşturabiliriz. Ancak belirli bir anda yalnızca biri etkin olabilir.
Rx : Seri verinin alınacağı pin.
Tx : Seri verinin iletileceği pin.
ters_lojik: Gelen bitlerin yönünü tersine çevirmek için kullanılır. Genelde boş bırakılır.
2. bluetooth.begin(baud);
Bluetooth seri port bağlantısını başlatır. baud değişkeni 300, 600, 1200, 2400, 4800, 9600(varsayılan), 19200, 38400, 57600 ve 115200 değerlerini alabilir.
3. bluetooth.available();
Bluetooth seri tamponunda bekleyen verinin bayt (karakter) sayısını verir. Programda bluetooth modülünden veri gelip gelmediğini kontrol etmek için kullanılır. Veri geldiyse 1 değerini, gelmediyse 0 değerini döndürür.
4. bluetooth.read();
Bluetooth modülünden gelen veriyi okur. Aynı anda yalnızca bir tane SoftwareSerial nesnesinin gelen veriyi alabileceğini unutmayın. (listen() fonksiyonuyla hangisini seçeceğinizi belirleyebilirsiniz)
Örnek: char veri= bluetooth.read();
5. bluetooth.print(); ve bluetooth.println();
Bluetooth modülüne veri gönderir. println() kullanılırsa veri gönderdikten sonra satır başı yapar.
Örnekler:
bluetooth.print(veri); bluetooth.print(veri,DEC); bluetooth.print(veri,HEX);
bluetooth.print(veri,OCT); bluetooth.print(veri,BIN);
6. bluetooth.write();
Bluetooth modülüne binary veri gönderir ve gönderilen verinin uzunluğunu döndürür.
Örnek:
bluetooth.write(45); //45 değerinde 1 bayt gönder
veri=bluetooth.write(“merhaba”); //merhaba dizisi gönder ve dizenin uzunluğunu döndür
7. bluetooth.overflow();
SoftwareSerial nesnesi arabelleğinde taşma olup olmadığını test eder. Taşma varsa 1, taşma yoksa 0 değerini döndürür. Bu işlevi çağırmak, taşma işaretini temizler. Yani, bu arada başka bir veri alınmadığı sürece sonraki çağrılar False döndürür. SoftwareSerial arabelleği en fazla 64 bayt tutabilir.
Örnek:
void loop()
{
if (bluetooth.overflow()) {
Serial.println("This is a bluetooth overflow!");
}
}
8. bluetooth.listen(); ve bluetooth.isListening();
bluetooth.listen(); bluetooth SoftwareSerial nesnesinin dinlenmesini sağlar. Aynı anda yalnızca bir SoftwareSerial nesnesi dinlenebilir. Diğer bağlantı noktalarına gelen veriler silinir.
bluetooth.isListening(); ise, bluetooth SoftwareSerial nesnesinin aktif olarak dinlenip dinlenmediğini test eder.
Örnek Kod:
#include <SoftwareSerial.h>
SoftwareSerial bluetooth_1(10, 11);
SoftwareSerial bluetooth_2(8, 9);
void setup()
{
Serial.begin(9600);
bluetooth_1.begin(9600);
bluetooth_2.begin(9600);
}
void loop()
{
bluetooth_1.listen(); //bluetooth_1 SoftwareSerial nesnesinin dinlenmesini etkinleştirir
if (bluetooth_1.isListening()) {
Serial.println("bluetooth_1 is listening!");
} else {
Serial.println("bluetooth_1 is not listening!");
}
if (bluetooth_2.isListening()) {
Serial.println("bluetooth_2 is listening!");
} else {
Serial.println("bluetooth_2 is not listening!");
}
}
9. bluetooth.peek();
Bluetooth modülünden gelen veriyi okur. Ancak read()'in aksine, bu fonksiyona yapılan sonraki çağrılar aynı karakteri döndürür. Aynı anda yalnızca bir SoftwareSerial nesnesinin gelen verileri alabileceğini unutmayın (listen() fonksiyonuyla hangisini seçeceğinizi seçin).
b- Doğrudan Modüle Erişim
Doğrudan kontrolde, bildiğimiz RS232 seri port kontrol komutları kullanılarak modül ile iletişim sağlanır. Doğrudan kontrolde, Arduino’nun Tx ve Rx pinleri sırasıyla bluetooth modülün Rx ve Tx pinlerine bağlanır. Fakat Arduino’ya programı yüklerken Tx ve Rx pinlerine takılan kablolar çıkarılmalı ya da modülün enerjisi kesilmelidir. Çünkü bu pinler Arduino’nun program yüklerken kullandığı RS232 portuna aittir.

Modülün varsayılan adı genellikle “HC-06”, “HC-05” veya benzeri bir isimdir. Eşleştirme şifresi genellikle “1234” veya “0000” olur. AT modundan öğrenmek daha doğru olur.
Uygulamada kullandığımız HC-05’de; Ad: HC-05, Şifre: 123456 olarak ayarladık. HC-05 veri modunda genellikle 9600 baud hızda iletişim kurar. Fakat uygulamada kullandığımız HC-05 bluetooth modülünde baud hızını 115200 olarak belirlediğimizde iletişim kurabildik. Seri port ekranını açtığımızda baud hızını yine 115200’e ayarladık.
Uygulamada kullandığımız HC-06’da; Ad: HC-06, Şifre: 123456 olarak ayarladık. HC-06 veri modunda genellikle 9600 baud hızda iletişim kurar.
Android Cihazdan Bluetooth İle Bluetooth Modüllere Veri Gönderme
Bunun için Android telefona ya da tablete yüklenecek bazı bluetooth terminal uygulamalarını “Terminal Mode” da kullanarak bluetooth modüllerle iletişim kurabiliriz. HC-05 ve HC-06 bluetooth modüller Apple marka telefonlar tarafından desteklenmiyor. Telefondan HC-05’e erişmeye çalıştığımızda slave modda olduğundan emin olmalıyız. Aşağıda kullanılabilecek bazı bluetooth uygulamaları yer almaktadır:
Kai Morich tarafından geliştirilen “Serial Bluetooth Terminal” uygulaması,
Giumig Apps tarafından geliştirilen “Arduino Bluetooth Controller” uygulaması,
Qwerty "Bluetooth Terminal" uygulaması,
BlueTerm uygulaması, PuTTY, TeraTerm, Realterm, CoolTerm.
Bunların dışında Play Store’dan bluetooth terminal uygulamaları indirebilirsiniz. Bu uygulamalar, bluetooth üzerinden veri göndermenizi ve almanızı sağlar.
Android cihaz ile bluetooth modülü arasında iletişim kurmadan önce, öncelikle bluetooth modülünü android cihaz ile eşleştirmemiz gerekiyor. Ardından bluetooth terminal programında bluetooth modülünü seçerek veri iletişimine başlayabiliriz.
Cep Telefonu İle Arduino Bluetooth İletişimi
Bluetooth iletişimi için gerekli program kodları Arduino’ya yüklendikten sonra cep telefonunun Bluetooth’u açılır. Programda Bluetooth modülüne verdiğimiz isim cihazlar listesinde bulunur ve eşleşme sağlanır. Ardından kullandığımız “Bluetooth Terminal Programı”nda Aygıtlar (Devices) kısmında cihaz ismi bulunarak aktif edilir. Ardından ana sayfaya gelinerek iletişime başlanır.
Uygulamada kullandığımız “Bluetooth Terminal Programı” Kai Morich tarafından geliştirilen “Serial Bluetooth Terminal” uygulamasıdır. Google Play Store’de yer almaktadır. Aşağıda uygulama ile ilgili resimler yer almaktadır:

"Serial Bluetooth Terminal" uygulaması gönderdiğiniz metni ESP32'ye tek tek (harf harf) gönderir ve ardına görünmez Satır Başı (\r) ve Alt Satır (\n) karakterini ekler:
\r (CR-Carriage Return / Satır Başı): İmleci satırın en başına getirir.
\n (LF-Line Feed / Alt Satır): İmleci bir alt satıra indirir.
İkisi birlikte CR+LF (\r\n) kullanıldığında metni sonlandırıp "Mesaj bitti, yeni satıra geç" komutu verir.
Uygulamanın bu karakterleri eklemesini istemiyorsanız veya değiştirmek isterseniz:
Uygulamada sol üstteki Menü (≡) simgesine basın.
Settings (Ayarlar) > Terminal bölümüne gidin.
Receive ve Send başlıkları altındaki Newline seçeneğine bakın.
Burada varsayılan olarak CR+LF (\r\n) seçilidir. Dilerseniz bunu None (Hiçbiri), LF (\n) veya CR (\r) olarak değiştirebilirsiniz.

