Parçalar · 4 dk okuma

HC-05 Bluetooth Modülü: Arduino'yu Telefondan Kontrol Etmek

HC-05 Bluetooth modülü nasıl bağlanır? Pinler ve gerilim bölücü, telefonla eşleştirme, LED ve röle kontrolü, AT komutları, HC-05 ile HC-06 ve HM-10 farkı, iPhone uyumu, ESP32 ve Pico.

HC-05, Arduino projelerine kablosuz seri haberleşme ekleyen ucuz ve çok yaygın bir Bluetooth modülüdür. Onunla telefondan bir LED'i yakabilir, bir röleyle lambayı açıp kapatabilir, uzaktan kumandalı bir araba sürebilir ya da sensör verilerini telefonuna gönderebilirsin. Bu yazıda HC-05'i doğru ve güvenli bağlamayı, telefonla eşleştirmeyi, ilk kodları ve modül ayarlarını değiştiren AT komutlarını adım adım göreceksin.

HC-05 Bluetooth modülü ve jumper kablolar
HC-05 Bluetooth modülü: üstteki zikzak yol anteni, solda EN, VCC, GND, TXD, RXD ve STATE olmak üzere 6 pin bulunur.

HC-05 nasıl çalışır?

HC-05, klasik Bluetooth'un SPP (Seri Port Profili) özelliğini kullanır ve bir "kablosuz seri kablo" gibi davranır. Telefon eşleşip bağlandıktan sonra telefondan gönderilen her karakter modülün TXD pininden Arduino'ya ulaşır; Arduino'nun RXD pinine yazdığı her şey de telefona gider. Arduino tarafında Bluetooth hakkında hiçbir şey bilmen gerekmez: tıpkı Seri Monitör'le konuşur gibi Serial.print() ve read() kullanırsın.

ÖzellikDeğer
Bluetooth sürümü2.0 + EDR (klasik, SPP)
MenzilAçık alanda ~10 m
Besleme gerilimi3,6–6 V (modül kartında regülatör vardır)
Mantık seviyesi3,3 V
Varsayılan hız9600 baud (AT modunda 38400)
Varsayılan PIN1234 ya da 0000
RolMaster (ana) ve slave (bağımlı)

HC-05, HC-06 ve HM-10 farkı

ModülBluetoothRolPin sayısıiPhone
HC-052.0 klasikMaster ve slave6Çalışmaz
HC-062.0 klasikYalnızca slave4Çalışmaz
HM-104.0 BLEMaster ve slave6Çalışır
HC-06 Bluetooth modülü
HC-06 Bluetooth modülü: HC-05'e çok benzer ama 4 pinlidir ve yalnızca slave olarak çalışır; telefonla haberleşmek için yeterlidir.
HC-05 ve HC-06 iPhone ile çalışmaz: iOS, sıradan uygulamaların klasik Bluetooth seri bağlantısı kurmasına izin vermez. iPhone ile haberleşmek istiyorsan HM-10 gibi bir BLE (Bluetooth Low Energy) modülü ya da BLE destekli bir ESP32 kullan. Android telefonlar ve bilgisayarlar HC-05'e sorunsuz bağlanır.

HC-05 pinleri ve bağlantı

Modül 5V ile beslenebilir çünkü kartın üzerinde bir regülatör vardır, ama veri pinleri 3,3 V ile çalışır. HC-05'in TXD pininden gelen 3,3 V'luk sinyali Arduino sorunsuz okur. Tersi yönde ise Arduino'nun 5 V'luk TX sinyalini modülün RXD pinine doğrudan bağlamak yerine bir gerilim bölücü kullan: Arduino TX → 1 kΩ → RXD, RXD → 2 kΩ → GND. Böylece RXD'ye yaklaşık 3,3 V ulaşır.

HC-05 piniGöreviArduino Uno
EN (KEY)AT moduna geçişBoş (AT modu için 3,3 V)
VCCBesleme5V
GNDToprakGND
TXDModülün veri çıkışıD10 (SoftwareSerial RX)
RXDModülün veri girişi (3,3 V)D11, 1 kΩ / 2 kΩ bölücü üzerinden
STATEBağlıyken HIGHBoş ya da istenirse bir giriş pini
HC-05'i Uno'nun 0 ve 1 numaralı pinlerine de bağlayabilirsin, ama bu pinler USB ile kod yüklemek için de kullanılır; modül takılıyken yükleme hata verir. SoftwareSerial ile 10 ve 11 numaralı pinleri kullanmak hem yüklemeyi hem de Seri Monitör'ü serbest bırakır.

LED durumları ve telefonla eşleştirme

Modüle enerji verdiğinde üzerindeki LED hızlı hızlı yanıp söner: bu, bağlantı beklediği anlamına gelir. Android telefonun Bluetooth ayarlarında "HC-05" adlı cihazı bul ve PIN olarak 1234 (olmazsa 0000) girerek eşleştir. Eşleştirme tek başına bağlantı kurmaz; bağlantıyı Bluetooth seri terminal uygulaması açar. Bağlantı kurulunca LED 2 saniyede bir iki kez kısa yanıp söner. LED'in 2 saniye yanıp 2 saniye sönmesi ise modülün AT komut modunda olduğunu gösterir.

Telefonla ilk haberleşme

Aşağıdaki kod Arduino'yu telefonla bilgisayar arasında bir köprüye çevirir: telefondan gelen her karakter Seri Monitör'e, Seri Monitör'e yazdığın her şey telefona gider. Bağlantıyı test etmek için en iyi başlangıçtır:

Arduino (C++)
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11);   // RX, TX → HC-05 TXD, RXD
4
5void setup() {
6  Serial.begin(9600);
7  bt.begin(9600);            // veri modu hızı / data mode baud rate
8}
9
10void loop() {
11  if (bt.available()) {
12    Serial.write(bt.read());   // telefondan bilgisayara / phone to PC
13  }
14  if (Serial.available()) {
15    bt.write(Serial.read());   // bilgisayardan telefona / PC to phone
16  }
17}

Kodu yükle, Seri Monitör'ü 9600 baud ile aç. Telefonda Google Play'deki Serial Bluetooth Terminal gibi bir uygulamayla HC-05'e bağlan ve bir şeyler yaz: yazdıkların Seri Monitör'de görünecektir. Seri Monitör'den yazdığın metin de telefonda belirir. Bu çalışıyorsa bağlantı, kablolama ve hız ayarı doğru demektir.

Telefondan LED ve röle kontrolü

Şimdi telefondan gelen karakterlere göre işlem yapalım: 1 gelince LED yansın, 0 gelince sönsün. Arduino her komuttan sonra telefona bir cevap da gönderir:

Arduino (C++)
1#include <SoftwareSerial.h>
2
3SoftwareSerial bt(10, 11);   // RX, TX
4const int LED = 13;
5
6void setup() {
7  pinMode(LED, OUTPUT);
8  bt.begin(9600);
9  bt.println("Ready");
10}
11
12void loop() {
13  if (bt.available()) {
14    char c = bt.read();
15    if (c == '1') {
16      digitalWrite(LED, HIGH);   // LED'i yak / turn the LED on
17      bt.println("LED ON");
18    } else if (c == '0') {
19      digitalWrite(LED, LOW);    // LED'i söndür / turn the LED off
20      bt.println("LED OFF");
21    }
22  }
23}

Pek çok Bluetooth uygulaması butonlara istediğin karakteri atamana izin verir; böylece telefonda "Aç" ve "Kapat" butonları olan küçük bir kumanda yapabilirsin. LED yerine bir röle modülü bağlarsan aynı kodla bir lambayı ya da fanı telefondan kontrol edersin. İleri, geri, sol ve sağ için F, B, L ve R karakterlerini L298N motor sürücüsüne yönlendirmek de Bluetooth kontrollü bir arabanın temelidir.

AT komutlarıyla modül ayarları

HC-05'in adını, PIN'ini ve haberleşme hızını AT komutlarıyla değiştirebilirsin. AT moduna girmek için modülün üzerindeki küçük butona basılı tutarken (ya da EN pinini 3,3 V'a bağlayıp) enerji ver; LED 2 saniyede bir yavaşça yanıp sönmeye başlar. Köprü kodunda bt.begin(38400) yaz, Seri Monitör'de satır sonunu Both NL & CR (NL ve CR ikisi birden) olarak seç ve komutları gönder:

KomutGörevi
ATBağlantı testi, cevap OK
AT+NAME=BlueGraysModülün görünen adını değiştirir
AT+PSWD="4321"PIN'i değiştirir (eski sürümlerde tırnaksız)
AT+UART=9600,0,0Veri modundaki hızı ayarlar
AT+ROLE=0Slave yapar (1 yazarsan master olur)
AT+VERSION?Yazılım sürümünü gösterir
AT+ORGLFabrika ayarlarına döndürür
Bazı HC-05 sürümlerinde AT komutlarının bir kısmı (örneğin AT+NAME) ancak komutu gönderirken butona basılı tutarsan cevap verir. AT yazıp OK alıyor ama bazı komutlarda cevap gelmiyorsa butonu basılı tutarak tekrar dene.

ESP32 ve Raspberry Pi Pico ile Bluetooth

Klasik ESP32'nin içinde hem klasik Bluetooth hem de BLE vardır; BluetoothSerial kütüphanesiyle HC-05'e gerek kalmadan telefona bağlanabilirsin. ESP32-S3 ve ESP32-C3 ise yalnızca BLE destekler. Raspberry Pi Pico W'da da dahili Bluetooth bulunur. Bluetooth'suz standart Raspberry Pi Pico'ya ise HC-05'i UART pinlerinden bağlarsın; Pico 3,3 V ile çalıştığı için bu sefer gerilim bölücüye gerek yoktur. Modülü VBUS (5V) pininden besle:

MicroPython
1from machine import UART, Pin
2
3bt = UART(0, baudrate=9600, tx=Pin(0), rx=Pin(1))   # GP0 → RXD, GP1 ← TXD
4led = Pin("LED", Pin.OUT)                           # kart üstü LED / onboard LED
5
6while True:
7    if bt.any():
8        c = bt.read(1)
9        if c == b'1':
10            led.on()
11            bt.write(b'LED ON\n')
12        elif c == b'0':
13            led.off()
14            bt.write(b'LED OFF\n')

HC-05 ile proje fikirleri

  • Bluetooth kontrollü araba: L298N motor sürücüsü ve iki DC motorla telefondan sürülen bir robot.
  • Akıllı ev anahtarı: Röle modülüyle lambaları ve prizleri telefondan aç kapat.
  • Renk seçici lamba: Telefondan gönderilen değerlerle bir RGB LED'in rengini ayarla.
  • Kablosuz sensör ekranı: DHT11'den okunan sıcaklık ve nemi telefondaki terminale gönder.
  • Robot kol: Servo motorları telefondaki kaydırıcılarla kontrol et.
  • İki Arduino arasında haberleşme: Bir HC-05'i master, diğerini slave yaparak kablosuz veri gönder.

Sık yapılan hatalar ve çözümleri

  • Telefon modülü bulamıyor: iPhone kullanıyorsun, modül başka bir cihaza bağlı ya da modül AT modunda kalmış.
  • Anlamsız karakterler geliyor: Hızlar uyuşmuyor; veri modunda genellikle 9600, AT modunda 38400 kullanılır.
  • AT komutlarına cevap yok: Modül AT modunda değil, hız 38400 değil ya da satır sonu Both NL & CR seçilmemiş.
  • Kod yüklenmiyor: Modül 0 ve 1 numaralı pinlere bağlı; yüklerken çıkar ya da SoftwareSerial kullan.
  • Motorlar çalışınca bağlantı kopuyor: Motorlar beslemeyi bozuyor; motorları ayrı bir kaynaktan besle ve modülün beslemesine kondansatör ekle.
  • Modül bir süre sonra bozuldu: RXD pinine bölücüsüz 5 V verilmiş olabilir; her zaman 1 kΩ / 2 kΩ bölücü kullan.

HC-05, kablolu projelerini kablosuza taşımanın en kolay yoludur; motor kontrolüyle birleştirdiğinde ilk uzaktan kumandalı robotunu yapmaya hazırsın. BlueGrays uygulamasında L298N ile Bluetooth kontrollü araba ve engelden kaçan robot projelerini devre şemaları ve kodlarıyla bulabilirsin.

Sıkça sorulan sorular

HC-05 iPhone ile çalışır mı?

Hayır. iOS, sıradan uygulamaların HC-05 ve HC-06'nın kullandığı klasik Bluetooth seri bağlantısını kurmasına izin vermez. iPhone için HM-10 gibi bir BLE modülü ya da BLE destekli bir ESP32 kullanmalısın.

HC-05'in menzili ne kadar?

Açık alanda yaklaşık 10 metredir. Duvarlar, metal yüzeyler ve diğer kablosuz cihazlar bu mesafeyi kısaltır. Ev içinde aynı oda ya da bitişik oda için güvenilir çalışır.

HC-05 ile HC-06 arasındaki fark nedir?

İkisi de klasik Bluetooth kullanır. HC-05 hem master hem slave olabilir ve 6 pinlidir; HC-06 yalnızca slave'dir ve genellikle 4 pinlidir. Telefonla haberleşmek için ikisi de yeterlidir; iki Arduino'yu birbirine bağlamak için en az bir HC-05 gerekir.

HC-05'in varsayılan şifresi nedir?

Çoğu modülde 1234, bazılarında 0000'dır. AT modunda AT+PSWD komutuyla değiştirebilirsin; projeni başkalarının kontrol etmesini istemiyorsan varsayılan şifreyi değiştirmek iyi bir fikirdir.

İki Arduino'yu HC-05 ile haberleştirebilir miyim?

Evet. Bir HC-05'i AT+ROLE=1 ile master yap ve AT+BIND komutuyla diğer modülün adresini tanıt; ikinci modül slave olarak kalır. Enerji verildiğinde master otomatik olarak slave'e bağlanır ve iki Arduino seri port üzerinden konuşur.

RXD pini için gerilim bölücü şart mı?

Önerilir. HC-05'in veri pinleri 3,3 V ile çalışır; birçok modül bir süre 5 V'a dayansa da zamanla bozulabilir. 1 kΩ ve 2 kΩ dirençlerle yapılan basit bir bölücü bu riski ortadan kaldırır. TXD pini için bölücüye gerek yoktur.

Tüm projeleri gör

HC-05 Bluetooth modülünü Arduino'ya güvenle bağlamayı, telefonla eşleştirmeyi, telefondan LED ve röle kontrol etmeyi ve modülün adını, şifresini AT komutlarıyla değiştirmeyi adım adım öğren.