코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2015-03-16 15:11:41
* 이 컨텐츠를 보시기 전에 안드로이드와 아두이노 간의 블루투스 통신 기초를 보고 오시기 바랍니다.
안드로이드와 아두이노 간의 블루투스 통신 기초에서 아두이노 블루투스 모듈을 이용하여 안드로이드와 블루투스 통신을 해보았습니다. 이제부터 간단한 예제들을 통해서 아두이노의 각 부품들을 제어해 보겠습니다.
이 컨텐츠에서는 안드로이드에 버튼을 하나 띄워서 그 버튼을 누를시 오렌지 보드에 내장 LED(13번 LED)를 깜박이는 예제를 실습해 보겠습니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | |
2 | 블루투스 모듈 | 1 | HC-05 |
3 | 브레드보드 | 1 | |
4 | 점퍼케이블 | 4 |
부품명 | 오렌지 보드 | 블루투스 모듈 | 브레드보드 | 점퍼케이블 |
파트 |
`
#include <SoftwareSerial.h> // 블루투스 통신을 위한 SoftwareSerial 라이브러리를 불러온다.
SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)
byte buffer[1024]; // 데이터를 수신 받을 버퍼
int bufferPosition; // 버퍼에 데이타를 저장할 때 기록할 위치
boolean temp = 0;
void setup(){
BTSerial.begin(9600);
Serial.begin(9600);
pinMode(13, OUTPUT);
bufferPosition = 0; // 버퍼 위치 초기화
}
void loop(){
if (BTSerial.available()){ // 블루투스로 데이터 수신
byte data = BTSerial.read(); // 수신 받은 데이터 저장
Serial.write(data); // 수신된 데이터 시리얼 모니터로 출력
buffer[bufferPosition++] = data; // 수신 받은 데이터를 버퍼에 저장
if(data == '1'){ // 블루투스를 통해 '1' 이 들어오면
if(temp == 0){ // LED가 꺼있을 경우 LED를 켭니다.
digitalWrite(13, HIGH);
temp = 1;
}else{ // LED가 켜져있을 경우 LED를 끕니다.
digitalWrite(13, LOW);
temp = 0;
}
}
if(data == '\n'){ // 문자열 종료 표시
buffer[bufferPosition] = '\0';
bufferPosition = 0;
}
}
}
우선 아두이노에 블루투스 모듈을 연결하고 위의 코드를 업로드 합니다. 아두이노에서는 이 두 과정만 하면 준비가 완료됩니다.
아두이노 준비가 완료되었으면, 그다음으로는 블루투스 모듈과 스마트폰을 페어링 합니다. 디바이스 설정 -> 블루투스를 들어가셔서 검색을 누르시면 맨 왼쪽 화면과 같이 목록이 나옵니다. 그중에서 블루투스 모듈을 찾아서 선택합니다.(위에서 사용한 블루투스 모듈은 HC-05입니다.)
블루투스 모듈을 선택하면 가운데 사진과 같이 PIN번호를 입력하는 화면이 나옵니다. 여기에 1234나 0000을 입력하신 후 확인을 누르세요.(HC-05는 1234를 입력하시면 됩니다.)
PIN번호를 입력하셧으면 마지막 사진과 같이 등록된 기기에 블루투스 모듈이 있는것을 확인할 수 있습니다. 여기까지 하셧으면 블루투스 모듈과 스마트폰 사이에 페어링이 완료 되었습니다.
그다음 링크를 통해 블루투스로 LED를 제어할 안드로이드 어플(BT_Button1.apk)을 받으신 후, 실행하시면 등록된 블루투스 모듈 목록이 나옵니다. 이 목록에서 자신의 블루투스 모듈을 선택합니다. 그러면 밑의 화면과 같이 나옵니다. LED Control 버튼을 누르시면 아두이노 내장 LED의 불이 켜집니다.(13번 LED)
if (BTSerial.available()){ // 블루투스로 데이터 수신
byte data = BTSerial.read(); // 수신 받은 데이터 저장
Serial.write(data); // 수신된 데이터 시리얼 모니터로 출력
buffer[bufferPosition++] = data; // 수신 받은 데이터를 버퍼에 저장
if(data == '1'){
if(temp == 0){
digitalWrite(13, HIGH);
temp = 1;
}else{
digitalWrite(13, LOW);
temp = 0;
}
}
스마트폰에서 버튼을 누르게 되면 '1'이라는 문자값을 보냅니다.( ★ 숫자 1이 아닙니다.) 아두이노에서는 블루투스를 통해 신호가 들어오면 data라는 변수에 저장하고, 이 값을 비교해서 '1'일 경우엔 LED를 제어하고 그 외일 경우는 무시합니다.(안드로이드 어플에서 다 제어해서 보내므로 1아니면 \n(엔터)값만 들어오게 됩니다.)
LED의 상태값을 저장하기 위해 temp 변수를 선언하여 LED가 켜져있을 경우 temp값은 1로, LED가 꺼져있을 경우 temp값을 0으로 저장 합니다.
이 컨텐츠를 응용하여 아두이노의 다른 부품을 제어하실 경우 버튼을 누를 때 '1' 문자값이 오는것을 기억하시고 이를 이용해서 if문을 통해 제어하시면 됩니다.(안드로이드 어플을 수정하실 수 있으신 분은 댓글로 문의 남기시면 어플 코드를 직접 보내드립니다.)
* 다음 컨텐츠는 블루투스를 이용하여 아두이노 3색 LED를 각각 제어해 보겠습니다.(Seekbar or Button)
kocoafabeditor
항상 진취적이고, 새로운 것을 추구하는 코코아팹 에디터입니다!