HC-06, HC-05 정도로 뭉뚱그려져서 불리는 것 같지만 블루투스 모듈을 쓰다보면 수많은 변종이 있다는걸 알게된다. 사용자 입장에서 가장 크게 체감하는 부분은 다음의 네 가지이다.
1. 기본 설정(통신 속도, 이름, 패스워드, 모드(역할))
2. AT 모드 진입 방법
3. AT 커맨드 종류
4. 입력 전압 및 로직 전압
5. 블루투스 버전
블루투스 모듈마다 조금씩 차이가 있는 이유는 모듈의 구조 때문이다. 보통 아두이노와 함께 사용하는 블루투스 모듈은 아래 그림과 같이 chip, daughter board, breakout board 세 가지가 모여 만들어진다.
각 단계의 부품을 어떤 것을 쓰느냐에 따라 위의 네 가지 사항이 달라지는데, 제조사가 다양하고 짝퉁도 많기 때문에 비슷하게 생긴 블루투스 모듈이라도 조금씩 차이가 발생한다. 하지만, 처음 보는 블루투스 모듈이라도 daughter board와 breakout board의 모델명만 안다면 어렵지 않게 사용할 수 있다.
Daughter board의 모델명을 알면 1, 3, 5번을 알 수 있고, breakout board를 알면 2, 4번을 알 수 있다. 블루투스 모듈을 사용하는대로 사용법에 대한 기록을 아래에 남길 것이다.
Daughter board
위에서 설명했듯이 daughter board의 모델명을 알면 기본 설정, AT 커멘드 종류, 블루투스 버전을 알 수 있다. 모델을 구분하는 방법은 AT command mode로 진입한 후에 이름과 펌웨어로 구분하는 것이 가장 확실하다.
HM-10
Huamao Technology 에서 만들어져서 HM인듯 하고, HM-01부터 HM-15까지 존재한다.
클릭하면 확대
기본 세팅
- Chipset: TI CC2541 (BLE 4.0)
- 펌웨어: HMSoft Vxxx
- 통신: 9600 baud, N, 8, 1
- 이름: HMSoft
- 패스워드: 000000
- 모드: Peripheral(Role0), transmit mode
AT 커맨드
- 형식: <AT+CMD><?> /<AT+CMD><PARAM> // Get을 위해서는 물음표가 붙어야 하며, 줄바꿈 문자가 없다
로직 레벨은 0과 1을 인식하는 전압을 의미한다. 아두이노를 사용할 때 보통 1 (High)는 5V를 의미하고 0 (Low)는 0V를 의미한다. 하지만, 4.8V를 입력하면 아두이노는 1로 인식하지 못한다는 것은 아니다.
아두이노에 사용되는 ATmega328의 datasheet을 보면 다음과 같다.
- voltage lower than 0.3*VCC = LOW - voltage higher than 0.6*VCC = HIGH
아두이노는 보통 5V 이상에서 구동되므로 3V 이상이면 1, 1.5V이하이면 0으로 인식한다. 1.5V~3V 전압은 0일지 1일지 장담할 수 없다.
문제는 3.3V 로직 레벨을 가진 장치가 5V의 신호를 받게 되면 터져버릴 수도 있다는 것이다. 예를 들어, 5V 로직 레벨을 사용하는 아두이노의 GPIO를 3.3V 로직 레벨을 사용하는 ESP8266의 GPIO에 직접 연결하면 ESP8266의 GPIO가 손상될 수 있다.
혹은 1.8V 로직 레벨을 가진 장치의 High 신호를 아두이노는 High로 인식하지 못할 수도 있다. 1.8V는 확실히 1이라고 할 수도 없고 확실히 0이라고 할 수도 없는 애매한 영역에 속하기 때문이다.
이와 같은 경우에 로직 레벨을 바꿔주는 변환기가 필요하다. 저항으로 전압분배기를 만들어 로직 레벨을 바꿔주는 방법도 있지만 0과 1 사이에서 신호가 빠르게 바뀌는 통신에서는 저항으로 인해 transient time이 길어지며 문제가 생길 수 있다. 그래서 안정적인 작동을 위해서라면 logic converter를 사용하는 것이 좋다.