본문으로 바로가기

  아두이노(Arduino) 중급 HM-10 블루투스4.0사용하기  


애드라이프의 아두이노 모든 포스팅 리스트를 보고 싶으신 분은 공지 읽어주세요.


참고로 중급편 부터는 응용편이 없습니다. 

왜냐하면 고급편에서 중급에 사용했던 부품의 응용편을 다룰 예정이기 때문이죠!!


안녕하세요. 애드라이프 입니다.

오늘은 블루투스를 가지고 왔습니다.!!


저희 핸드폰에서도 블루투스 이어폰이나 스피커, 스마트 워치 등등이 

블루투스 통신을 이용해서 사용되고 있는데요.

자주 사용되고 있는만큼 응용범위는 넓다는 애기겠죠?


그럼 오늘 사용할 HM-10의 실물을 보여드리겠습니다.▼

아두이노 블루투스 4.0 모듈 HM-10아두이노 블루투스 4.0 모듈 HM-10






오늘 포스팅의 최종 목적은 블루투스를 이용한 

무선으로 LED 점멸 TEST입니다.


바로 연결도(회로도)를 살펴보겠습니다.

아두이노 블루투스 4.0 HM-10을 이용한 LED 켜기 회로'

회로도상에는 HC-05가 있죠?

모듈이 없어서 약간 다른 블루투스 모듈을 대신해서 회로를 구성했습니다.

핀구성은 똑같으니 무시하셔도 됩니다.


이런 생각쯤 한번씩은 해보셨을 건데요.

너무 피곤해서 자려고 침대에 누었는데 방 불이 켜져있다면

정말 귀찮겠지만 다시 일어나서 불을 끄러 가야 겠죠?

만약 방 불을 켜고끄는 기능이 내 폰으로 된다면 얼마나 편할까요?


그런 발상에서 나온 포스팅이 오늘의 무선통신으로 LED 점멸하기 입니다.

LED를 방불이라 생각하면 이해가 빠르겠죠?


프로그램을 사용하기에 앞서 우선 블루투스 모듈이 정상적으로 동작하는지

확인 할 필요가 있습니다. 제조사와 펌웨어 버전에 따라 확인하는 방법이 조금씩 차이가 있을 수 있습니다.


에듀이노 오픈랩에서 소개한 프로그램입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//출처 에듀이노 오픈랩
//https://m.blog.naver.com/PostView.nhn?blogId=eduino&logNo=220903237343&proxyReferer=https%3A%2F%2Fwww.google.co.kr%2F
//모듈 정상확인용
#include <SoftwareSerial.h>
#define BT_RX 2                        //핀 번호만 제 회로도에 맞게 수정하였습니다.
#define BT_TX 3
 
SoftwareSerial HM10(BT_RX,BT_TX);  // RX핀(2번)은 HM10의 TX에 연결 
                                   // TX핀(3번)은 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());
  }
}
 
cs

간단하게 AT명에 의한 모듈의 정상동작을 확인 할 수 있도록 구성되어있습니다.


여기서 AT명령어란 무엇인가에 대한 의문이 생깁니다.

AT명령어는 필요한 것만 쓰기 때문에 전부 알필요는 없지만 

그래도 자세한 명령을 알고 있다고해서 나쁠 것은 없으니 

설명이 잘 되어있는 블로그를 소개해 드리겠습니다.


HM-10 AT명령어 모음 


이번 포스팅에서는 

AT : 응답이 가능한지에 대한 확인

응답 : OK


AT+NAMEXXXX : 모듈이 검색될때 나타나는 이름을 변경합니다.

응답 : OK+Set : XXXX


이 두가지 명령어만 쓰도록 하겠습니다.


그럼 이제 프로그램을 업로드해서

시리얼 모니터에 AT를 입력했을때 OK가 출력되어야 정상입니다.

다만, 재조사에 따라 TEST조건이 다를 수 있습니다.

아두이노 블루투스 HM-10 AT명령

저 같은 경우에는 line ending 없음 선택하고 AT를 보내야 OK가 출력됩니다.

같은 조건에서 TEST해보시고 안될결우에는 line ending 없음 부분을 

both NL & CR로 변경 후 TEST해 보세요.


그리고 저는 제 모듈이름을 AT+NAMEXXXX 명령을 이용하여 AddLife로 변경하였습니다.

여러분들도 선호하는 이름으로 변경해놓으시면 연결시 찾기 편하실 겁니다.


자신의 HM-10 블루투스 모듈이 정상인것을 확인 하였다면

이제 핸드폰과 연결해 볼까요?


제 폰이 삼성 노트9이기때문에 안드로이드 기준으로 설명드립니다.

Google Play에 접속하셔서 아래 어플을 받습니다. ▼


아두이노 BLE Serial Console


1번▼                                        2번                                     3번

아두이노 BLE Serial Console아두이노 BLE Serial Console아두이노 BLE Serial Console


4번▼                                        5                                     6번

아두이노 BLE Serial Console아두이노 BLE Serial Console아두이노 BLE Serial Console



어플 사용법을 간단히 설명하겠습니다.


1번 : Scan을 클릭해서 연결 할 수있는 장치를 찾습니다.


2번 : 찾아진 장치중에서 자신의 장치를 클릭합니다.


3번 : HM-10 tx/rx Service 클릭합니다.


4번 : HM-10 tx/rx 클릭합니다.


5번 : 연결 상태를 확인합니다.(Connected to device XXXX)


6번 : 자신이 보내고 싶은 정보를 전송합니다.


위 어플을 이용해서 최종목적인 LED를 켜려면

어떻게 프로그램을 작성해야 할까요? ▼

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
#include <SoftwareSerial.h>       //라이브러리를 추가합니다.(기본 라이브러리)
int bluetoothTx = 2;                //블루투스 모듈의 TX입니다. 아두이노 보드에서는 RX역할
int bluetoothRx = 3;                //블루투스 모듈의 RX입니다. 아두이노 보드에서는 TX역할
int LED = 4;                        //LED를 제어할 포트입니다.
SoftwareSerial bluetooth(bluetoothTx, bluetoothRx); //bluetooth(bluetoothTx, bluetoothRx); 
void setup()
{
  Serial.begin(9600);               //시리얼 통신속도 9600
  delay(100);
  bluetooth.begin(9600);            //블루투스 통신속도 9600
  pinMode(LED, OUTPUT);             //디지털 포트4번을 OUTPUT으로 설정
}
void loop()
{
  String cmdString;
  char cmd;
  while(bluetooth.available())      //수신데이터가 있는동안
  {
    cmd = (char)bluetooth.read();   //mySerial int 값을 char 형식으로 변환
    cmdString+=cmd;                 //수신되는 문자를 myString에 모두 붙임 (1바이트씩 전송되는 것을 연결)
    delay(5);                       //수신 문자열 끊김 방지
  }
  if(!cmdString.equals(""))         //myString 값이 있다면
  {
    Serial.print("Command = ");
    Serial.println(cmdString);
    if( cmdString == "ledon" )    //수신한 문자열이 ledon과 같으면 LED ON
    {
      Serial.println("LED ON");
      digitalWrite(LED, HIGH);
    }
    if( cmdString == "ledoff" )
    {
      Serial.println("LED OFF");  //수신한 문자열이 ledoff과 같으면 LED OFF
      digitalWrite(LED, LOW);
    }
    cmdString=""//초기화
  }
}
cs

전체적인 프로그램 흐름은 주석을 참고해 주세요.


한개의 문자만으로 LED를 켜려다가 문자열은 어떻게 받는지 궁금하신 분들을 위해 

수신 명령어를 문자열로 구성했습니다.


어플에서 ledon을 보내면 디지털 포트 4번에 연결된 LED의 불이켜지고

어플에서 ledoff를 보내면 LED의 불이꺼지는 것을 확인 할 수 있습니다.


명령어를 보낼 경우에 Send Enter부분의 체크를 풀어주세요.


ledon 명령▼                                                                             ledoff 명령

아두이노 블루투스4.0 HM-10을 이용해 LED 켜기아두이노 블루투스4.0 HM-10을 이용해 LED 켜기

동영상을 찍서 올리고 싶지만...폰 하나밖에 없는데

어플을 써야 해서....영상을 못찍었습니다.



지금까지 아두이노(Arduino) 중급 아두이노 HM-10 블루투스4.0 사용하기 포스팅이였습니다.

계속해서 도움되는 포스팅으로 찾아뵙겠습니다.

by 애드라이프