블루투스 모듈 (BLE module, iBeacon)
주목!!! 저전력 블루투스인 BLE 모듈의 기초와 활용에 대한 오프라인 강의가 진행중입니다. BLE 모듈을 이용한 통신, 비컨 및 웨어러블 장치 만들기의 기본을 실습을 통해 배우실 수 있습니다.
.
1. BLE (Bluetooth Low Energy) 모듈
BLE(Bluetooth Low Energy) 모듈은 저전력으로 동작하는 블루투스 모듈입니다. 굳이 가격이 비싼 이 모듈을 HC-06 대체용으로 사용할 이유는 별로 없지만 IoT, 웨어러블 프로젝트를 계획하고 계신다면 저전력 때문에라도 BLE 모듈을 이용하셔야겠습니다. 이 모듈은 master/slave 로 설정해서 사용할 수 있고 전원만 넣어주면 별도의 MCU 없이 데이터 통신과 간단한 동작이 가능합니다. 칩은 TI – CC2540 을 사용합니다.
BLE 모듈은 iOS/Android 를 지원하지만 안드로이드는 v4.3(젤리빈) 이상에서만 지원됩니다.
제가 테스트 한 제품은 아래 링크에 있는 제품입니다. (아마도 HM-10 으로 판매되는 제품과 호환 모듈인듯 합니다)
http://www.ebay.com/itm/231189452585?_trksid=p2059210.m2749.l2649&ssPageName=STRK%3AMEBIDX%3AIT
• BT Version: Bluetooth Specification V4.0 BLE
• Send and receive no bytes limit
• Working frequency: 2.4GHz ISM band
• Modulation method: GFSK(Gaussian Frequency Shift Keying)
• RF Power: 0.01mw-5mw, can modify through AT
Command AT+POWE
• Speed: Asynchronous: 6K Bytes, Synchronous: 6K Bytes
• Security: Authentication and encryption
• Service: Central & Peripheral UUID FFE0,FFE1
• Power: +3.3VDC 50mA
• Open space have 100 Meters with iphone4s
• Power: In sleep mode 400uA~1.5mA, Active mode 8.5mA.
• Working temperature:–5 ~ +65 Centigrade
• Dimension: 26.9mm x 13mm x 2.2mm
.
2. AT command
BLE 모듈은 AT 커맨드를 통해 다양한 설정과 제어가 가능합니다. MCU, PC 혹은 전용 앱과 무선으로 연결해서 AT 커맨드 실행이 가능합니다. AT 커맨드는 AT+XXX 형태로 string을 전송하면 됩니다. (대문자만 사용!!) 그러면 BLE 모듈에서 OK+XXX string 형태로 해당되는 응답을 줍니다. 모듈은 출고될 때 아래와 같이 default setting을 가지고 있습니다.
Name: HMSoft; Baud: 9600, N, 8, 1; Pin code: 000000; Peripheral Role; transmit mode
초기 세팅이 transmit mode 입니다. BLE 모듈은 아래와 같이 3가지 모드를 가지고 있습니다.
On Transmit version: 모듈이 다른 기기와 연결되지 않았을 경우만 UART 를 통해 AT Command 설정이 가능
On Remote version: 모듈이 다른 기기와 연결되지 않았을 경우 UART 를 통해 AT Command 설정이 가능, 연결되었을 경우는 연결된 기기에서 AT Command 설정 가능
On PIO collection version: Only accept AT Command from UART interface when Bluetooth device is not connected with remote device. (이 부분이 좀 이상하네요. transmit 모드와 차이가 없는데…)
.
일반 AT Command
테스트 커맨드 : AT ==> OK (or OK+LOST)
Advertising interval 쿼리 : AT+ADVI? ==> OK+ Get:[Para] (Para: 0~9 까지 지정된 값을 리턴)
Baud rate 쿼리 : AT+BAUD? ==> OK+Get:0 (Para: 0~8까지 지정된 값을 리턴. 기본은 0 (9600))
Baud rate 설정 : AT+BAUD1 ==> OK+Set:1 (Para: 0~8까지 지정된 값으로 baud rate 설정)
Pin 코드(비번) 설정 : AT+ PASS[para1] ==> OK+Set:[para1] (Para1: 000000~999999, default: 000000)
설정 reset : AT+RENEW ==> OK+RENEW
Master/Slave 모드 변경 : AT+ROLE[para1] ==> OK+Set:[para1] (Para1: 0, 1 , 0: Peripheral, 1: Central, Default: 0)
.
iBeacon AT Command
iBeacon switch 쿼리 : AT+IBEA? ==> OK+Get:[para1] (Para: 0 또는 1 리턴, 0 – iBeacon off, 1 – iBeacon on)
iBeacon switch 설정 : AT+IBEA[para1] ==> OK+Set:[para1] (Para: 0 또는 1 리턴, 0 – iBeacon off, 1 – iBeacon on)
iBeacon service mode 전환 : AT+BUSHU ==> OK+BUSHU
iBeacon service mode 설정 전에 iBeacon switch on 설정을 먼저 해줘야 합니다!! iBeacon UUID (고유ID) 74278BDA–B644-4520–8F0C-720EAF059935 로 설정됩니다.
iBeacon UUID 변경 : UUID 는 총 16 바이트입니다. 이걸 4바이트씩 끊어서 설정할 수 있습니다. 따라서 UUID 설정하는 AT 커맨드가 4가지입니다. 설정할 때 16진수를 표시하는 8자리 string으로 합니다.
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]
iBeacon Major version 변경 : AT+MARJ[para1] ==> OK+Set:[para1] (Para1: 0x0001~0xFFFE, Default: 0x FFE0)
AT+MARJ0x0102 ==> OK+Set:0x0102
iBeacon Minor version 변경 : AT+MEAS[para1] OK+Set:[para1] (Para1: 0x0001~0xFFFE, Default: 0x FFE1)
iBeacon Measured power 변경 : AT+MEAS[para1] ==> OK+Set:[para1] (Para1: 0x0001~0xFFFE, Default: 0x FFE1)
이상은 자주 사용되는 AT 커맨드만 예시한 것입니다. 이 외에도 AT Command를 이용해서 PIO 제어(핀 제어)를 하거나 데이터 전송을 자동으로 하는 등 훨씬 다양한 작업이 가능하므로 상세 내용은 아래 링크를 참고하세요.
http://www.tinyosshop.com/datasheet/Tinysine%20Serial%20Bluetooth4%20user%20manual.pdf
.
3. iBeacon 설정 방법
이제 모듈을 iBeacon 기기로 바꾸는 방법을 보겠습니다. 이 과정을 위해서는 모듈에 AT command 를 사용해서 동작방식을 바꿔줘야 합니다. PC, 폰에서 전용 앱을 사용하거나(이 경우 판매자가 해당 앱 다운로드 제공) 아두이노를 이용할 수 있습니다. 여기서는 아두이노를 이용해서 설정을 바꿔보겠습니다.
아두이노는 PC와 연결된 상태에서(USB serial 로) D2, D3 핀을 이용해서 블루투스 모듈과 연결합니다. 그리고 블루투스 모듈과의 통신은 SoftwareSerial을 사용합니다.
연결방법 : (아두이노 -> BLE 모듈) D2 -> TX, D3 -> RX, 5V -> VCC, GND -> GND
그리고 아두이노에 아래 소스코드를 올립니다.
#include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port mySerial.begin(9600); } void loop() // run over and over { // Receive from bluetooth and send it to PC if (mySerial.available()) Serial.write(mySerial.read()); // Receive from PC and send it to bluetooth if (Serial.available()) mySerial.write(Serial.read()); }
소스를 보시면 아시겠지만 간단한 에코 시스템 만드는겁니다. USB를 통해 PC에서 받은 데이터를 BLE 모듈로 보내주고, BLE에서 받은 데이터는 PC로 보내주는 코드입니다. 이 코드를 컴파일해서 올리고 [아두이노 IDE -> 도구 -> 시리얼 모니터] 를 실행하면 시리얼 모니터에 입력하는 값이 BLE로 전송되고 BLE에서 전송받은 데이터가 아래에 표시됩니다. 시리얼 모니터를 이용해서 AT Command를 전송하면 BLE 모듈을 설정할 수 있습니다.
비컨이 정상적으로 설정되었는지 테스트 하기 위해서는 iBeacon 스캐너 앱이 필요합니다. 하드카피월드에서 제작한 아래 앱 다운로드 받고 사용하시면 됩니다.
준비가 되었으면 아래 순서대로 비컨 설정해보세요.
- BLE와 아두이노를 위 설명대로 연결.
- 소스코드를 컴파일 및 업로드
- 업로드 완료되면 시리얼 모니터 실행 (아두이노 IDE -> 도구 -> 시리얼 모니터)
- 아래 붉은 글씨로 적힌 AT command 를 순서대로 입력합니다. 커맨드가 제대로 설정된 경우 OK… 와 같은 응답이 시리얼모니터에 표시됩니다.
- 시리얼 모니터에 AT+RENEW 입력 (공장초기화)
- AT+RESET (BLE 모듈을 리셋)
- AT (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 (재부팅)
- iBeacon scanner 앱을 이용해서 비컨 검색
- 고유 UUID (74278BDA–B644-4520–8F0C-720EAF059935) 를 가진 비컨이 검색되는지 확인
- 만약 검색되지 않으면 5~16 과정을 다시 실행하고 OK… 응답이 정상적으로 오는지 확인 해보세요.
- 중간에 응답에 문제가 있다면 펌웨어 버전 문제일 수도 있습니다. [링크]에 있는 문서 참고하셔서 펌웨어 업데이트를 최신으로 해보세요.
iBeacon 정상적으로 설정되면 Auto Beacon 앱으로 검색했을 때 아래와 같이 default UUID를 가진 비컨이 보입니다.
UUID(16byte), Major code(2byte), Minor code(2byte)를 이용해서 비컨들 각각을 구분할 수 있습니다. 위에서 HM-10 모듈의 default UUID 값이 74278BDA–B644-4520–8F0C-720EAF059935 로 설정되어 있다고 했는데 이는 iOS AirLocate 를 사용하는 앱과의 호환성을 위해서입니다. 아래 UUID 들이 AirLocate 와 호환성을 가지는 UUID 입니다. 이경우 각각의 비컨의 구분은 Major(카테고리), Minor(기기 고유번호) 코드를 변경하시면 됩니다.
- E2C56DB5-DFFB-48D2-B060-D0F5A71096E0
- 5A4BCFCE-174E-4BAC-A814-092E77F6B7E5
- 74278BDA-B644-4520-8F0C-720EAF059935 (HM-10 Default)
- 112ebb9d-b8c9-4abd-9eb3-43578bf86a41
- 22a17b43-552a-4482-865f-597d4c10bacc
- 33d8e127-4e58-485b-bee7-266526d8ecb2
- 44f506a4-b778-4c4e-8522-157aac0efabd
- 552452fe-f374-47c4-bfad-9ea4165e1bd9
제가 사용한 BLE 모듈은 auto sleep 모드에서 평균 0.18mA의 전력을 소비합니다. 알카라인 전지 3개가 1800mAh 라고 가정하면 약 10,000 시간을 버틸 수 있고, 1년이 넘게 사용 가능합니다. 크기를 위해 240mAh CR2032 코인 전지를 사용하면 약 55일을 사용할 수 있습니다. 위에 적은 순서대로 iBeacon 전용 모드로 설정할 경우 소비전력이 좀 더 줄어서 더 오래갈 것으로 예상합니다.
주의!! : BLE(HM-10) 모듈이 auto-sleep 모드로 들어가면 (AT+PWRM0 커맨드와 AT+RESET 커맨드 이후) AT command 에 응답하지 않는 상태가 됩니다. 모듈을 깨우기 위해서는 아무 문자나 80자 이상 입력해서 전송하면 됩니다. 그러면 OK+WAKE 응답이 올겁니다. 그리고 AT+PWRM1 커맨드를 보내서 auto sleep 모드르 끄고 작업하세요. 작업이 끝나면 다시 AT+PWRM0 커맨드로 auto sleep 모드를 활성화 하면 됩니다.
.
4. BLE – 안드로이드 통신 방법
(예제 및 상세내용 준비중입니다!!)
참고 : HM-10 iBeacon howto, HM-10 iBeacon 개조과정, HM-1x BLE 지원 홈페이지, Biscuit firmware(펌웨어 개조), http://redbearlab.com/blemini/(펌웨어 관련 정보), iBeacon 개론, HM-10 Datasheet, HM-10 Firmware, USB Serial adapters, USB Serial adapters 2, USB Serial adapters 3, Locate iBeacon for iOS(iBeacon 위치 확인 앱), iBeacon Scanner for Android,
펌웨어 업그레이드 및 관련 툴 다운로드 : http://www.jnhuamao.cn/index_en.asp?ID=1
주목!!! 저전력 블루투스인 BLE 모듈의 기초와 활용에 대한 오프라인 강의가 진행중입니다. BLE 모듈을 이용한 통신, 비컨 및 웨어러블 장치 만들기의 기본을 실습을 통해 배우실 수 있습니다. 오프라인 워크샵 페이지에서 확인하세요!!