아두이노 블루투스 hm-10 - adu-ino beullutuseu hm-10

#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 커맨드 포함) http://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'로 설정합니다.

시리얼 모니터 결과는 아래 씨리얼 모니터 결과 화면을 참고한다.

아두이노 블루투스 hm-10 - adu-ino beullutuseu hm-10

글 참고 사이트

1. 아두이노 블루투스 4.0 BLE HM-10 모듈 / Arduino Bluetooth 4.0 BLE Module https://m.blog.naver.com/eduino/220903237343

2. HM-10 블루투스 테스트(2) https://hnydiy.tistory.com/4

3. [블루투스 4.0 Hm-10 cc2541] 아두이노 우노 R3 연결 http://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 커맨드 포함) http://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());

}