> For the complete documentation index, see [llms.txt](https://docs.sysout.co.kr/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.sysout.co.kr/base-language/arduino/arduino-network/bluetooth/hm-10.md).

# HM-10

## 블루투스(HM-10)

이 문서에서는 HM-10 모듈을 이용한 블루투스 환경 구축에 대해서 다룬다.

### 결선도

회로 구성은 [블루투스(HC-06)](http://www.sysout.co.kr/home/webbook/page/read/1301)와 동일하게 진행한다.

```
RXD to Digital PIN 2
TXD to Digital PIN 3
GND to GND
VCC to 5V
```

![](/files/-Mf6z9T9IyXDrzMc3Hn3)

### 샘플 코드

테스트 코드도 동일하다.

```
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3);//TX, RX

void setup(){
  Serial.begin(9600);
  BTSerial.begin(9600);
  Serial.println("Enter AT Command");
}

void loop(){
  if(BTSerial.available()){
    Serial.write(BTSerial.read());
  }
  if(Serial.available()){
    BTSerial.write(Serial.read());    
  }
}
```

### 컴파일

`Ctrl+R` 또는 스케치 메뉴의 `확인/컴파일`을 눌러 컴파일을 진행한다.

### 업로드

`Ctrl+U` 또는 스케치 메뉴의 `업로드`를 눌러 업로드를 진행한다.

### 실행 결과

시리얼 모니터를 열고 다음과 같이 입력한다.

```
AT
```

`OK`가 출력되면 정상적으로 연결이 수행된 것이다.

### AT Command

`HM-10`을 위한 AT Command는 다음과 같다.

#### 확인 명령

정상적인 연결을 확인하기 위해서 사용한다.

```
AT
```

정상적으로 연결된 경우 `OK`가 반환된다.

#### 모드 확인

HM-10 모듈은 3가지 동작 모드를 가지고 있다.

* Mode 0 : 무선연결이 이루어지기 전에 시리얼 통신으로만 AT 커맨드를 전송할 수 있는 모드
* Mode 1 : 무선으로 연결된 장치에서 보낸 AT 커맨드를 인식한다. 입력과 출력으로 나누어서 사용할 수 있음.
* Mode 2 : 무선으로 연결된 장치에서 보낸 AT 커맨드를 인식하지만 입력 기능은 사용할 수 없고 전부 출력으로 사용함.

확인은 다음 명령으로 가능하다.

```
AT+MODE?
```

#### 모드 변경

모드 설정을 다음과 같이 수행할 수 있다.

```
AT+MODE값
```

`AT+MODE0`, `AT+MODE1`, `AT+MODE2`와 같이 설정한다.

#### 이름 확인

블루투스의 검색 시 이름을 확인할 수 있다.\
별도의 설정을 하지 않았다면 기본값으로 `HmSoft`라는 이름을 가진다.

```
AT+NAME?
```

#### 이름 설정

이름을 원하는대로 설정할 수 있다.

```
AT+NAME이름
```

예를 들어 이름을 `arduinotest`로 하고 싶다면 다음과 같이 명령을 작성한다.

```
AT+NAMEarduinotest
```

#### PIN 모드 확인

HM-10 모듈은 기본적으로 PIN 코드를 입력하지 않아도 연결이 되도록 설정되어 있으며, 이를 확인하고 변경할 수 있다.

```
AT+TYPE?
```

#### PIN 모드 변경

PIN 모드를 변경하기 위해서는 다음과 같은 명령을 사용한다.

```
AT+TYPE값
```

사용 가능한 값은 `0`, `1`, `2`, `3`이며 각각 다음의 의미를 가진다.

* AT+TYPE0 : PIN 코드 사용하지 않고 연결(기본값)
* AT+TYPE1 : Pair 상태에서는 PIN 코드를 연결하지 않음
* AT+TYPE2 : 모든 상태에서 PIN 코드 사용하여 연결
* AT+TYPE3 : Pair 이후에 Bonding을 수행하는 연결(안드로이드 접속 가능)

#### PIN 번호 확인

필요한 경우 다음 명령을 이용하여 PIN 번호를 확인할 수 있다.\
기본값은 `000000`으로 설정되어 있다.

```
AT+PASS?
```

#### PIN 번호 설정

다음 명령을 통하여 PIN 번호를 설정할 수 있다.

```
AT+PASS값
```

비밀번호를 `123456`으로 설정하고 싶다면 다음과 같이 작성한다.

```
AT+PASS123456
```

#### 결론

다음 설정만 수행하면 정상적으로 연결된다.\
연결이 잘 되지 않으면 아두이노 스케치를 다시 업로드 하여 진행한다.

```
AT+MODE1
AT+TYPE3
AT+NAME이름
AT+PASS핀번호
```
