고급 예제

다양한 도구들을 가지고 마음껏 응용해보세요.

안드로이드x 아두이노 - 블루투스 통신 기초

2014-08-11 10:00:47

개요

아두이노에 블루투스 실드를 붙이면 블루투스를 사용할 수 있습니다.

블루투스(Bluetooth)는 휴대폰, 노트북 등의 휴대기기를 서로 연결해 정보를 교환하는 근거리 무선기술 표준을 뜻합니다.

사진 출처 : 네이버 백과사전



블루투스는 실생활에서 헤드셋이나 스마트폰 등 많은 부분에서 사용되고 있습니다.



사진 출처 : http://www.mobot.es/MobotBTCar.html


블루투스 모듈을 아두이노와 연결하여 사용 하게 되면 스마트폰으로 모형차를 조정 하거나, 아두이노와 연결된 센서 값을 받아 볼 수 있는 등 다양하게 사용할 수 있습니다.

이 컨텐츠에서는 블루투스 모듈을 아두이노와 연결해 보고, 안드로이드와 아두이노 간의 블루투스 통신을 통해 간단한 문자열을 전달을 해봅시다.

 

 

 

 

미리보기 동영상

 

 

 

부품목록

NO 부품명 수량 상세설명
1 아두이노 우노 R3 1 아두이노
2 안드로이드 1 안드로이드를 사용하는 스마트폰
3 블루투스 모듈(HC-05) 1 블루투스
4 브레드보드 1 브레드보드
5 점퍼케이블 6 직접연결 하게 되면 4개만 있어도 됩니다.
(여기선 다음 응용까지 같이 하기 위해 추가로 연결 했습니다.)

 

 

부품명 아두이노 우노 R3 안드로이드 블루투스 모듈(HC-05) 브레드보드 점퍼케이블
파트 x1 x1 x1 x1 x6

 

 

하드웨어 making

회로도


 

브레드보드 레이아웃

 

 

 

소프트웨어 coding

#include <SoftwareSerial.h>

// SoftwareSerial(RX, TX)
SoftwareSerial BTSerial(2, 3); 
// 데이터를 수신 받을 버퍼
byte buffer[1024];
// 버퍼에 데이타를 저장할 때 기록할 위치
int bufferPosition; 

void setup() {
	BTSerial.begin(9600); 
	Serial.begin(9600); 
	// 버퍼 위치 초기화
	bufferPosition = 0; 
}

void loop() {
	// 블루투스로 데이터 수신
	if (BTSerial.available()) { 
		// 수신 받은 데이터 저장
		byte data = BTSerial.read(); 
		// 수신된 데이터 시리얼 모니터로 출력
		Serial.write(data); 
		// 수신 받은 데이터를 버퍼에 저장
		buffer[bufferPosition++] = data; 
		
		// 문자열 종료 표시
		if (data == '\n') { 
			buffer[bufferPosition] = '\0';
			
			// 스마트폰으로 문자열 전송
			BTSerial.write(buffer, bufferPosition);
			bufferPosition = 0;
		}  
	}
}

 

 

소프트웨어 설명

 * 이 코드는 스케치를 사용하여 작성 / 업로드 합니다. 스케치에 대한 사용법은 링크를 참고하시기 바랍니다.

우선 블루투스로 문자열을 보낼 안드로이드 어플(BT_Test.apk)을 받으신 후, 실행 하면 밑의 왼쪽 그림처럼 화면이 나옵니다. (핸드폰의 블루투스 기능을 켜야 합니다.)
(이 안드로이드와 아두이노 소스는 "아두이노 스토리 - 클라이버"님이 작성한 글을 참고 하여 만들었습니다.)

아두이노와 맞게 연결을 하면 오른쪽 그림처럼 넘어가게 됩니다.

위 칸에 글을 적으시고 Send 버튼을 누르시면 아두이노 시리얼 모니터와 안드로이드 어플 화면에 글이 뜨게 됩니다.
(안드로이드 어플 글 Send -> 아두이노 수신 후 시리얼 모니터에 작성 -> 안드로이드로 다시 전송 -> 안드로이드 어플 화면에 글이 뜸)

 

#include <SoftwareSerial.h>

// SoftwareSerial(RX, TX)
SoftwareSerial BTSerial(2, 3); 
// 데이터를 수신 받을 버퍼
byte buffer[1024];
// 버퍼에 데이타를 저장할 때 기록할 위치
int bufferPosition; 

 

블루투스 통신을 하기 위해 SoftwareSerial 라이브러리를 사용합니다.
통신을 하기 위한 RX, TX 연결 핀번호와, 수신 받을 자료를 저장할 버퍼를 설정해 줍니다.

 

void loop() {
	// 블루투스로 데이터 수신
	if (BTSerial.available()) { 
		// 수신 받은 데이터 저장
		byte data = BTSerial.read(); 
		// 수신된 데이터 시리얼 모니터로 출력
		Serial.write(data); 
		// 수신 받은 데이터를 버퍼에 저장
		buffer[bufferPosition++] = data; 
		
		// 문자열 종료 표시
		if (data == '\n') { 
			buffer[bufferPosition] = '\0';
			
			// 스마트폰으로 문자열 전송
			BTSerial.write(buffer, bufferPosition);
			bufferPosition = 0;
		}  
	}
}

 

loop문 안에서 데이터를 받아올 때는 한번에 한글자씩 받아오게 됩니다. 글자를 하나씩 받아와서 출력하고, 현재 bufferPosition에 맞게 데이터를 버퍼에 저장하고 bufferPosition을 1개 늘려줍니다.
이렇게 계속 반복하여 문자열의 끝(\n) 이 나오게 되면 버퍼의 마지막에 \0 을 넣고 버퍼에 저장된 문자열을 다시 스마트 폰으로 전송하고 버퍼를 초기화 해줍니다.

 

 

 

kocoafabeditor

항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!

블루투스 모듈, 아두이노