아두이노 블루투스
근거리 무선통신 네트워크(WPAN : Wireless Personal Area Network)
10m 이내의 짧은 거리에 존재하는 무선기기들을 연결하여 기기 간에 통신을 지원함으로써 다양한 응용서비스를 가능하게 하는 무선 네트워크 . 특징은 짧은거리, 낮은 전력 소비이다.
대표적인 WPAN 통신시스템으로는 Bluetooth통신, UWB통신, Wi-fi통신시스템이 있다.
이 중 Bluetooth통신에 대해 알아보자.
Bluetooth 통신
블루투스는 휴대폰,노트북,이어폰,헤드폰 등의 휴대기기를 서로 연결해 정보를 교환하는 WPAN의 대표적 기술 중 하나로 IEEE 802.15.1 표준으로 규격화한 기술이다.
ISM : 산업,과학,의료용으로 할당된 주파수 대역으로, 전파 사용에 대한 허가를 받을필요가 없어 저전력의 전파를 사용하는 개인 무선기기에 사용. 아마추어 무선, 무선랜, 블루투스, 무선 전화기 등이 ISM 사용
블루투스는 ISM(Industrial Scientific and Medical)주파수 대역인 2400 ~2483.5MHz를 사용하며 이 중 2402 ~ 2480MHz에서 총 79개 채널을 사용합니다. 이에 블루투스 주파수는 2.4GHz라고 한다.
2.4 GHz를 사용하는 블루투스의 경우 여러 시스템들과 같은 주파수를 사용하기 때문에 전파 간의 간섭이 생길 수 있기 때문에 블루투스는 이를 방지하기 위해 주파수 호핑 방식을 사용한다. 여기서 말하는 주파수 호핑이란 데이터를 전송할 때 79개의 채널 중 하나를 독점하여 데이터를 전송하는 방식이 아닌 빠르게 채널을 이동하며 데이터를 조금씩 전송하는 방식이다. 호핑방식을 사용하는 이유는 하나의 채널로 연결하여 데이터를 보낼 경우 다른 주파수와 간섭이 생길 수 있기 때문이다. 이 때문에 블루투스는 앞서 말한 79개의 채널을 1초당 1600번 호핑 (Hopping)하여 데이터를 전송한다.
아두이노에서는 시리얼모니터에서 AT커맨드라는것을 사용해 블루투스와의 통신을 합니다.
실습 :
#include <SoftwareSerial.h>
#define BT_RXD 8
#define BT_TXD 7
SoftwareSerial bluetooth(BT_RXD, BT_TXD); //블루투수 설정 BTSerial(Tx,RX)
void setup() {
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop() {
if(bluetooth.available()){ // bluetooth값을 읽어서 Serial에
Serial.write(bluetooth.read());
}
if(Serial.available()){ //Serial의 값을 읽어서 bluetooth에
bluetooth.write(Serial.read());
}
}
블루투스 통신에서는 'line ending 없음'으로 바꿔줘야합니다.
블루투스 연결이 잘 되었는지 시리얼모니터로 확인해봅시다
블루투스 version에 따라 AT 명령어가 다릅니다.
블루투스 1.8
Serial에서 블루투스에 보낼 명령어 | 블루투스 응답 |
AT | OK |
AT+VERSION | 아두이노버전(HC-06-**) |
AT+NAME[설정할 이름] | OKsetNAME |
AT+PIN설정할비밀번호 or AT+PIN[설정할비밀번호] | OKsetPIN |
AT+ROLE=M 또는 S | OK:ROLE:M 또는 S |
AT : UART연결 확인
AT+NAME : 초기값 HC-06, 블루투스 디바이스 이름 설정
AT+PIN : 초기값 1234 블루투스 디바이스 비밀번호 변경
AT+BAUD : 초기값 9600 , UART 전송속도 설정
보드레이트값 | 응답 |
1 | OK1200 |
2 | OK2400 |
3 | OK4800 |
4 | OK9600 |
5 | OK19200 |
6 | OK38400 |
7 | OK57600 |
8 | OK115200 |
9 | OK230400 |
A | OK460800 |
B | OK921600 |
C | OK1328400 |
AT+VERSION : 펌웨어 버전 확인
1.8인 경우 시리얼 모니터 창 하단의 No Line ending으로 설정
3.0인 경우 Both NL&CR로 설정
AT명령어가 잘 입력되고 응답도 잘 온다면 블루투스 연결은 잘 된겁니다
2개의 블루투스 연결하기
2개의 블루투스를 연결하기 위해서는 블루투스의 MODE를
1개의 블루투스는 MASTER, 1개는 SLAVE로 설정해야 합니다.
AT명령어를 이용해 MODE를 설정합니다. 블루투스 설정 후에는 블루투스 모듈을 재시작(VCC를 빼준다음 다시 넣기) 합니다.
MASTER,SLAVE가 있을 경우 블루투스 모듈은 자동으로 연결을 합니다.
연결하는동안에는 모듈의 led가 반짝이다가 연결이 완료되면 led가 켜집니다.
SLAVE,MASTER 모두 다음과 같은 코드를 사용합니다.
#include <SoftwareSerial.h>
#define BT_RXD 8
#define BT_TXD 7
SoftwareSerial bluetooth(BT_RXD, BT_TXD); //블루투수 설정 BTSerial(Tx,RX)
void setup() {
Serial.begin(9600);
bluetooth.begin(9600);
}
void loop() {
if(bluetooth.available()){ // bluetooth값을 읽어서 Serial에
Serial.write(bluetooth.read());
}
if(Serial.available()){ //Serial의 값을 읽어서 bluetooth에
bluetooth.write(Serial.read());
}
}
연결이 잘 되었다면 Serial을 통해 MASTER에서 보낸 값은 SLAVE에서 보이고
SLAVE에서 보낸 값은 MASTEr에서 보입니다.
아이폰은 아래방식대로 실습이 안되니
https://brilliantdevelop.tistory.com/23를 참고해주세요.
실습. 스마트폰으로 블루투스 제어하기 (안드로이드 only)
playStore에서 'Custom Bluetooth Controller'를 다운받습니다.

SETUP을 클릭합니다.

ADD Control을 선택합니다.

Button을 클릭합니다.

Button의 Commands 는 아두이노에 전달할 명령어, 그 외에는 버튼의 UI변경 설정입니다.



SAVE 버튼을 눌러 저장합니다.

홈화면에서 다시 CONNECT를 눌러 블루투스에 연결합니다. led버튼을 눌러보세요..

소스코드 :

실습 : 버튼을 누르고 있으면 켜지고 떼는 순간 꺼지도록 해봅시다.

Button,Toggle,Slider,Color Picker, Joystick을 사용해봅시다.
Serial in은 Serial에서 받은 값출력, Serial out은 bluetooth에서 Serial로 값 전달.
실습 : Serial out과 Serial indmf 활용해 데이터를 주고 받아봅시다.
(if (Serial.available()) { // 시리얼모니터에서 보낸 내용은 블루투스로 전송
bluetooth.write(Serial.read());
}를 활용합시다.
실습 : toggle을 이용해 led ON/OFF를 조절해봅시다.
문제 1: Color Picker를 사용해 3색 RGB를 제어해봅시다.
블루투스에서 전달된 값은 16진수로 2자리 수씩 읽어서 10진수로 변환합니다.

문제 2: slider를 이용해 피에조부저를 제어해봅시다.
문제 3. 피아노를 만들어봅시다.
문제 4. joyStick을 이용해 서보모터를 제어해봅시다.
문제 5. Serial in을 통해 조도센서, 온습도 센서를 표기하세요.