[아두이노] 블루투스 HC-06 연결하기
아두이노를 공부하기 위해서 여러가지 준비를 하다가
블루투스를 연결을 해보려고 인터넷을 검색해 보니
HC-06 쉽게 접할 수 있는 블루투스였습니다.
그래서 구매를 했죠 ^^
gmarket에서 12500원에 구매를 했는데 처음 연결해 봅니다.
인터넷에서 찾은 아두이노 블루투스 연결 예제를 보고 다음처럼 회로를 구성 했습니다.
VCC, GND를 연결하고 TXD는 3번, RXD 2번에 연결 하였습니다.
전원을 연결하니 HC-06에서는 빨강LED가 깜빡깜빡 거리기 시작했습니다.
아두이노 소스[예제1]를 컴파일하고 업로드 했습니다.
스케치의 시리얼모니터를 켜고 몇가지 명령을 전송했습니다. 다음과 같은 결과가 나옵니다.
스마트폰에서 HC-06을 연결하여 통신이 오고 가는 것을 보았습니다.
구글 플레이에서 BENA BTerm 을 검색해서 설치하고 HC-06에 접속해 봅니다.
1) 블루투스에 접속합니다.
2) 접속되었습니다.
3) 앱 메뉴를 열고 Bluetooth Management 선택합니다.
4) 관리 메뉴가 보입니다.
5)CONNECT TO를 선택합니다. 검색된 항목이 보입니다.
5) ATD1223... 을 선택합니다. 연결되었습니다.
6) 시리얼모니터에서 텍스트를 입력하고 전송버튼을 누릅니다.
7) 스마트폰에 시리얼모니터에서 입력한 텍스트가 찍혀 보입니다. 서로 통신이 된 것입니다.
[예제1]
#include <SoftwareSerial.h>
#define rxPin 2
#define txPin 3
SoftwareSerial SwSerial(txPin, rxPin);
char data;
void setup() {
Serial.begin(9600);
SwSerial.begin(9600);
Serial.println("Ready..");
}
void loop() {
// 시리얼 버퍼를 비운다.
Serial.flush();
Serial.print("cmd : ");
// 버퍼에 값이 들어올 때 까지 대기.
while(!Serial.available());
// HC-06 으로 명령어를 날린다.
while(Serial.available()) {
data = Serial.read();
if(data == -1) break;
SwSerial.print(data);
Serial.print(data);
// 시리얼 통신에서는 9600bps 기준으로
// read 를 사용할 때 1ms 의 딜레이를 줘야 한다.
delay(1);
}
Serial.println();
// HC-06에서 처리할 시간을 준다.
delay(1000);
Serial.print("return : ");
// HC-06 으로 부터 받아온 리턴 값을 출력한다.
while(SwSerial.available()) {
data = SwSerial.read();
if(data == -1) break;
Serial.print(data);
delay(1);
}
Serial.print("\n\n");
}
[예제2]
#include <SoftwareSerial.h>
#define PIN_RX 2
#define PIN_TX 3
SoftwareSerial gSoftSerial(PIN_TX, PIN_RX);
const char* gMenu = "HC-06 Settings.\n1) name\n2) pin\n3) baud rate\n4) Version\n";
const char* gMenuBaud = "1) 1200\n2) 2400\n3) 4800\n4) 9600\n5) 19200\n6) 38400\n7) 57600\n8) 115200\nNote: If you modify baud rate, must be modified together code.\n( gSoftSerial.begin(baud rate) in seting() function. )\n";
const char* gMsgName = "> Name : ";
const char* gMsgPin = "> pin(4 digits only) : ";
const char* gMsgInvalidCmd = "Please enter a valid command.\n\n";
const char* gMsgResponseError = "Error : No response from HC-06.\n\n";
const char* gCmdPin = "AT+PIN";
const char* gCmdName = "AT+NAME";
const char* gCmdBaud = "AT+BAUD";
const char* gCmdVer = "AT+VERSION";
char gInChar;
char gSelectMode = 0;
char gCharBuffer[256];
void setup() {
gSoftSerial.begin(9600);
Serial.begin(9600);
}
void loop() {
Serial.print(gMenu);
Serial.print(">");
clearBuffer();
gInChar = readStr(0)[0];
if(gInChar < '1' || gInChar > '4') {
Serial.print(gMsgInvalidCmd);
gSelectMode = 'a';
} else {
gSelectMode = gInChar;
}
if(gSelectMode == '1') {
Serial.print(gMsgName);
clearBuffer();
strcat(gCharBuffer, gCmdName);
readStr(strlen(gCmdName));
Serial.println(gCharBuffer);
sendCmd(gCharBuffer);
}
else if(gSelectMode == '2') {
Serial.print(gMsgPin);
clearBuffer();
strcat(gCharBuffer, gCmdPin);
readStr(strlen(gCmdPin));
Serial.println(gCharBuffer);
sendCmd(gCharBuffer);
} else if(gSelectMode == '4') {
clearBuffer();
strcat(gCharBuffer, gCmdVer);
Serial.println(gCharBuffer);
sendCmd(gCharBuffer);
}else if(gSelectMode == '3') {
Serial.print(gMenuBaud);
Serial.print(">");
clearBuffer();
gInChar = readStr(0)[0];
if(gInChar < '1' || gInChar > '8') {
Serial.print(gMsgInvalidCmd);
gSelectMode = 'a';
} else {
clearBuffer();
strcat(gCharBuffer, gCmdBaud);
uint8_t len = strlen(gCharBuffer);
gCharBuffer[len] = gInChar;
gCharBuffer[len + 1] = '\0';
Serial.println(gCharBuffer);
sendCmd(gCharBuffer);
}
}
}
void sendCmd(char* cmd) {
Serial.println();
gSoftSerial.write(cmd);
for(uint8_t i = 0; i < 5; ++i) {
delay(200);
Serial.print('.');
}
if(!gSoftSerial.available()) {
Serial.print(gMsgResponseError);
} else {
while(gSoftSerial.available()) {
delay(10);
Serial.print((char)gSoftSerial.read());
}
}
Serial.println("\n");
}
char* readStr(uint8_t offset) {
uint8_t index = offset;
while(!Serial.available());
while(Serial.available()) {
delay(10);
gInChar = Serial.read();
gCharBuffer[index] = gInChar;
Serial.print(gInChar);
index++;
}
Serial.print("\n");
return gCharBuffer;
}
void clearBuffer() {
memset(gCharBuffer, '\0', 256);
}
[아두이노] 블루투스 HC-06 연결하기
'아두이노' 카테고리의 다른 글
[아두이노] 이클립스에 C 언어 툴 설치하기 (0) | 2015.09.19 |
---|---|
[아두이노] LED 저항값 계산하기 (0) | 2015.09.18 |
[아두이노] LED 깜박임과 펄스로 불이 서서히 꺼지고 껴지는걸 동시에 합니다. (0) | 2014.12.19 |
[아두이노] setup과 loop (0) | 2014.12.18 |
[아두이노] 시작하기 (3) | 2014.12.16 |