2020-11-17 update log: 결선도 오류 수정
블루투스모듈 HC05를 아두이노에서 사용하는 방법입니다.
준비물
- 아두이노 우노
- 블루투스 모듈 HC-05(ZG-B23090W)
- 점프케이블
- 저항 1kΩ, 2kΩ
HC-05
아두이노 실습용으로 가장 많이사용하는 블루투스 모듈로는 HC05, HC06 두가지가 있는데 이 두가지 모듈의 차이점에 대해서 설명한 자료들은 많기 때문에 생략하고 제가 가지고 있는 HC05 모듈에 대해서 간략히 정리합니다.
블루투스는 마스터기기와 슬레이브기기가 서로 쌍으로 연결이되어 통신을하도록 되어 있는데 쉽게 생각해서 스마트폰으로 음악을 들을때 핸드폰이 마스터기기가 되고 블루투스 이어폰이 슬레이브기기가 되는식입니다. HC05는 마스터와 슬레이브 역할을 모두 할수 있는 모듈입니다.
주요 스펙
Bluetooth 버전: 2.0 EDR
Bace: csr BC417 라디오 + MX 29LV800CBXBI-70G 메모리
펌웨어 버전: 2.0-20100601
동작모드: AT mode, 통신모드
AT모드 기본 통신속도: 38400
통신모드 기본 통신속도: 9600
입력전압: 5V
동작전압: 3.3V
민감도: -80dBm
전송출력: +4dBm
HC05 모듈 사용시 주의할 부분이 있는데요. 바로 모듈의 동작전압이 3.3V라는 겁니다. 모듈동작을 위해서 입력되는 전압은 5V이지만 모듈은 3.3V로 동작하기 때문에 RX/TX 핀에서 시그널도 3.3V로 동작하는데요. 문제는 아두이노의 디지털핀 출력전압이 5V라는겁니다. 그래서 HC05모듈의 RX핀에 시그널을 아두이노 TX핀과 직결하면 HC05모듈에 무리가 갈 수 있습니다. 저도 잘 모르고 그냥 테스트를 해보기도 했었는데 다행히 고장이 나지는 않았지만 주의가 필요한 부분입니다.
그리고 스펙중에 민감도, 전송출력이라는 항목도 있는데요. 무선으로 정보를 주고받는 장치이다보니 신호를 얼마나 강력하게 쏘고 오는 신호를 얼마나 잘 수신할 수 있는지를 보여주는 수치인데 dBm이라는 단위로 표시되어 있네요.
dBm 단위
간단히 dBm에 대해서 알아보면 신호의 강도를 표현하는 단위로서 소리의 크기를 표현할 때 사용하는 dB에 m이 붙어있는 형태이고 이건 1mW의 신호를 기준으로 상대적인 신호의 세기를 표시합니다. 그래서 표현하고자 하는 신호의 강도를 "P"라고 했을 때 dBm을 구하는 공식은 아래와 같이 쓸 수 있습니다.
예를들면 1 mW = 0 dBm, 10 mW = 1 dBm, 100 mW = 20 dBm 으로 계산이 되는것이죠.
그래서 전송출력 4dBm의 성능이라는건 와트로 변환을 해보면 약 2.51mW라는걸 알수 있습니다. (BT Class 2 라는거죠)
AT 모드, AT 명령어
HC-05 모듈을 본격적으로 사용하기 전에 사전에 모듈의 세팅이 필요한 경우가 있습니다. 예를들어 BT 페어링 비번을 바꾼다거나 모듈의 이름을 고친다거나 아니면 통신 속도를 조절한다거나하는 작업이 있을 수 있는데 그럴때 사용하는것이 AT명령어입니다. HC-05모듈은 2가지 동작모드가 있습니다. 일반적인 상황에서 BT를 연결해서 통신하는 통신모드가 있고 AT명령어를 사용할 수 있는 AT모드가 있는데 AT모드로 진입하기 위해서는 전원을 인가할 때 모듈 하단에 있는 버튼을 눌러주면 됩니다.
AT명령어 및 사용방법은 뒤에서 알아보도록 하겠습니다. 자세한 내용은 하단의 Datasheet를 참고하시면 되겠습니다.
Datasheet
워낙 널리 쓰이는 모듈이라서 Datasheet를 찾아보면 무수한 자료들이 쏟아집니다. 그리고 뭐가 원본인지도 모르겠는데 유용할 것 같은 자료들중 많이 보이는것들 4가지만 모아봤습니다.
HC-05뿐만 아니라 HC-06모듈에 대한 특성도 나와 있는 자료입니다. 두 모듈의 차이를 정리한 표도 있습니다.
HC-05모듈에 대한 간략 사용법을 정리한 문서입니다.
공식 Datasheet같은 느낌의 문서입니다. AT명령어가 상세히 정리되어 있습니다.
HD-05모듈의 사용법을 설명한 또다른 문서입니다.
Hardware
HC-05 모듈을 사용하기위한 회로구성입니다. 앞서 스펙에서 살펴본봐와 같이 HC-05모듈은 3.3V로 동작하는 모듈이기 때문에 모듈로 가는 모든 전압이 3.3V가 넘지않도록 주의해서 회로를 구성해야 합니다.
Software
먼저 HC-05모듈을 AT모드로 진입시켜줍니다. 아두이노보드가 USB에 연결되어 있는 상태에서 HC-05 VCC로 들어가는 전원핀을 잠깐 뽑았다가 HC-05의 AT모드 진입용 스위치를 누르고 있는 상태에서 다시 연결을 합니다. 그러면 AT모드로 진입했다는 표시로 HC-05모듈의 LED가 2초 정도 간격으로 천천히 깜빡입니다. (통신모드에서는 빠르게 점멸합니다.)
그리고 아두이노에는 아래 코드를 업로드합니다.
/*
Name: BT_Module.ino
Created: 2020-05-12 오전 9:41:01
Author: everyX
*
* AT모드 전환: 6번 핀 위의 버튼을 누른채 VCC선을 뺐다가 다시 꼽아주기
* LED가 2초마다 점멸시 AT모드
*/
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(9, 8); //Rx, Tx (HC05 모듈 통신용)
void setup() {
Serial.begin(38400);
BTSerial.begin(38400);
}
void loop() {
if (BTSerial.available()) // 1. HC05모듈에서 입력되는 신호를
Serial.write(BTSerial.read()); // 아두이노 시리얼로 전달
if (Serial.available()) // 2. 아두이노로 입력되는 신호를
BTSerial.write(Serial.read()); // HC05모듈로 전달
}
코드는 아주 간단한데요 내용은 아두이노의 시리얼 포트(0, 1번 핀)로 들어오고 나오는 모든 신호를 SoftwareSerial포트인 8, 9번 핀으로 그대로 전달해주는 역할을 하는 그런 코드입니다.
HC-05모듈의 AT모드 기본 통신속도가 38400이기 때문에 시리얼포트 속도를 모두 38400으로 통일했습니다.
펌웨어도 준비가되고 HC-05도 AT모드로 들어갔다면 컴퓨터에서 시리얼 모니터를 열어줍니다. 시리얼 모니터의 통신속도도 38400으로 동일하게 세팅되었는지도 확인해야 겠죠. 마지막으로 터미널의 설정이 CR&LF로 해줍니다. 그리고 시리얼 창에 "AT"라는 명령어를 보냈을 때, "OK"가 돌아온다면 잘 연결된것입니다.
이제는 AT명령어를 통해서 모듈을 세팅해보겠습니다. AT명령어의 종류는 무수히 많지만 중요한 몇가지만 언급하도록 하겠습니다. 나머지는 Datasheet를 참고해 주세요.
AT+VERSION?
펌웨어의 버전을 확인하는 명령어입니다.
AT+NAME?
BT모듈의 이름을 확인하는 명령어입니다. 이름을 변경하려면 ? 대신 변경하고자 하는 이름을 입력해주면 됩니다. (Ex: AT+NAME=MyBT)
AT+ROLE?
모듈의 동작 옵션 확인하는 명령어입니다. "AT+ROLE=1" 로 동작옵션을 바꿀수 있어요.
0-Slave, 1-Master, 2-Slave-loop
AT+PSWD?
BT PIN 번호를 확인하는 명령어입니다. "AT+PSWD=1234" 로 비번을 변경할 수 있습니다.
AT+UART?
시리얼 통신속도를 확인하는 명령어입니다. ? 대신 Baudrate, Stop bit, Parity 파라미터를 사용해서 통신속도를 변경할 수 있습니다.
(Ex: AT+UART=115200,1,0)
저는 이부분 때문에 나중에 BT가 연결되고 나서 메시지가 깨지는 문제가 생겨서 고생을 했는데요. 제 모듈은 Stopbit가 1이아니라 0이 기본으로 설정되어 있었습니다. AT모드에서는 아무런 문제가 없는데 통신모드에서 글씨가 깨지는 문제가 발생한다 하시면 이부분 확인해보세요.
결과
자 이제 모든 준비가 끝났습니다. BT를 통해서 시리얼 데이터를 주고받는 가장 기본적인 실습을 해보겠습니다. 하드웨어의 회로 구성은 그대로 둔 상태에서 HC-05모듈의 전원핀만 뽑았다가 다시 꼽아서 AT모드가 아니라 일반적인 통신모드로 부팅하도록 해줍니다. 통신모드에서는 HC-05의 LED가 빠르게 깜빡거립니다.
다음으로 핸드폰에 시리얼 모니터 앱을 설치해서 핸드폰에서 보낸 메시지가 BT모듈을 넘어 무선으로 전달이 된후에 아두이노를 통해 PC의시리얼 모니터로 나타나는지 확인해 보겠습니다.
구글 플레이 스토어에서 "Serial Bluetooth Terminal"이라는 앱을 찾아서 깔아줍니다. 동일한 기능을 하는 다양한 앱들이 있지만 제가 보기에 이게 GUI가 가장 깔끔해 보여서 이걸로 선택했습니다.
앱을 실행시키기전에 먼제 스마트폰의 BT를 켜고 HC-05모듈과 페어링을 시켜줍니다. 앞에서 AT모드에서 설정했던 모듈 이름과 PIN번호를 가지고 페어링을 하면되고 페어링이 되었으면 Serial Bluetooth Terminal을 실행시켜줍니다.
메뉴에서 "Devices"를 선택해서 통신에 사용할 디바이스를 선택합니다. 아까 페어링한 HC-05모듈을 선택해 줍니다.
디바이스를 선택했으면 터미널 화면으로 다시 돌아갑니다. 화면 상탄에 쓰레기통 아이콘 옆에 플러그모양이 있는데 눌러서 연결을 해줍니다. 그럼 화면에는 "Connecting to HC-05 ..."라는 메시지와 함께 연결이 되고 분리되어 있던 아이콘은 결합된 모양으로 변하게 됩니다.
첨에는 보시는것처럼 전송되는 메시지가 다 깨지는 문제가 있었습니다. 인코딩의 문제인줄 알고 이것저것 시도해봤으나 결국 HC-05모듈의 설정에 문제인걸 발견했습니다. 위의 AT명령어에서 잠깐 언급을 했었는데 "AT+UART" 설정의 잘못되어 있었습니다. 이걸 고쳐주고나니 아래처럼 깔끔하게 PC와 스마트폰의 시리얼 데이터를 잘 전달이 되고 있습니다.
짜란~ 이상 아두이노에서 HC-05 블루투스 모듈을 사용하는 방법이었습니다.
끝!
'Hardware > MCU(Arduino,ESP8266)' 카테고리의 다른 글
ESP-01 모듈용 아두이노 쉴드 제작 (2) | 2020.06.14 |
---|---|
와이파이 모듈 ESP8266-01의 모든것 (13) | 2020.06.12 |
아두이노, 미세먼지 센서 + Time Timer 하나로 합치기 (0) | 2020.05.06 |
아두이노 + 자외선(UV) 센서 모듈 사용법 (0) | 2020.05.02 |
댓글