본문 바로가기
아두이노 통신

[통신/BLE] BLE / iBeacon을 아두이노에서 구현하게 해주는 HM-10

by 작동미학 2015. 3. 13.
반응형

HM-10모듈을 통해 Arduino에서 BLE / iBeacon을 구현해보자.

 

▶ 이 가이드를 따라하면,

- HM-10으로 BLE 기능을 구현할 수 있다.

- HM-10의 AT commands를 사용해 iBeacon을 구현할 수 있다.

 

▶ 부품 설명 및 회로 구성

HM-10 모듈은 1만원 미만의 가격으로 BLE(Bluetooth Low Energy/블루투스 4.0 최신버전 스펙)를 구현할 수 있게 해준다. BLE는 전 버전의 블루투스에 비교해 매우 짧은 pairing(연결구성)과 낮은 전력소모로 알려져있다. 그리고 iBeacon이라는 주기적인 브로드캐스팅 스펙을 가지고 있다. iBeacon에 대해서는 별도의 글을 참고하자.

의외로 HM-10 모듈은 여러가지 버전이 있다. 기본적으로 Texas Instrument의 CC254x 칩을 기반으로 하지만, 여기서는 아래 부품을 기준으로 한다. 납땜이 되지 않은 모듈은 3.3V기반이므로, UNO에서 사용하기 위해서는 아래처럼 핀이 달린 것을 사자. 5V 사용가능하도록 구성되어 있다.

<HM-10 모듈 앞뒷면, VCC-5V, GND-GND, TX->D2, RX->D3핀에 연결하면 된다>

기본적인 배선이나 소스코드는 HC-06과 동일하다. 역시 TX/RX를 거꾸로 연결하는데 주의하자. 정상적으로 전원이 연결되면 빨간색 불이 깜빡이는 상태가 된다.

<HM-10 모듈을 UNO에 연결한 예시>

 

블루투스 모듈이 깜빡이는 상태, 즉 블루투스 연결 전 상태일때는 AT*명령에 의하여 해당 모듈을 제어할 수 있다. AT라고 명령을 보내면 OK라는 응답이 떨어지고 기타 다른 몇가지 제어 명령이 가능하다. 간단하게는 아래와 같고 세부 명령 내역은 데이터쉬트나 매뉴얼 링크(http://www.seeedstudio.com/wiki/Bluetooth_V4.0_HM-11_BLE_Module)를 참조한다. 간단한 명령을 소개해보면 다음과 같다.

 

AT : 응답가능여부확인

AT+NAMExxx: 이름 변경

AT+NAME?: 이름 표시

AT+VERS?: 버전표시

 

블루투스 연결이 이루어지고 난 후는 위 제어명령은 작동하지 않고, 해당 시리얼로 보낸 내용이 반대편 블루투스 연결된 기기쪽으로 송신되고 반대로 수신내용은 역시 시리얼로 수신 가능하다. 소스 소개 란에서 상세히 살펴보자

 

▶ 소스 코드 입력 및 구동

아래 소스를 컴파일하여 작동시키고, 9600bps로 시리얼 모니터를 작동시키자(CTRL+SHIFT+M).

송신 모듈 소스 원본 GitHub 링크 : https://github.com/bbangpan/bbangpan.com/blob/master/neibc_hc06/neibc_hc06.ino

http://www.bbangpan.com ----------------------------------

/* Originally posted on www.bbangpan.com

Program Description: HC-06 bluetooth 2.0 / HM-10 BLE test code

DataPin : 2,3 to TX, RX of HC-06(cross connection)

Tested on : Arduino 1.0.6, Arduino UNO R3, HC-06 or HM-10 BLE

 

Copyright (c) 2015 www.bbangpan.com. All rights reserved.

This program can be used for any non-commercial purpose freely. */

 

#include <SoftwareSerial.h>

 

SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)

 

void setup()

{

Serial.begin(9600);

Serial.println("Hello!");

 

// set the data rate for the BT port

BTSerial.begin(9600);

}

void loop(){

while (BTSerial.available()){ // if BT sends something

byte data = BTSerial.read();

Serial.write(data); // write it to serial(serial monitor)

}

 

while (Serial.available()){ // if Serial has input(from serial monitor)

byte data = Serial.read();

BTSerial.write(data); // write it to BT

}

 

}

-------------------------------------------------------

아직 블루투스끼리 연결하지 않은 상태(HM-10의 불이 깜빡이는 상태)에서 AT를 입력해보자. 반응이 없으면 몇 번 더 입력해본다. iBeacon상태로 들어가 sleep된 경우는 80글자 이상의 아무글자열이나 넣으면 다시 깨어난다. 이때 AT+RENEW를 입력하고 AT+RESET하면 리부팅되어 다시 공장 초기 상태로 돌아간다.

<Serial Monitor 구동 후 AT를 쳐서 전송하면 HM-10이 보낸 OK를 볼 수 있다>

버전을 조회해보자(AT+VERS? 입력하고 엔터)

OK옆에 버전이 나온다. 이번에는 실제로 블루투스를 연결하여 통신해보자. 아이폰의 경우에는 BLE가 가능한 LightBlue를 다운받아 설치하고, 안드로이드의 경우에는 MSMBLE를 다운받자. 여기서는 LightBlue를 중심으로 설명한다.

 

LightBlue를 실행하면, HMSoft가 감지되고, 이를 선택하면 깜빡이던 HM-10의 불이, 계속 켜진 상태로 바뀐다.

<LightBlue를 실행하여 HMSoft를 선택한다. 편의상 표기 형식은 HEX를 눌러 UTF-8로 바꾼다(세번째화면)>

표기형식을 UTF-8로 바꾼 후에, 데이터를 받아보기 위해 Listen을 선택해보자.

<데이터를 받기 위해 Listen을 선택한다>

<시리얼 모니터 창에서 test를 친 후 전송한다>

test가 수신된 것을 볼 수 있다(화면 중앙).

<test수신 화면>

이번에는 해당 화면 하단의 Write new value를 누른 후 hi를 보내본다. 그러면 시리얼 모니터 창에 hi가 보인다.

<hi를 친 후 보낸다>

<시리얼모니터 화면에서 해당 hi메세지를 볼 수 있다>

▶ iBeacon활성화

이번에는 HM-10의 iBeacon을 활성화해보자. 실행하던 BLE 앱을 죽여서 pairing을 취소시키면, HM-10의 불이 다시 깜빡인다. 이후 AT 명령을 통해 아래와 같이 차례대로 입력한다. 여기 방법은 http://www.blueluminance.com/HM-10-as-iBeacon.pdf 를 참조했다.

 

AT+RENEW ß 공장 초기화

AT+RESET ß HM-10 리붓

AT ß 시험 작동

AT+MARJ0x1234 ß iBeacon의 Major number설정 (0x1234는 임의값 설정 가능)

AT+MINO0xFA02 ß iBeacon의 Minor number설정 (0xFA02는 임의값 설정 가능)

AT+ADVI5 ß advertising(신호 송출) 주기를 5로 설정(약 0.5초)

AT+NAMEBBANGPAN ß HM-10 이름 정의 (BBANGPAN은 임의값 정의 가능)

AT+ADTY3 ß 전원 절약을 위해 맺지않음(non-connectable)모드로 설정

AT+IBEA1 ß iBeacon을 활성화

AT+DELO2 ß iBeacon의 broadcast-only 로 설정

AT+PWRM0 ß 전원 절약을 위해 auto-sleep으로 설정(최소 절전 모드)

AT+RESET ß 리붓하여 반영

 

상기와 같이 입력하면 아래 화면처럼 이어져서 출력이 보이게 된다. 정상 셋팅되었다.

<iBeacon이 되기 위한 입력>

iBeacon이 활성화되면 HM-10의 깜빡이는 불이 꺼지는데, sleep모드로 들어간 경우, 다시 AT명령을 입력하기 위해서는 80글자 이상을 입력해주면 깨어나서 AT명령 입력이 가능하다. 공장 초기치로 되돌리려면 AT+RENEW하고 AT+RESET을 하면 초기 모드로 들어간다.

일단 iBeacon활성화 상태에서 확인을 위해서는 아이폰은 iOS iBeacon locate앱을, 안드로이드는 iBeacon detector를 설치해서 실행해보면 아래와 같이 가까이에 iBeacon을 볼 수 있다. 거리 계산하는 알고리즘을 통해 0.32m 근처에 있음을 알게된다.

<아이폰 locate앱, iBeacon이 잡힌다>

참조로 iBeacon을 식별하는 UUID 변경이 가능한데

 

UUID: AAAAAAAA-BBBB-BBBB-CCCC-CCCCDDDDDDDD 의 형식의 경우에 아래와 같이 AT명령을 통해 변경 가능하다

AT+IBE0AAAAAAAA

AT+IBE1BBBBBBBB

AT+IBE2CCCCCCCC

AT+IBE3DDDDDDDD

 

상기 정보 정도를 변경하여 주변의 iBeacon 감지 앱을 활성화하고 해당 짧은 정보를 전송할 수 있다.

 

▶ 구매 가이드

HM-10 : http://www.aliexpress.com/item/Free-shipping-HM-10-transparent-serial-bluetooth-4-0-bluetooth-serial-port-module-with-logic-level/32276092839.html 를 참조한다.

 

강의 키워드

아두이노 블루투스 4.0, 스마트 블루투스, Smart Bluetooth, BLE, Bluetooth Low Energy, iBeacon, 아이비콘, HM-10, HM-10 at명령

 

 

반응형