코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
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 |
#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
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!