고급 예제

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

안드로이드와 아두이노 간의 블루투스 통신 기초

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

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

초급, 블루투스, 통신, 아두이노

여쌩 2015-01-02 14:37:42


안녕하세요 방학동안 통신에 대해 실습하고있는 학생입니다
블루투스 연결을 하기위해 pincode 000000을 하고 안드로이드 기기에 등록은 잘 됩니다
등록 후 올려두신 어플을 이용하여 연결을 누를 시 오류가 뜨면서 어플이 꺼집니다 
이유 좀 알 수 있을까요??

kocoafab 2015-01-02 15:57:29

어플에서 연결이 끊어지는 경우는 어플에서 블루투스와 제대로 연결이 되지 않았기 때문입니다.
(어플을 만들 때 블루투스 연결 중 오류가 발생하면 자동으로 어플이 종료되도록 했습니다.)

안드로이드에서 블루투스 연결시 해당 블루투스 모듈과 제대로 연결이 되었는지 확인하고, 맞으신 경우 연결된 블루투스 모듈을 한번 뺏다가 다시 껴보신 후 다시 어플을 실행해 보시기 바랍니다.

기본 블루투스 모듈 같은 경우는 1:1 통신이기 때문에 연결이 제대로 종료가 되지 않았을 경우 다른 곳에서 연결이 되지 않습니다.

강주영 2015-03-16 14:51:27

안녕하세요. 졸업작품준비하는 학생입니다.
혹시 BT_Test.apk 오픈소스 구할수 있을까요?
이걸 토대로 BT통신관련 어플리케이션을 만들어보려고합니다.

ktmdgus 2015-04-06 21:48:14

아두이노에서 블루투스 상태값을 받는 소스에서 혹시 페어링이 완료되었다는 신호를 아두이노에서 받고 그 신호가 오면 모터를 제어 하는 신호를 보낼 수가 있을까요?? AT 명령어중에 루프문 써서 계속 상태값을 받아와서 디폴트값만 나오다가 페어링이 됬을때 그 페어링 신호가 오면 모터를 제어 하는 소스를 짜고싶은데 가능한건지 알고싶네요 ㅠ 시간되면 ktmdgus@naver.com 이나 댓글로 답변좀 부탁드릴게요

김선호 2015-05-02 00:11:47

앱이 종료 되는 것 없이 연결은 잘 되는데 텍스트가 전송이 안되네요
왜그러는 걸까요

옺옺 2015-09-08 16:39:12

안녕하세요! 게시물이 정말 도움이 많이 되었습니다.! 너무너무 감사합니다!
다름이 아니라 이 게시물을 기반으로 졸업작품을 진행하고 있는 학생입니다!
혹시 민폐가 되지 않는다면 BT_Test.apk 소스를 공유 받고 싶습니다.
연락기다리겠습니다. 감사합니다.

오현석 2015-10-23 14:31:13

안녕하세요 안드로이드 공부중인데 apk 파일 프로젝트 받을수있을까요?ohs11244@naver.com 으로 보내주시면 감사하겠습니다

변수현 2015-12-03 17:53:23

감사합니다 여기가 제일 도움이 되네요 ㅜㅠ

김연주 2015-12-22 16:54:27

Bluetooth controller 라는 앱도 좋네요! 들어가셔서 기기 HC-0x로 시작하는거 기기검색해서 연결하신다음에, 비밀번호 0000이나 1234하시면 됩니당

박진형 2016-01-12 16:09:23

안녕하세요~ 좋은글 감사합니다!
글을 읽다 궁금한게 있어서 질문드립니다~

안드로이드에서 아두이노로 3개의 정수값을 보내고 싶을때
byte[]의 각 인덱스에 그 정수값을 넣고 보내게 된다면,

아두이노측에서 수신을 받을때 어떻게 처리가 되나요??
아니면 따로 수신 처리를 해줘야하나요?

답변 주시면 감사하겠습니다~
아직 초보라 모르는게 많아 양해 바랍니다^^

원기옥 2016-02-17 13:29:29

블루투스 3.0 이하는 일반 소켓 통신이라고 보시면 됩니다. 즉 byte stream으로 보낸것 그대로 전달되며, 안드로이드에서 어떠한 타입의 데이터로 읽기를 원하느냐에 따라 맞는 클래스를 wrapping 해서 사용하면 됩니다.

박남혁 2016-02-23 17:28:20

안드로이드 소스코드를 메일로 요청드려도 될까요? hot.chuu@gmail.com 감사합니다.

이대현 2016-05-09 21:25:12

안녕하세요.
컴퓨터를 전공하는 학생입니다.
안드로이드에서 블루투스를 통해 센서값을 받는 과정이 필요하여 도움을 요청합니다.
혹시 안드로이드 소스코드를 얻을 수 있을까요?
메일은 leedh1499@naver.com 입니다

윤민규 2016-05-11 19:16:15

안녕하세요 이번에 안드로이드 블루투스 통신연습하려고 하는데 안드로이드 소스코드좀 얻을 수 있을까요 ㅠㅠ 공부하고싶습니다 alsrb36541@naver.com 입니다.

황호빈 2016-07-01 07:46:06

저번엔 문자송신이 되었는데 이번에 다시하니까 ㅁㅁㅁ 이렇게 나오네요
왜 그런지 알려주세요.

미키 2016-07-01 08:09:20

혹시 시리얼 모니터 통신속도 설정이 잘못되어 있는지 확인해 보세요 ^^

황호빈 2016-07-01 08:19:45

통신속도를 9600으로 설정했는데도 계속 ㅁㅁㅁ 이렇게 나와요 ㅜ.ㅜ

윤명식 2016-08-15 22:19:42

안드로이드 스튜디오와 아두이노같이 공부하는데 안드로이드 코드를 알고싶습니다
yms0059@naver.com 보내주시면 감사하겠습니다

한상준 2016-08-16 14:53:41

pulseoximeter 제작중입니다. 안드로이드 어플소스 공유해 주비면 감사하겠습니다.
sjhahn@kaist.ac.kr

정유성 2016-08-22 12:40:01

안녕하세요 컴퓨터 전공하는 학생입니다. 안드로이드 블루투스 통신 연습하려고 하는데
안드로이드 소스코드를 메일로 요청드려도 될까요? wjd1004109@naver.com 감사합니다.

강상호 2016-09-07 16:17:10

감사합니다

김성래 2016-10-12 12:25:47

안녕하세요 안드로이드 어플소스가 필요한데 공유 요청드려도 될까요? ㅠㅠ
ksr315@naver.com 입니다.

유용민 2016-10-18 12:10:02

안녕하세요! 공부를 하는중에 아두이노와 안드로이드를 블루투스로 연동시키는 부분에서 어플쪽으로 빈번히 막히고있는 학생입니다. 어플개발을 위해 안드로이드 어플 소스가 필요한데 공유해주심 정말 감사하겠습니다!
ho6133@naver.com입니다 ! 부탁드리겠습니다!

변해영 2016-11-01 19:25:11

안녕하세요!! 안드로이드 어플 공부하는 학생입니다
제가 안드로이드스튜디오와 아두이노 우노보드를 이용해서 블루투스 통신으로 센서값을 받아 출력하려고 합니다.
아무리찾아봐도 안드로이드에서 블루투스 통신이 안되고 앱이 자꾸 중지되고 너무 급하기도하고 궁금해서 글을 남기게 되었습니다. 가능하다면 안드로이드스튜디오 블루투스 통신 어플 소스를 요청드리고 싶습니다..
xunyong2@naver.com 입니다 꼭 부탁드립니다 ㅠㅠ

joonguk90 2017-03-01 16:54:02

안녕하세요. 아두이노를 사용하여 프로젝트를 진행하고 있습니다.
아두이노에서 측정한 센서값을 블루투스 통신으로 안드로이드 어플리케이션에 전송하여 데이터를 처리하려고 합니다.
안드로이드 어플리케이션 소스코드 보내주시면 감사하겠습니다.
이메일 주소 입니다. joonguk90@naver.com

김건우 2017-03-17 16:27:00

안녕하세요.. 이번에 아두이노를 이용해 졸업작품을 만들고 있습니다.

아두이노에서 처리한 결과값을 블루투스 통신을 이용해 안드로이드 어플리케이션에 전송하려 합니다..

안드로이드 스튜디오 소스 코드좀 보내주시면 감사하겠습니다..

이메일 주소 : rlarjsdn9288@naver.com 입니다.. 감사합니다...

kyu 2017-03-27 17:28:01

안녕하세요. 아두이노를 이용해 졸업작품을 만들고 있습니다

안드로이드 소스 코드 부분이 궁금해서 그런데 소스 코드좀 보내주시면 감사하겠습니다..

tigerk9212@gmail.com

세화 2017-04-27 18:39:05

안녕하세요 저희는 컴퓨터공학을 전공하는 학생입니다.
저희가 작성자 분과 유사한 내용을 공부하고 있습니다.
안드로이드 소스코드 부분이 궁금해서 그런데 메일로 보내주시면 감사하겠습니다.
koungs21@naver.com 부탁드립니다.

신승완 2017-06-01 13:36:17

안녕하세요 소프트 웨어학과에서 공부하고 있는 학생입니다.
블루투스를 이용하여 아두이노에서 센서값을 휴대폰으로 보내는 작업을 하고있는데 잘안되서 찾다보니 여기를 찾게 되었습니다.
안드로이드 소스코드 부분이 궁금해서 그런대 메일로 보내주시면 감사하겠습니다.
akkdu@naver.com입니다.

최인재 2017-06-03 20:11:27

안녕하세요! 현재 아두이노와 안드로이드 블루투스 통신에 대해서 공부중입니다.
자이로 센서 값을 읽어와서 안드로이드에서 처리를 하고 싶은데요.
안드로이드 소스코드 부분이 궁금합니다. 메일로 보내주시면 감사하겠습니다!
eois@naver.com

dbddbd 2017-06-06 14:11:32

안녕하세요 저는 지금 아두이노와 안드로이드 블루투스 통신에 대해 졸업프로젝트를 진행중입니다.
안드로이드 소스코드 부분을 공부하는 도중에 어려움이있어서 도움을 받고 싶습니다.
안드로이드 소스코드를 메일로 보내주심ㄴ 감사하겠습니다.
sinyoonmi@naver.com

이선형 2017-06-08 00:28:08

안녕하세요 아두이노에 블루투스 모듈을 연동하여 안드로이드 스튜디오를 통해 어플을 만들었습니다. 아두이노에서 보내는 신호를 어플 상에 띄우고 싶은데 값이 전송되질 않습니다ㅠㅡ... 소스 받아서 비교해보고 싶은데 보내주실 수 있나요? 메일은 tjrwodl2000@naver.com 입니다.

구자민 2017-06-14 16:00:30

안녕하세요! 안드로이드와 아두이노의 블루투스 통신을 이용한 기기를 제작하는 중인 대학생입니다. 아두이노 쪽은 마무리되어가고 있는데 안드로이드 쪽 지식이 부족하여 완성을 하지 못하고 있는 상황에 처해있습니다. 이 글에서의 안드로이드 소스코드를 보고 해당 파트를 공부해보고자 합니다. wkals0807@gmail.com 으로 소스 코드를 보내주시면 정말 감사하겠습니다 ㅠㅠ

권형택 2017-07-06 13:10:19

감사합니다!

꺽다리 2017-07-26 22:12:43

안녕하세요. 센서값을 읽어 들여 안드로이드에서 보여주는 프로젝트를 진행중입니다. 온,습도 센서값을 받아와 안드로이드에서 시각화하도록 구현하는 중인데 BT_Test.apk 코드를 참고하면 안드로이드 시각화를 하는데 많은 도움이될거 같습니다. redhot83@naver.com

오발탄 2017-08-01 05:24:13

센서값을 읽어 들여 안드로이드 앱 화면에 보여주는 부분이 궁금합니다. BT_Test.apk 소스 코드를 부탁드려도 될까요? 공부하는데 도움이 많이 될 것 같습니다. ost5156@hanmail.net

볼볼리 2017-08-02 21:56:29

안녕하세요 좋은 정보 공유해주셔서 감사합니다. 혹시 관련된 소스코드를 이메일로 보내주실 수 있나요? 참고하여 해보면 도움이 많이 될 것 같습니다. choiyn1994@naver.com 입니다!

공부하자 2017-08-11 19:34:54

안녕하세요. 좋은 정보 감사합니다.안드로이드와 아두이노의 블루투스 통신을 이용한 기기를 제작 중인 대학생입니다. 안드로이드 소스를 만들어야하는데 이 쪽 지식이 부족하여 어려움을 겪고 있습니다. tnekdla@naver.com으로 소스 코드 보내주시면 감사하겠습니다...

skehroqkf 2017-08-18 14:45:38

안녕하세요 아두이노와 안드로이드 통신을 공부중인 학생입니다. 안드로이드에서 데이터 수신받는 소스가 너무 궁금합니다 메일로 보내주실수 있을까요? jsm119jsm@naver.com 부탁드립니다!

DongHyen 2017-08-19 14:14:56

안녕하세요. 좋은 정보 감사합니다. 저는 아두이노와 안드로이드 통신을 공부중인 대학생입니다. 안드로이드와 아두이노 통신과정을 공부하는데 막힘이 많고 공부하는데 어려움이 많습니다. 혹시 안드로이드 소스를 가능하시면 보내주실수 있으신가요. 공부하는데 많은 도움이 될 거 같습니다. zzune94@naver.com

hellosunworld 2017-08-28 11:40:02

안녕하십니까! 이번에 아두이노에 대해 프로젝트를 하던 도중,
아두이노 블루투스를 이용하여 아두이노에서 값을 얻어와 안드로이드에 데이터를 수신을 받아야 하는
어려움을 겪게 되었습니다... 정말 실례가 되지 않는다면 혹시 안드로이드 소스를 보내주실 수 있으실 까요..?
정말 부탁드립니다... 메일은 hellosunworld@naver.com 입니다!! 꼭 부탁드립니다. ♥

윤주성 2017-09-01 13:33:45

안녕하세요!! 이번에 안드로이드와 아두이노 블루투스통신을 이용하여 작품제작중에 어려움이 있습니다.
안드로이드 소스 BT text apk의 안드로이드 소스를 받아보고 싶습니다. 부탁드립니다ㅠㅠㅠ. 감사합니다.
bestword1@naver.com

장광수 2017-09-20 13:16:34

안녕하세요^^ 안드로이드와 아두이노 블루투스통신을 제어하고 싶은데요.
혹시 죄송하지만 안드로이드 소스 BT text.apk의 소스를 받아보고 싶습니다. 가능할까요?
부탁드립니다. suntok@naver.com

아인 2017-09-25 16:26:54

안드로이드에서 블루투스로 아두이노에 값을 전송하는 방법을 알고싶습니다ㅜㅠ
가능하다면 BT_test.apk 소스코드를 받을 수 있을까요??
ain5977@hanmail.net으로 부탁드립니다...

딩오코 2017-10-07 19:05:18

안녕하세요 졸업작품으로 안드로이드와 아두이노 블루투스통신을 제어하고 싶은데요.
혹시 죄송하지만 안드로이드 소스 BT text.apk의 소스를 받아보고 싶습니다. 가능할까요?
부탁드립니다. jki192@naver.com로 부탁드립니다!

다오다 2017-11-06 23:10:44

안녕하세요 캡스톤디자인으로 안드로이드와 아두이노 블루투스통신을 제어하고 싶은데요...
혹시 죄송하지만 안드로이드 소스 BT text.apk의 소스를 받아보고 싶습니다. 가능할까요?
부탁드립니다. aslm94@naver.com로 부탁드립니다

최준호 2017-11-13 04:01:10

안녕하세요! 종합설계 관련하여 akp 소스 참고가 필요할 듯 합니다!! 공유 가능할까요?? premium501@naver.com입니다.. 부탁드리겠습니다!!!