반응형

블루투스 4.0 BLE 모듈은 일반 블루투스 모듈(bluetooth 2.0) 모듈과  사용방법은 비슷하나 각 제품마다 또는 펌웨어 버전마다  제공하는 AT 명령이 상이하여 정확한 제품명을 확인할 필요가 있을 수 있으며, AT+HELP 명령을 통하여 명령어를 확인하여야 한다. 

 

아두이노와 모듈간의 연결에 관하여 언급하자면, 아두이노는 TTL level 5V 를 사용하나 HM-10 복제품류(CC41, BT05, MLT-BT05) 등은 TTL level 3.3V를 사용하므로 레벨 쉬프트를 위하여 모듈 RX측(아두이노 TX) 연결시 저항을 연결해 주라고 권고하고 있다. 하지만 필자는 아직까지 TTL 레벨 쉬프트를 위해 저항을 연결 해 본적은 없다.  대부분 잠깐동안(길어야 하루 정도) 테스트 정도이며 전송되는 데이타 양도 많지 않아 아직까지 모듈이 고장 나거나 하는 경험을 하지 않았으나 몇일씩 또는 영구적으로 사용하며 전송되는(아두이노 -> 모듈) 누적 데이터 양이 많은 경우에는 TTL 레벨 쉬프트를 고려 해 보아야 할 것이다. 

DX-BT05-A 4.0 AT Commands (Chinese).pdf
다운로드
레벨 쉬프트 예제

현재 판매되는 블루투스 4.0 BLE 모듈중에는 모듈명과 실제 모듈명이 다른 경우가 있으며 사용중인 AT-09의 경우 AT 명령으로 이름을 확인해보면 BT05로 표기 된다.

 

아두이노에서 블루투스 4.0 BLE 모듈 사용시 bluetooth 2.0 모듈과의 기본적인 차이점으로 시리얼 모니터 사용시 Both NL & CR 옵션을 선택한 상태에서 명령어를 입력해야 한다는 것이다. Both NL & CR 옵션을 선택하고 bluetooth 2.0 모듈과 같이 AT를 입력하고 엔터를 치면 연결상태 확인 응답으로 OK가 반환된다.

 

간혹 AT 명령어를 입력했으나 반응이 없는 경우에는 우선 아두이노 시리얼 모니터 창을 종료시키고 다시 모니터를 연다음 실행해 보기를 바란다. 이유는 모르겠으나 아두이노 시리얼 모니터가 스스로 종료되어 입력해도 입력도 안되고 수신도 안되는 상태인 경우가 자주 발생 했었다. 이런 상태에서 핸드폰에서 모듈에 데이터를 전송하면 문제없이 작동되나 아두이노 시리얼 모니터에서 어떠한 메세지도 볼 수 없다. 추정하기로 아두이노 IDE에서 일정 시간후 사용이 없으면 시리얼 모니터를 내부적으로 종료 시키는 듯 싶다.

 

OK 응답을 확인한 후 AT+HELP 명령을 입력하면 AT-09(BT05)의 경우 아래와 같은 명령어를 확인 할 수 있다.

 

********************************************************************
* Command             Description            *
* ---------------------------------------------------------------- *
* AT                      Check if the command terminal work normally  *
* AT+RESET            Software reboot    *
* AT+VERSION       Get firmware, bluetooth, HCI and LMP version *
* AT+HELP             List all the commands            *
* AT+NAME           Get/Set local device name                    *
* AT+PIN               Get/Set pin code for pairing                 *
* AT+PASS             Get/Set pin code for pairing                 *
* AT+BAUD             Get/Set baud rate                    *
* AT+LADDR            Get local bluetooth address    *
* AT+ADDR             Get local bluetooth address    *
* AT+DEFAULT          Restore factory default    *
* AT+RENEW            Restore factory default    *
* AT+STATE              Get current state    *
* AT+PWRM             Get/Set power on mode(low power)    *
* AT+POWE             Get/Set RF transmit power    *
* AT+SLEEP            Sleep mode                    *
* AT+ROLE             Get/Set current role.                    *
* AT+PARI             Get/Set UART parity bit.                     *
* AT+STOP             Get/Set UART stop bit.                       *
* AT+START            System start working.    *
* AT+IMME             System wait for command when power on.    *
* AT+IBEA             Switch iBeacon mode.                    *
* AT+IBE0             Set iBeacon UUID 0.                       *
* AT+IBE1             Set iBeacon UUID 1.                       *
* AT+IBE2             Set iBeacon UUID 2.                       *
* AT+IBE3             Set iBeacon UUID 3.                       *
* AT+MARJ             Set iBeacon MARJ .                       *
* AT+MINO             Set iBeacon MINO .                       *
* AT+MEA              Set iBeacon MEA .                       *
* AT+NOTI             Notify connection event .                    *
* AT+UUID             Get/Set system SERVER_UUID .               *
* AT+CHAR             Get/Set system CHAR_UUID .               *
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only.    *
* For more information, please visit http://www.cyobd.com          *
* Copyright@2013 www.cyobd.com.   All rights reserved.    *
********************************************************************

 

 

블루투스 4.0 BLE은 밧데리를 사용하는 저전력의 사용환경에 특화된 모듈이다. 그렇기에 블루투스 2.0 모듈에 비해 데이터 전송 속도는 느리지만, 자체 IPO를 제공하고 있어서 아두이노의 기능을 대체 할 수도 있다.  이러한 장점에도 기존에 사용하던 블루투스 2.0을 사용하는 앱을 사용할 수 없다는 점은 아쉬운 점이다. 

 

아두이노에서 사용시 UART를 통해 아두이노와 연결이 잘되고 전용 앱으로 연결이 잘된다면 따로 설정할 필요없이 디폴트 값으로 사용하면 아무 문제가 없다. 다만, Beacon 이라는 새로운 기능(모듈에서 나오는 신호의 강도로 거리를 측정 하는경우, 이 모드에서는 데이터 통신 자체가 안된다), 모듈간의 통신을 설정할 때에는 모듈 기능에 대해 좀 더 확인해 보아야 한다. 

 

아두이노 - 블루투스모듈, 블루투스 클래식과 블루투스 4.0 BLE의 차이 참조

 https://postpop.tistory.com/6

 

AT-09(BT05)의 주요 디폴트 값은 아래와 같다.

AT+NAME : +NAME=BT05

AT+BAUD : +BAUD=4 // 9600 

AT+ROLE : +ROLE=0 // SLAVE 모드

AT+IBEA : +IBEA=0 // BEACON OFF

 

각 모듈마다 디폴트 값 및 명령어가 상이하므로 각 모듈의 데이터 시트를 확인해야 한다. 

 
블루투스 4.0 BLE 모듈을 사용해 저전력 IOT 제룸을 개발하는 중이라면 HM-10 복제품을 사용할 가능성이 높다.
여러 복제품이 이름과 펌웨어 버전이 따라 명령어가 다르고 심지어 안드로이드버전에 따라 연결 유무가 있어서 복제품의 분류를 자동으로 확인해주는 아두이노 스케치를 찾게 되었고 사용도 해보았다. 필자가 사용중인AT-09(BT05) 결국은 "CC41"이 버전 3.0 때에는 안드로이드 8에서는 펌웨어 오류가 있어 휴대폰에서 인식이 안되었던 듯하다. 현재 사용중인 제품은 펌웨어 4.2이고 안드로이드 8를 사용중인 갤럭시 S7에서 오류없이 인식이 잘된다.  
 

아두이노에서 HM-10 모듈 복제품 제품명 및 버전 확인 프로그램 

https://github.com/ayavilevich/arduino-ble-ident-n-set

 

사용법

아두이노와 모듈간 직접연결은 일반적인 연결을 사용한다. 위에서 스케치를 다운 받은 후 압축 해제 ino 파일 실행한 후 시리얼 BAUD RATE 만 115200에서 9600으로 변경해주고 업로드를 시켜준다. 

소프트 웨어 시리얼 핀 넘버는 스케치상에서 따로 지정해주는게 아니라 업로드후 시리얼 모니터에 출력되는 메세지에 따라 RX 핀번호, TX 핀번호를 입력한 뒤 STATE 핀 번호는 -1(연결 안한 상태)을 입력해주면 프로그램에서 모듈을 체크하고 모듈명 및 버전등 모듈에 관한 세부 내용을 표시해 준다. 

 

 

시리얼 모니터로 프로그램 실행한 결과

 

Arduino BLE module identification and setup sketch.
Interact with this interface using serial in CR&LF mode.
Enter the number of the RX pin on the Arduino, TX on the module [8] :
Enter the number of the TX pin on the Arduino, RX on the module [9] :
Enter the number of the State pin on the Arduino, State on the module (enter -1 if not present or not connected) [7] :
Opening serial connection to BLE module at pins: 2, 3, -1
For this sketch, make sure the module is not connected to another BLE device.
This will make sure the device is in command mode.
A led on the module should be off or blinking.
Detecting module type
CC41 detected!
Sending command: AT+HELP
********************************************************************
* Command             Description            *
* ---------------------------------------------------------------- *
* AT                  Check if the command terminal work normally  *
* AT+RESET            Software reboot    *
* AT+VERSION          Get firmware, bluetooth, HCI and LMP version *
* AT+HELP             List all the commands            *
* AT+NAME             Get/Set local device name                    *
* AT+PIN              Get/Set pin code for pairing                 *
* AT+PASS             Get/Set pin code for pairing                 *
* AT+BAUD             Get/Set baud rate                    *
* AT+LADDR            Get local bluetooth address    *
* AT+ADDR             Get local bluetooth address    *
* AT+DEFAULT          Restore factory default    *
* AT+RENEW            Restore factory default    *
* AT+STATE            Get current state    *
* AT+PWRM             Get/Set power on mode(low power)    *
* AT+POWE             Get/Set RF transmit power    *
* AT+SLEEP            Sleep mode                    *
* AT+ROLE             Get/Set current role.                    *
* AT+PARI             Get/Set UART parity bit.                     *
* AT+STOP             Get/Set UART stop bit.                       *
* AT+START            System start working.    *
* AT+IMME             System wait for command when power on.    *
* AT+IBEA             Switch iBeacon mode.                    *
* AT+IBE0             Set iBeacon UUID 0.                       *
* AT+IBE1             Set iBeacon UUID 1.                       *
* AT+IBE2             Set iBeacon UUID 2.                       *
* AT+IBE3             Set iBeacon UUID 3.                       *
* AT+MARJ             Set iBeacon MARJ .                       *
* AT+MINO             Set iBeacon MINO .                       *
* AT+MEA              Set iBeacon MEA .                       *
* AT+NOTI             Notify connection event .                    *
* AT+UUID             Get/Set system SERVER_UUID .               *
* AT+CHAR             Get/Set system CHAR_UUID .               *
* -----------------------------------------------------------------*
* Note: (M) = The command support slave mode only.    *
* For more information, please visit http://www.cyobd.com          *
* Copyright@2013 www.cyobd.com.   All rights reserved.    *
********************************************************************
Sending command: AT+VERSION
+VERSION=Firmware V4.2.0,Bluetooth V4.0 LE
Sending command: AT+NAME
+NAME=BT05
Sending command: AT+PASS
+PASS=1234
Sending command: AT+ADDR
+ADDR=00:13:AA:00:32:A9
Sending command: AT+ROLE
+ROLE=0
Sending command: AT+POWE (0 = -23dbm, 1 = -6dbm, 2 = 0dbm, 3 = 6dbm)
+POWE=2
Sending command: AT+TYPE (0 = No binding, 3 = Do binding (not documented))
+TYPE=0
0) Quit
1) Set module name
2) Set module password
4) Set module power
5) Set module binding type
6) Display main settings
7) Restore default settings
8) Reboot/reset/restart
9) Re-identify module
10) Detect connection state
11) Set role
12) Send custom command
Enter menu selection [0] :

 

상기 결과에서 이상한 점을 발견 할 수 있는데 AT+HELP 명령을 통한 목록에는 AT+TYPE 명령에 대한 표시나 설명이 없다는 점이다. 

 

인터넷에서 AT-09에 대해 검색해보니 아래의 설명을 확인해 볼 수 있었다.

TYPE=0 : 페어링 없이 연결

TYPE=1 : 간편한 페어링

TYPE=2 : 비밀번호 페어링

TYPE=3 : 비밀번호 페어링 및 바인딩

 

AT+TYPE을 적용하기 위해서는 반드시 AT+RESET을 해주어야 한다.

AT+TYPE2 -> AT+RESET

  

AT 명령으로 AT+TYPE을 입력하면 초기값 TYPE=0 를 반환하고, AT+TYPE2를 입력하면 TYPE=2로 설정이 된다.

프로그램으로 연결을 시도해 보면 우선 모듈에 연결이 되면서 "이장치에 연결하시겠습니까?"라는 메세지가 표시되는데 확인을 누르면 연결이 종료되면서 비밀번호 입력 화면으로 이동하여 비밀번호 페어링이 되는듯이 보이나 비밀번호를 입력하고 확인을 눌러도 연결이 되지는 않는다. 또한, "이장치에 연결하시겠습니까?"라는 메세지에서 취소를 누르면 일정시간 뒤에 블루투스 연결이 종료되는 것을 볼 수 있었는데 문제는 두번째 취소부터는 블루투스 연결이 종료되지 않고 유지된다는 것이다.

  

연결이 유지 될 뿐만 아니라 페어링 없이 연결과 같이 데이터 전송도 잘되어 비밀번호를 이용한 보안설정의 역할은 전혀 하지 못한다는 것을 알 수 있었다. 이러한 이유로 AT+TYPE 명령옵션을 표시하지 않은 것 같다.

 

AT+PIN을 통해 확인해보면 PIN 초기값이 1234로 표시되고 변경을 하기 위하여 AT+PIN**** 4자리를 입력하면 오류가 반환되며, 다시 AT+PIN****** 6자리를 입력하면 저장이 되는 것을 볼 수 있지만 페어링 없이 연결만 되는 상황에서는 PIN 번호를 어디에 사용해야 할 지 모르겠다.

 

결과적으로 HM-10 BLE 모듈의 복제품인 AT-09는 페어링 없이 연결만 지원한다고 볼 수 있다.

 

참조 페이지

https://blog.yavilevich.com/2017/03/mlt-bt05-ble-module-a-clone-of-a-clone/

https://blog.yavilevich.com/2016/12/hm-10-or-cc41-a-module-automatic-arduino-ble-module-identification/

 

+ Recent posts