HMSensor 모듈을 이용한 BLE 활용법 (Bluetooth 4.0)
HMSensor는 HM-10 BLE 모듈을 여러 용도록 사용할 수 있도록 breakout 보드 위에 붙여 만든 모듈입니다. 비컨을 만들거나 센서에서 값을 읽어 자동으로 전송하는 저전력 장치, 웨어러블 장치를 만드는데 사용할 수 있도록 고안된 모듈입니다. 아두이노 없이도 HM-10 만으로 다양하게 사용할 수 있드록 주요 핀들이 외부로 노출되어 있으므로 편리합니다.
그런데 HMSensor 모듈은 일반적인 HM-10 모듈과는 기본으로 올라간 펌웨어가 틀립니다. 그래서 일반적인 HM-10 블루투스 모듈과는 약간 다르게 동작합니다. 처음 사용하신다면 어? 왜 안되지? 라고 생각할 수 있습니다.
여기서는 HMSensor라 불리우는 모듈을 이용해서 비컨 및 다양한 BLE 응용 장치를 만드는 법을 설명합니다.
주목!!! BLE 모듈을 활용하는 다양한 방법에 대한 오프라인 강의가 진행중입니다. 오프라인 워크샵 페이지에서 확인하세요!!
초기 설정
HMSensor 모듈을 입맛대로 변경하기 위해서는 AT Command 라는 약속된 커맨드를 사용해야 합니다. PC에서 이 커맨드를 보내서 블루투스를 이리저리 조작할 때는 PC ComAssistant 툴을 사용하면 됩니다. 아래 링크의 좌측 메뉴 중 PC ComAssistant 를 클릭해서 다운로드 받습니다.
http://www.huamaosoft.com/download_rom_en.asp?id=1
이 툴은 블루투스 모듈 제작사가 배포하는 툴로, 특정 COM 포트를 연결해서 받은 메시지를 보여주고 사용자가 입력한 메시지를 전달해 주는 역할을 합니다.
HMSensor 모듈과 PC가 USB로 통신하기 위해서는 FTDI(USB to UART 변환) 모듈이 필요합니다. FTDI 모듈과 HMSensor 모듈을 아래와 같이 연결합니다.
주의!!! 반드시 FTDI 모듈을 3.3V 상태로 설정하고 연결해야 합니다.
USB to UART 모듈 | HMSensor 모듈 |
3V | VCC |
TXD | RXD |
RXD | TXD |
GND | GND |
이제 PC에 FTDI 모듈을 USB로 연결합니다. USB 포트가 인식되면 PC ComAssistant 프로그램을 실행. 프로그램에서 아래 순서로 AT 라는 커맨드를 날려봅니다.
응답이 없을 겁니다.
이건 HMSensor 모듈의 기본 설정(Factory default setting) 상태에서는 UART로 전달되는 AT 커맨드를 인식하지 않기 때문입니다. 따라서 UART로 전달되는 명령어를 인식하도록 모드를 바꿔줘야 합니다.
일단은 안드로이드 폰을 이용해서 이 작업을 합니다. 안드로이드 폰에서 아래 BLE Chat 앱을 다운로드.
- 앱 다운로드(Google Play) :
https://play.google.com/store/apps/details?id=com.hardcopy.blechat
앱을 실행시키고 우측 상단의 눈 모양의 아이콘을 클릭하면 블루투스 기기를 검색할 수 있습니다. HMSensor 모듈이 보이면 연결합니다. 연결이 되면 입력창을 통해 AT 라는 커맨드를 전송해 봅니다.
OK 라고 응답이 온다면 이제 블루투스 모듈을 설정할 차례입니다. AT+MODE? 라는 커맨드를 전송. 보통 OK+Get:2 라고 오는데 현재 MODE2 로 설정되어 있다는 얘기입니다. 이걸 MODE1 으로 변경해 줘야 하므로 아래와 같이 커맨드 전송합니다.
- AT+MODE1
- OK+Set:1 이라고 응답이 오면 제대로 설정이 바뀐겁니다.
PC ComAssistant 프로그램으로 돌아가서, HMSensor 모듈에 있는 버튼(system 버튼)을 1초 이상 계속 눌러줍니다. 그럼 sleep 모드 해제되고 LED 도 깜빡입니다. 이제 다시 AT 라는 커맨드를 전송해 보세요. OK 라는 메시지가 보이면 준비가 된겁니다.
주의!!! HMSensor 는 기본 auto sleep 기능을 사용하기 때문에 AT 커맨드 한번 날리고 나면 auto sleep 에 들어가버립니다. 이게 불편하신 분은 아래 AT 커맨드를 이용해서 auto sleep 기능을 끄세요. (그래도 auto sleep 에 들어가던데..)
- AT+PWRM1
비컨 만들기
아래 명령어를 순서대로 실행. 각 명령어에 대해 OK+… 응답이 오면 됩니다.
- AT+MARJ0x1234 (iBeacon의 Major 값을 0x1234 로 설정, 16진수, 원하는 값 넣으셔도 되고 이 과정 생략해도 됨)
- AT+MINO0xFA01 (iBeacon의 Minor 값을 oxFA01로 설정, 16진수,원하는 값 넣으셔도 되고 이 과정 생략해도 됨)
- AT+ADVI5 (신호송출 간견을 5로 설정. 약 546.25 milliseconds)
- AT+NAMEDOPEY (BLE 모듈의 이름을 DOPEY 로 설정, 원하는 값으로 변경하세요)
- AT+ADTY3 (non-connectable 상태로 만듬. 절전효과)
- AT+IBEA1 (iBeacon 모드로 변경)
- AT+DELO2 (iBeacon broadcast 전용 모드로 만듬. 절전효과)
- AT+PWRM0 (Auto sleep 활성화. 소비전력이 8 -> 0.18 mAh 로 감소)
- AT+RESET (재부팅)
아래 Auto Beacon 앱을 다운로드 해서 주변 비컨을 스캔해보세요.
HMSensor 가 가진 고유 UUID (74278BDA–B644-4520–8F0C-720EAF059935) 를 가진 비컨이 검색되는지 확인하면 됩니다. 각 비컨은 고유의 UUID 값을 가지는데, 이 UUID 값을 변경하고 싶으면 아래 명령어를 활용하면 됩니다.
- AT+IBE0[para1] ==> OK+Set:[para1] (Para1: 0x00000001 ~ 0xfffffffe, default: 74278BDA)
AT+IBE012345678 : 이렇게 전송하면 iBeacon UUID 에서 붉은색으로 표시한 값이 “12345678”로 변경됨. 이하 동일. - AT+IBE1[para1] ==> OK+Set:[para1]
- AT+IBE2[para1] ==> OK+Set:[para1]
- AT+IBE3[para1] ==> OK+Set:[para1]
그리고 비컨은 Major, Minor 코드라고 불리우는 카테고리 값을 같이 전송합니다. 비컨의 용도, 위치를 구분할 목적으로 미리 설정해 두는 값입니다. 이 값을 변경하고 싶으시면 아래 커맨드를 사용하세요.
- AT+MARJ[para1]
para1 : 변경하고싶은 Major 코드 번호, 16진수
사용예) AT+MARJ0x0102 - AT+MINO[para1]
para1 : 변경하고 싶은 Minor 코드 번호, 16진수
통신 모듈로 사용하기
BLE 모듈의 가장 기본이 되는 기능은 두 기기를 블루투스로 연결해서 통신이 가능하도록 하는 것입니다. HMSensor 모듈도 이런 역할을 하도록 설정 할 수 있습니다. 하지만 HMSensor 모듈은 이런 목적으로 제작된 모듈은 아니기 때문에 권장하지는 않습니다. 통신이 필요한 경우는 HM-10 모듈을 사용하세요.
만약 앞선 비컨 만들기 예제를 따라해 보신 분이라면 아래 AT 커맨드를 통해 통신이 가능한 상태로 만들 수 있습니다.
HMSensor 가 PC에 연결된 상태에서 PC ComAssistant 툴을 이용해서 접속하세요.
- AT
OK 응답이 온다면 (만약 응답이 없으면 Reset 버튼을 1초 이상 눌러주고 다시 시도) - AT+RENEW
그러면 공장 초기화 상태가 됩니다. 이 상태에서는 HMSensor에 UART를 이용한 통신이 되지 않습니다. 핸드폰을 이용해 무선으로 접속해서 모드를 바꿔줘야 합니다. 앞서 했던 과정과 같습니다.
BLE Chat 앱을 이용해서 HMSensor에 접속하세요. 그리고 연결되면 아래 AT 커맨드로 MODE를 바꿔줍니다.
- AT+MODE1
그러면 BLE 통신 뿐 아니라 UART 를 통해 PC에서 여러가지 설정도 바꿀 수 있는 상태가 됩니다.
무선으로 GPIO 제어
HMSensor의 핀들 중 오른쪽에 있는 4개의 핀 – PIO2, PIO4, PIO5, PIO11 핀은 우리가 원하는 목적에 맞게 무선으로 제어가 가능한 핀입니다.
이 핀들을 제어하는 방법을 살펴보겠습니다. 시작하기에 앞서 HMSensor 모듈을 MODE1 그리고 PC에서 AT 커맨드를 통해 제어가 가능한 상태로 맞춰주세요.
HMSensor를 MODE1 상태로 맞춰두면 아래와 같이 유용한 특징을 사용할 수 있습니다.
- MODE1 상태에서는 2~3 번 핀(PIO2)을 OUTPUT 용도로 사용이 가능합니다. 즉 PIO2 핀의 3.3V 출력을 원격으로 on/off 제어할 수 있습니다.
- MODE1 상태에서는 4~11 번 핀(PIO4, PIO5, PIO11)을 INPUT 용도로 사용이 가능합니다. 이 핀들에 HIGH 신호를 넣으면 HMSensor가 이를 감지하고 자동으로 원격으로 연결된 디바이스에 특정 문자열을 보내줍니다. INPUT 상태를 감지하는 작업은 수 초에 한번씩 이루어지므로, 만약 버튼을 여기에 달아뒀다면 버튼을 수 초간 누르고 있어야 감지됩니다.
HMSensor 를 이용해서 원격으로 LED를 켜보죠.
먼저 LED를 470ohm 저항과 함께 PIO2 핀에 연결해줍니다.
- PIO2 – 저항 – LED – GND
원격으로 PIO 핀을 제어하는 AT 커맨드는 아래와 같은 형식을 가집니다.
- AT+PIO[para1][para2]
[para1] : 제어할 핀 번호
[para2] : 제어값 (0: 끄기 = 0V, 1: 켜기 = 3.3V)
그러므로 PC ComAssistant 툴 또는 핸드폰 BLE Chat 앱에서 HMSensor에 연결한 뒤 아래 명령어를 보내면 PIO2 핀에 연결된 LED가 켜집니다.
- AT+PIO21
반대로 LED를 끌 때는 아래와 같습니다.
- AT+PIO20
원하는대로 동작하는지 확인해보세요.
이제 반대로 HMSensor에서 버튼을 연결한 뒤, 버튼을 누르면 특정 메시지가 들어오는지 확인해보죠.
HMSensor에 버튼을 연결하는데, 버튼을 pull-down 저항을 이용해서 연결합니다. PIO4~11 핀이 버튼을 누르기 전에는 저항을 거쳐 GND로 연결된 상태를 만들고, 버튼을 누르면 3.3V 에 연결되도록 하는겁니다. 그러면 HMSensor 에서는 버튼을 누르기 전에는 PIO4~11 핀에서 LOW(0V) 값을 읽게되고 아무 일도 하지 않습니다. 반대로 버튼을 누르면 PIO4~11 핀에서 HIGH(3.3V) 값을 읽게 되므로 페어링 된 기기(혹은 UART로 연결된 기기)에 다음과 같은 메시지를 보내줍니다.
- OK+Col:80
여기서 80은 16진수 표현입니다. 10진수로 바꾸면 128이 되고, 2진수로 바꾸면 1000 0000 이 됩니다. HMSensor가 읽을 수 있는 핀이 4~11 까지 8개의 핀인데, 8개의 핀 상태를 1byte 데이터로 표현하는 겁니다.
우리가 만든 예제는 4번 핀에 버튼이 연결된 상태죠? 그러므로 버튼을 누르면 4번 핀에 해당하는 비트가 1로 바뀌어서 전송되는 겁니다.
- 4번 핀은 첫 번째 왼쪽에서 부터 봤을 때 첫 번째 비트에 표현됩니다. 그래서 아래처럼 표현됩니다.
- 1000 0000
- 이걸 16진수로 바꾸면 80이 됩니다. 그래서 HMSensor가 아래와 같은 응답을 보내주는 겁니다.
- OK+Col:80
만약 5번 핀에 연결된 버튼을 눌렀다면? 2진수 [0100 0000 ] 이 16진수 40으로 바뀌어서 전송됩니다.
- OK+Col:40
HMSensor는 11번 핀이 DHT11 과 같은 센서와 연동하도록 지정된 핀이므로 여기에 버튼을 연결해서 사용할 수는 없습니다.
더 자세한 내용은 HM-10 datasheet를 참고하시기 바랍니다.
주목!!! BLE 모듈을 활용하는 다양한 방법에 대한 오프라인 강의가 진행중입니다. 오프라인 워크샵 페이지에서 확인하세요!!
참고자료: