#include <SoftwareSerial.h> #define BT_RXD 4 #define BT_TXD 5 #define LED 2 SoftwareSerial HM10(BT_RXD, BT_TXD); // RX핀(7번)은 HM10의 TX에 연결 // TX핀(8번)은 HM10의 RX에 연결 void setup(){ Serial.begin(9600); pinMode(LED, OUTPUT); // LED를 출력으로 설정 HM10.begin(9600); } void loop(){ if (HM10.available()){ char h =(char)HM10.read(); Serial.print(h); if(h == 'o') // 알파벳 소문자 'o'를 입력하면 digitalWrite(LED, HIGH); // LED가 점등된다 if(h == 'f') // 알파벳 소문자 'f'를 입력하면 digitalWrite(LED, LOW); // LED가 소등된다 } if(Serial.available()){ char h = (char)Serial.read(); HM10.print(h); } }
스마트폰과 HM-10 연동하기 1
가장 먼저 할 일이 블루투스 4.0 BLE HM-10 모듈에 대해 아는 일이다.
블루투스 4.0 BLE HM-10 모듈 이미지를 참고하고 자세한 작동법은 데이터북을 참고하거나 잘 설명해 놓은 링크를 참고한다.
HM-10 모듈에 대한 자세한 설명 링크 - [블루투스4.0BLE]HM-10 Module 사용법(AT 커맨드 포함) //blog.naver.com/xisaturn/220712028679
연결도를 참고한다. 여기서 HM-10의 RX, TX 핀은 소프트웨어 씨리얼을 사용하므로 아두이노의 7번과 8번 핀을 연결한다. 소스코드에 번호가 나오니 참고한다.
코딩 예제 : 아래 코드를 아두이노 스케치에 입력후 업로드 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <SoftwareSerial.h> #define BT_RX 7 #define BT_TX 8 SoftwareSerial HM10(BT_RX,BT_TX); // RX핀(7번)은 HM10의 TX에 연결 // TX핀(8번)은 HM10의 RX에 연결 void setup() { Serial.begin(9600); HM10.begin(9600); } void loop() { if (HM10.available()) { Serial.write(HM10.read()); } if (Serial.available()) { HM10.write(Serial.read()); } } |
연결 상태를 확인하고 AT 명령어를 사용하여 HM-10 정보를 확인하고 이름 설정
- ‘코딩 예제’를 아두이노에 업로드까지 마친 후 시리얼 모니터를 띄워 다음과 같은 AT명령어를 입력하면 HM-10과 아두이노가 정상적으로 연결되었는지 확인할 수 있다. 또한 AT명령어로 HM-10의 이름을 변경할 수 있으며, 스마트폰과 페어링 할 때 유용하도록 이름을 변경한다.
AT : 응답가능여부확인
결과 : OK
AT_NAME? 이름 조회하기
결과 : OK+NAME:HMSoft
AT+NAMExxx : 이름 변경
결과 : OK+Set: xxxx
AT+ADDR? : 블루투스 모듈 주소 읽어오기
결과 : OK+ADDR:XXXXXXXXXXXX
비밀번호(pin code) 확인 AT+PASS?
결과: OK+Get:000000
비밀번호(pin code) 설정 AT+PASSxxxxxx
⇒ OK+Set:xxxxxx
[Para] is Pin Code, 000000~999999
Default: 000000
반드시 하나 더 해주어야 한다. 스마트 폰으로 페어링을 하면 등록거절 되는데 이때
"HM-10 모듈에 시리얼로 연결해서 AT+TYPE3" 라고 입력해서 세팅하면 연결 가능해 집니다. 디바이스를 찾아서 페이링 PIN 넘어 초기에 "000000" (0이 6개) 넣어주면 페어링 완료!
AT+TYPE3 전송
결과 : OK+Set:3 ---> 이렇게 해도 페어링이 안되거나 스마트폰에서 블루투스 장치에 등록을 해도 앱에서 안보이는 분????
전원을 껏다가 다시 켠다. 리셋 필요.
모듈 Bond 모드 확인/설정
- AT+TYPE?
⇒OK+Get:[para] None
- AT+TYPE[para]
⇒OK+Set:[para]
[para]: 0~3
0: Not need PIN Code
1: Pair not need PIN
2: Pair with PIN
3: Pair and bond
Default: 0
※ 주의 사항 : 시리얼 모니터로 'AT' 를 입력하면 결과값으로 'OK'를 리턴 해야 하지만 제조사마다 옵션 설정이 다르기 때문에 이를 설정해주지 않으면 'OK'를 리턴받지 못하는 경우도 있다. 따라서 옵션 설정에 유의하여 사용하셔야 합니다. 여기서는 'Both NL & CR'로 설정합니다.
시리얼 모니터 결과는 아래 씨리얼 모니터 결과 화면을 참고한다.
글 참고 사이트
1. 아두이노 블루투스 4.0 BLE HM-10 모듈 / Arduino Bluetooth 4.0 BLE Module //m.blog.naver.com/eduino/220903237343
2. HM-10 블루투스 테스트(2) //hnydiy.tistory.com/4
3. [블루투스 4.0 Hm-10 cc2541] 아두이노 우노 R3 연결 //blog.whoborn.net/%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-4-0-hm-10-cc2541-%EC%95%84%EB%91%90%EC%9D%B4%EB%85%B8-%EC%9A%B0%EB%85%B8-r3-%EC%97%B0%EA%B2%B0/
4. [블루투스4.0BLE]HM-10 Module 사용법(AT 커맨드 포함) //blog.naver.com/xisaturn/220712028679
참고로 윗 부분의 코드를 아래 소스코드와 같이 수정하여 커스터마이징하여 사용할 수 있도록 수정하여 사용하면 된다. 참고하세요.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | #include <SoftwareSerial.h> /** * RX_PIN은 HC 모듈의 TX 핀과 연결될 핀 * TX_PIN은 HC 모듈의 RX 핀과 연결될 핀 */ #define RX_PIN 3 #define TX_PIN 2 #define SERIAL_BAUD 9600 #define HC_BAUD 9600 SoftwareSerial HCSerial(RX_PIN, TX_PIN); void setup() { Serial.begin(SERIAL_BAUD); HCSerial.begin(HC_BAUD); } void loop() { if(HCSerial.available()) { // HC 모듈로부터 데이터가 들어온 경우 수행 루틴 HCFunction(); } if(Serial.available()) { // 시리얼 모니터로부터 데이터가 들어온 경우 수행 루틴 SerialFunction(); } } void HCFunction() { /** * Init routine * HC 모듈로부터 들어온 데이터를 시리얼 모니터로 출력 * 커스터마이징할 함수 영역 */ Serial.write(HCSerial.read()); } void SerialFunction() { /** * Init routine * 시리얼 모니터로부터 들어온 데이터를 HC 모듈로 출력 * 커스터마이징할 함수 영역 */ HCSerial.write(Serial.read()); } |