Ayhan 4 Ekim 2013 PIC

Merhabalar arkadaşlar uzun bir süredir işlerim yüzünden bir yazı ekleyememiştim.Bugun uzun zamandır uğraşmak isteyemeyipte fırsat bulamadığım HC-05 Bluetooth modül ile çalışma fırsatı buldum.Edindiğim bilgileri ve araştırmaları aktarmak istedim.Öncelikle bu modülü tercih etmemin en önemli nedeni 4-5 dolarlık fiyatıdır. Yurt dışından ebay,aliexpress gibi sitelerden 4-5 dolara satın alabiliriniz.

Öncelikle işe bluetooth hakkında kısa bilgiler vererek başlamak isterim. Bluetoth kablo bağlantısını ortadan kaldıran kısa mesafe radyo frekansı(RF) teknolojisinin adıdır.Zaten bilmemiz gereken de sadece bu kadardır.Daha detaylı bilgi isteyen varsa söyle gelebilir.Ancak bu projede bizim ilmemiz gereken modülün kablolu iletişimi kablosuz haline getirdiğidir.Modül bir çok haberleşme yöntemini desteklese de ben bu yazıda en basiti olan UART haberleşmesini kullanacağım.Yani tam olarak soylemek gerekirse bu modül ile kablosuz uart haberleşmesi yapacağız.Böyle söylediğimde gözü korkanların yüreğine su serpilmiştir herhalde :)


HC-05

    HC-05


Öncelikle sizde benim yaptığım gibi HC-05 ile ilgili dökümanları indirmelisiniz. Buradan AT komut setini ve Buradan da Manueli indiribelirsiniz. Gerekli ilgileri bu iki dökümandan elde edebiliriniz.

Öncelikle modülün kullanıma hazır hale getirilebilmesi için gerekli bağlantılardan bahsetmek gereklidir. Modülün 2 adet çalışma modu bulunmaktadır. Normal Mod ve at modudur.AT modda modülle AT komutları ile haberleşerek çeşiti ayarlamalar yapılmaktadır. Verdiğim linklerden AT Komut setini incelerseniz gerekli tüm komutları görebilirsiniz.Burada dikat edilmesi gereken en önemli nokta ise tüm haberleşmenin sonunda

\r\n

ifadesinin konulması gerekliliğidir.

Modlar arası geçiş 34 Nolu PIO11 pinin durumu ile gerçekleştirilir.Buna göre bu bit set edilirse modül A moda geçer.Toprağa çekilirse de normal moda geçer ve veri alışverişi yapmaya hazır hale gelir.Ancak dikkat edilmesi gereken nokta PIO11 bitinin her değişiminde modüle reset atmak gereklidir.Bunu için 11 Nolu pin toprağa çekilir ve tekrar set edilir.

Kodları yazıp çalıştırdığımızda modül normal modda iken bir bluetooth cihaz olarak gözükür ve PC veya Android Cihazlar tarafından HC-05 olarak görülür.(Bazı modüller linvor olarak gözükebilir.)Bağlantı şifresi default olarak 1234 ayarlanmıştır.Ancak AT moda alarak AT komutları ile değiştirebilirini.

Bilgisayar ile haberleşmek için öncelikle bluetooth bağlantısını kuruyoruz.Sonrasında da modül bluetooth ile PC üzerinden bir port alır.(ÖR: Port 21) Daha sonra bir terminal programı ile seri port haberleşmesi kuruyoruz.Bu durum için putty programını ullanabilirsiniz.Port numarasını girip Baudrate 9600 ayarladığımızda arada bağlantı kurulmuş oluyor ve artık modül bize veri göndereiliyor ve biz de ona veri gönderebiliyor halde oluyoruz.

Bana göre modülü asıl heyecan verici kılan kısmı aynı zamanda android cihazlarla bağlantı kurabiliyor olmasıdır.Bunu için yine bir terminal programı kullanmanız gerekmektedir.bunun için ben BlueTerm programını kulanıyorum.Google Play üzerinden ücretsiz olarak indirebilirsiniz.Program ile etrafı tarayıp HC-05 ile bağlantı kurup iletişimi başlatabilirsiniz.

Gelelim işlemizi gerçekleştireceğimiz PIC kodumuza.Bu projede PIC16F690 kullandım.Gerekli kodlar ise aşağıda ekledim.Görebileceğiniz gibi olayın seri haberleşmeden bir farkı yok.

Seri haberleşmeden bir farkı olmadığına göre öncelikle seri haberleşme kütüphanemizi oluşturalım.

seri.h:

/**********************************************
 @Dosya    : usart.h
 @Amaç     : Seri porttan veri alıp-göndermek
 @Versiyon : V1.0 
 @Yazan    : Ayhan KORKMAZ 
 @İletişim : info@ayhankorkmaz.net
 @Tarih    : 01.10.2013 , 14.19					
**********************************************/
#define FOSC 8000000L
#define NINE 0
#define HIGH_SPEED 1

#define RX_PIN TRISB5	
#define TX_PIN TRISB7


extern void uart_init(int baud);
extern void uart_veri_gonder( char byte);
extern  char getch(void);
extern void uart_yazi_gonder(unsigned char *data);

seri.c:

#include <pic.h>
#include "stdio.h"
#include "seri.h"

/*************************************************
Fonksiyon  : uart_init()
Amaç       : Uart haberleşmesinin ayarları yapılıyor
Kullanım   : uart_init()
*************************************************/

void uart_init(int baud)
{
OSCCON=0x75;
TRISB|=0x70;
#define DIVIDER ((int)((FOSC)/(16UL*baud)-1)) // SPBRG register'ına gönderilecek değerin bulunması

unsigned char speed,nine_bits;

RX_PIN=1; // Rx pini giriş olarak ayarlanıyor
TX_PIN=0; // Tx pini çıkış olarak ayarlanıyor

if(HIGH_SPEED==1)// hız ayarı
{speed=0x04;}
else
{speed =0x00;}
if(NINE==1) // 9 bit ayarı 
{nine_bits=0x04;}
else
{nine_bits=0x00;}
//RCIF=0;
SPBRG=DIVIDER;
//SPBRG=51;

RCSTA=(nine_bits|0x90); // veri almanın aktif yapıldığı yer
TXSTA=(speed|nine_bits|0x20); // veri göndermenin aktif yapıldığı yer

ANSEL=0x00; // portların digital olarak ayarlanması 
ANSELH=0x00; //portların digital olarak ayarlanması 

BAUDCTL=0x00; // baud ayarları

PIE1=0x20; // reciever kesmesi ayarları
INTCON=0xC0; // reciever kesmesi ayarları
}

/**************************************************
Fonksiyon  : uart_veri_gonder()
Amaç       : Veri göndermek 
Kullanım   : uart_veri_gonder('A')
**************************************************/

void uart_veri_gonder(char byte)
{
while(!TRMT);
TXREG=byte;
}

/**************************************************
Fonksiyon  : getch()
Amaç       : Veri almak  
Kullanım   : A = getch()
**************************************************/
/*unsigned char getch(void)
{
while(!RCIF);
return RCREG;
}
*/

/****************************************
Fonksiyon  : uart_yazi_gonder(char *data)
Amaç       : String türünde veri gönderimi yapar 
Kullanım   : uart_yazi_gonder("data")
****************************************/
void uart_yazi_gonder(unsigned char *data)
{
	while(1)
	{
		uart_veri_gonder(*data);
		data++;
		if(data=="\n")
		{
			uart_veri_gonder(*data);
			break;
		}
	}
}


main.c:

#include <htc.h>
#include "seri.h"
#include "delay.h"
__CONFIG (CP_OFF & WDTE_OFF & FOSC_HS & BOREN_OFF);//Konfig Ayarlamaları

#define Reset RC0
#define AT RC1
#define TRIS_AT TRISC0
#define TRIS_Reset TRISC1

void Bluetooth_Init(void)
{
TRIS_Reset=Cikis;
TRIS_AT=Cikis;

AT=0;//Normal Mod
Reset=1;//Reset Atma
}
main()
{
uart_init(9600);
Bluetooth_Init();
while(1)
{
uart_yazi_gonder("AyhanKorkmaz.Net Bluetooth calismasi");
}
}
Yazar :

Elektrik-Elektronik mühendisiyim. 2 yıldır bu blogda yazıyorum. Ve 6 aydır aktif olarak internet siteleri yönetiyorum. Kişisel olarak da teknoloji ve fotoğrafçılıkla ile ilgileniyorum.



Beni sosyal medya hesaplarım üzerinden takip edin:

YORUMLAR

  1. ozan toker

    3 sene ago  

    ne zaman picle ilgili bir araştırma yapsam dönüp dolaşıp senin veya muhammetin sitesine geliyorum 😀

  2. Ayhan

    3 sene ago  

    İşini yaradıysa ne mutlu :)

  3. 2 sene ago  

    Merhaba, sayfanızı yararlı ancak benim gibi bilgisi az olanlar için çok üst seviyede buldum. Benim soruma umarım anlayışla yaklaşırsınız, Şu anda USB kablosuyla bağlantı kurduğum bir cihazı 10 metre uzağa koymak ve kablo yerine bu bluetooth modülü kullanarak haberleştirmek istiyorum. Bu modül işimi görür mü?

    Saygılarımla

    • Ayhan

      2 sene ago  

      Merhaba,
      Eğer USB kablo ile USB2Seri dönüştürücü yardımı ile haberleşiyorsanız rahatlıkla kullanabilirsiniz.

  4. deniz

    2 sene ago  

    Peki bu modül ile iki adet 12v motoru tuşa basıldığında sarıp tuşdan elimizi çektiğimizde sarmayı bıraksak. Ve bunu motorun birinde ters birinde düz yapsan (dolayısıyla iki tuş ile ve android olarak.)mümkün mü. Kısacası pic ile kontrol olmadan iki değişik veri gönderilebilir mi? Röle yardımıda alabiliriz gerçi sesi beni deli ediyor ama.

    • Ayhan

      2 sene ago  

      Mümkün tabii ki.Ancak kod bilgin ve Android bilgin olmalı. Kablo bağlı şekilde neler yapabiliyorsan bununla da yaparsın.Önemli olan yapabilmek

  5. 2 sene ago  

    Ben bunun ile görüntü paylaşa bilirmiyim bana ulaşırsan sevinirim ücretli bana yardımcı ol //EDIT : telefon numaranı buradan degıl ıletısımden yollasaydın

    • Ayhan

      2 sene ago  

      Görüntü aktarımı için çok uygun olmaz. Hız ve band genişliği kurtarmaz. Bunun için görüntü aktarma modülleri kullanmalısın

  6. rafet

    2 sene ago  

    HC-05 mödülü ne yaptıysam çalıştıramadım reset ve tx pinlerinde voltaj var 3,3v ve 4,2volt arasında voltaj verdim gene pc olsun telefon olsun görmedi.Bozuk olup olmadığını nasıl test ederim Teşekkürler.

    • Ayhan

      2 sene ago  

      Tüm donanım gereksinimleri doğru olarak yapıldıysa modülde sorun olabilir. Bağlantları bir daha kontrol edin ve mümkünse farklı bir ürünle kontrol edin.

  7. sehend

    2 sene ago  

    Merhaba,ben C# programini kullanarak,HC05 Bluetoothla bir led panele mesaj yazmak istiyorum,C#da kodlari nasil yazacam ve blutooth’u nasil tanimlayacam.yardimci olursaniz cok tesekkur ederim.

    • Ayhan

      2 sene ago  

      Eğer HC05 kullanacaksan bir tane USB TTL dönüştürücü ile HC05’e veri gönderebilirsin seri port üzerinden. Veya laptop bluetoothunu kullanabilirsin. Ama C# konusunda henü deneyimim yok

  8. kuylus

    2 sene ago  

    Merhaba

    Pic 18f4550 ile usb ve bluetooth ( hc 05 ) bağlayıp bir devre tasarlamaya uğraşıyorum fakat takıldığım bir kaç nokta var , picde usb kısmını anladım zaten pinleri hazır , bluetooth için de pic de rx ve tx uçlarını kullanıp haberleşmeyi düşündüm fakat bluetooth modülde besleme ile ilgili bölüm de takıldım, bu modülün 5v ve 3.3v bağlantılarını tam anlamadım müdül 5 v la beslenince birde 3.3v mu vermeliyim picle haberleşirken 3.3v yerini picede bağlanışı var olay tam nedir kavrayamadım , bu modül 5v mu 3.3 voltmu

    teşekürler

  9. best54

    2 sene ago  

    biraz uzmanlık gerektiren bir konu gibi geldi.

  10. hadise

    1 sene ago  

    teknoloji git git ilerliyor hızına yetişmek mümkün değil eve kablosuz bir şey almaya korkardım verim alamam diye ama gerçekten harika

  11. best54

    1 sene ago  

    ooo bu anlattıklarını yapsak mühendis oluruz,mühendis.