Android İle Bluetooth Üzerinden STM32F4 Haberleşmesi

Başlatan micelow, 30 Aralık 2013, 10:13:49

micelow

Android uygulamamdan hc 05 bluetooth modülünü kullanarak stm32f4 karta veri göndermek istiyorum gelen veriye göre bitleri set edip reset edicem. Android uygulamamda hc 05 modül ile eşleşme sağlıyorum bunu PIN31 e bağladığım ledin saniyede iki kez yanıp sönmesiyle ve PIN32 e bağladığım ledin devamlı yanmasıyla anlıyorum fakat eşleşmeden önce veya sonra farketmeksizin Tx ve Rx e led bağladığımda ikiside sürekli yanıyor ve veri göndermek için uygulamada butona basınca ise stm32f4 de ilgili pinler set edilmiyor ancak Tx ve Rx ledleri bu sırada hala yanmaya devam ediyor. Bu sorunu nasıl çözebilirim?
"Bir tek şeye ihtiyacımız var çalışkan olmak."

LukeSkywalker


micelow

Hocam Androidte bu bağlanma metodum
public void onConnect() {
		if (connected) {
			return;
		}
		try {
			BluetoothDevice BD = BA.getRemoteDevice("20:13:06:20:18:42");
			Method m = BD.getClass().getMethod("createRfcommSocket",
					new Class[] { int.class });
			sock = (BluetoothSocket) m.invoke(BD, Integer.valueOf(1));
			sock.connect();

		} catch (Exception e) {
			Toast.makeText(getApplicationContext(), e.getMessage(),
					Toast.LENGTH_SHORT).show();
		}
	}


Bu ise veri göndermek için write metodu

public void write(char data){
		try{
			mmOutStream = sock.getOutputStream();
			if(connected)
				mmOutStream.write(data);
		} catch (Exception e)
			{	Toast.makeText(getApplicationContext(), e.getMessage(),
					Toast.LENGTH_SHORT).show();}
	}


butonların onClick metotlarında
public void i_method(View v) {
		write('F');
	}

şeklinde write fonsiyonuna değer gönderiyorum.
"Bir tek şeye ihtiyacımız var çalışkan olmak."

LukeSkywalker

mikrodenetleyiciye yazdığınız kodu da görmek lazım.

Erhan YILMAZ

Alıntı yapılan: micelow - 30 Aralık 2013, 10:42:06
Hocam Androidte bu bağlanma metodum
public void onConnect() {
		if (connected) {
			return;
		}
		try {
			BluetoothDevice BD = BA.getRemoteDevice("20:13:06:20:18:42");
			Method m = BD.getClass().getMethod("createRfcommSocket",
					new Class[] { int.class });
			sock = (BluetoothSocket) m.invoke(BD, Integer.valueOf(1));
			sock.connect();

		} catch (Exception e) {
			Toast.makeText(getApplicationContext(), e.getMessage(),
					Toast.LENGTH_SHORT).show();
		}
	}


Bu ise veri göndermek için write metodu

public void write(char data){
		try{
			mmOutStream = sock.getOutputStream();
			if(connected)
				mmOutStream.write(data);
		} catch (Exception e)
			{	Toast.makeText(getApplicationContext(), e.getMessage(),
					Toast.LENGTH_SHORT).show();}
	}


butonların onClick metotlarında
public void i_method(View v) {
		write('F');
	}

şeklinde write fonsiyonuna değer gönderiyorum.

Hocam geliştirme ortamı ne kullanıyorsunuz?

micelow

#5
Eclipse kullanıyorum hocam

mesaj birleştirme:: 30 Aralık 2013, 12:33:50


USART ve GPIOB için ayarlar
void init_System(uint32_t baudrate){
GPIO_InitTypeDef GPIO_InitStructure;
	USART_InitTypeDef USART_InitStruct;
	NVIC_InitTypeDef NVIC_InitStruct;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1, ENABLE);
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOC|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF,ENABLE);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
	GPIO_InitStructure.GPIO_OType= GPIO_OType_PP;
	GPIO_InitStructure.GPIO_Speed= GPIO_Speed_100MHz;
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_NOPULL;
	GPIO_Init(GPIOB,&GPIO_InitStructure);
	
	GPIO_InitStructure.GPIO_Pin=GPIO_Pin_6|GPIO_Pin_7;
	GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_OType=GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd=GPIO_PuPd_UP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);

GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);

	GPIO_PinAFConfig(GPIOB, GPIO_PinSource6, GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOB, GPIO_PinSource7, GPIO_AF_USART1);
	
	USART_InitStruct.USART_BaudRate=baudrate;
	USART_InitStruct.USART_WordLength=USART_WordLength_8b;
	USART_InitStruct.USART_StopBits=USART_StopBits_1;
	USART_InitStruct.USART_Parity=USART_Parity_No;
	USART_InitStruct.USART_HardwareFlowControl=USART_HardwareFlowControl_None;
	USART_InitStruct.USART_Mode=USART_Mode_Tx|USART_Mode_Rx;
	USART_Init(USART1, &USART_InitStruct);
	
	USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
	
	NVIC_InitStruct.NVIC_IRQChannel=USART1_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=0;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority=0;
	NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE;
	NVIC_Init(& NVIC_InitStruct);
	
	USART_Cmd(USART1,ENABLE);
}


Gönderme fonksiyonu
void USART_send(USART_TypeDef* USARTx, volatile char *s)
	{
		while(*s){
			while(!(USARTx->SR & 0x00000040));
		USART_SendData(USARTx, *s);
		*s++;
		}
	}

   Verinin alındığı ve işlemlerin yapıldığı blok
void USART_IRQHandler(void){	
	 if(USART_GetITStatus(USART1, USART_IT_RXNE)){
		 char t=USART1->DR;
			if((t!='\n')){
			switch (t){
				case 'F':ileri(); break;
				case 'B':geri(); break;
				case 'R':sag(); break;
				case 'L':sol(); break;
				default:USART_send(USART1, "Uygulamada Hata Olustu\r\n"); break;
			}
		}
	 }
	}

ve main fonksiyonu
int main()
{	
init_System(9600);
}
"Bir tek şeye ihtiyacımız var çalışkan olmak."

picusta

Tavsiyem önce BT bilgisayarla ve hyperterminal tarzi bir programla modül ile iletime geç.
Mirkodenetleyici yerine de USB -TTL dönüstürücü koy. Ikinci hyperterminal pencerisini bunula aç. Bir tarafta yazdigini diger tarafta görmelisin. Görmezsen, veya arada bir degisik karakterler çikiyorsa BT Modülde sorun var.
HC 05 kullandigina göre mode pinine dikkat etmelisin. Icabinda AT komutlariyla client rolüne geçmelisin.


engerex

Google playde hyper terminal tarzı uygulamalar var. Öncelikle bağlantıyı bunlarla sağlamanı öneririm.

mesaj birleştirme:: 30 Aralık 2013, 13:09:25


Erhan YILMAZ

Alıntı yapılan: micelow - 30 Aralık 2013, 12:02:16
Eclipse kullanıyorum hocam

c# değil mi hocam bu? Derleyici ne kulalanıyorsunuz? Eclipse'te java ile bende bluetooth çalıştırdım ama sizin kodlar farklı geldi ondan sordum.

micelow

Hocam 232Analyzer ve RealTerm programları ile bilgisayara bağladım 232Analyzer dan veri gönderip RealTerm den okuma yapıyorum fakat gönderdiğim veriyi alıamıyorum değişik karakterler çıkıyor baudrateler aynı.

Erhan hocam c# ile java birbirlerine çok zıt değiller nesne yönelimli olduğundan benzerlikleri var android için paylaştıklarım eclipsedeki java kodları:)
"Bir tek şeye ihtiyacımız var çalışkan olmak."

Erhan YILMAZ

Alıntı yapılan: micelow - 30 Aralık 2013, 14:04:10
Hocam 232Analyzer ve RealTerm programları ile bilgisayara bağladım 232Analyzer dan veri gönderip RealTerm den okuma yapıyorum fakat gönderdiğim veriyi alıamıyorum değişik karakterler çıkıyor baudrateler aynı.

Erhan hocam c# ile java birbirlerine çok zıt değiller nesne yönelimli olduğundan benzerlikleri var android için paylaştıklarım eclipsedeki java kodları:)

Hocam sizin kod daha basit geldi yazılışı falan. Ben androidin kendir bluetooth örneği üzerinden derleme yapmıştım daha karışıktı ondan merak ettim. Yazarken bir örnekten yararlandınız mı? Yoksa kendinize ait sınıf mı yazdınız?

micelow

Hocam BluetoothChat uygulamasını inceledim ancak çok karmaşık geldi projeyi yapıp bitirmekten ziyade yaparken öğrenmek istedim o yüzden biraz fazla araştırıp özellikle yabancı kaynaklardan yararlanarak yazdım tabi kodları direk kopyala yapıştır yaparak değilde nasıl yapıldığına bakıp kendi sınıfımda metoduma yazdım ki hem aşına olayım hemde anlayım diye. Uğraştırıcı oldu ama olsun.
"Bir tek şeye ihtiyacımız var çalışkan olmak."

micelow

telefondan hc-05 e gönderdiğim verileri realterm den düzgün göremiyorum örneğin 'R' karakteri gönderdiğimde '+' karakteri alıyorum nedeni hakkında fikri olan var mı?
"Bir tek şeye ihtiyacımız var çalışkan olmak."

Ersin

Haberleştiği hizdan dolayıdır , AT komutları ile BT yi 9600 e set et 115k da kalmış olabilir veya mcu tarafında farklı bir hız tanımladın.

micelow

hocam hc-05 te 34. pini 3 volt a çektim 31. pin e bağlı led saniyede bir kez yanıp söndü AT moda geçtiğini düşünerek AT+UART=9600,1,0,\r\n gönderdim OK cevabı gelmedi AT moda geçtiği doğru mu?
"Bir tek şeye ihtiyacımız var çalışkan olmak."