[참고 자료]
https://blog.naver.com/xisaturn/220712028679
Bluetooth HM-10
특징
- MASTER/SLAVE를 지정하여 설정할 수 있다.
- 기존 1:1 연결에서 1:N 연결을 지원한다.
- 연결의 절차가 간소화되어 빠른 페어링이 가능하다.
- 전력 소모가 적다.
- iOS에서도 장치를 사용할 수 있다.
초기 세팅값
- NAME : HMSoft
- Baud Rate : 9600
- 패리티 비트 : 0
- 전송 비트 : 8
- 정지 비트 : 1
- 비밀번호(Pin Code) : 000000
아두이노와 연결
1) AT Command
'HM-10' 에 전원이 공급된 상태에서, 페어링되어 있지 않아야 한다
다음 코드를 사용하면 시리얼 모니터를 사용하여 매개변수를 수정할 수 있다.
#include <SoftwareSerial.h>
SoftwareSerial hm10(4, 5);
void setup(){
//Initialize Serial Monitor
Serial.begin(9600);
Serial.println("ENTER AT Commands:");
//Initialize Bluetooth Serial Port
hm10.begin(9600);
}
void loop(){
//Write data from HM10 to Serial Monitor
if (hm10.available()){
Serial.write(hm10.read());
}
//Write from Serial Monitor to HM10
if (Serial.available()){
hm10.write(Serial.read());
}
}
시리얼 통신을 테스트하려면 통신 옵션에서 'Line Ending 없음'과 '올바른 전송 속도'를 선택해야 한다.
시리얼 모니터 창에 'AT' 라고 쳤을 때 모듈이 'OK' 라고 응답해야 정상적으로 연결된 것이다.
AT : 'Bluetooth Module' 을 확인할 때 사용한다.
AT+ADDR? : 'Bluetooth Module' 의 'MAC 주소' 를 확인하는데 사용한다.
AT+NAME? : 'Master Device' 가 'Bluetooth Module' 을 검색할 때 어떤 이름인지 확인하는데 사용한다.
AT+NAME[사용할 이름] : 'Bluetooth Module' 의 이름을 설정한다.
AT+TYPE? : 'Bluetooth Module' 이 어떤 타입을 사용하는지 확인하는데 사용한다.
AT+TYPE[설정할 값] : 'Bluetooth Module' 의 유형을 변경한다.
0 : Not need PIN Code (기본값)
1 : Pair not need PIN Code
2 : Pair and PIN Code
3 : Pair and Bond (스마트폰과 연결 시 사용)
AT+MODE? : Bluetooth 통신 방법 중 'Connection' 인지 'Broadcast' 인지 확인한다. 'Connection' 이 보통 사용하는 방법이고 'Broadcast' 가 'Beacon' 이다.
AT+MODE[설정할 값] : 'Bluetooth Module' 의 통신 방법을 설정한다.
0 : Transmission Mode (기본값)
1 : PIO Collection Mode + Mode 0
2 : Remote Control Mode + Mode 0
AT+ROLE? : 'Bluetooth Module' 의 역할(Master / Slave)을 확인한다.
AT+ROLE[설정할 값] : 'Bluetooth Module' 의 역할(Master / Slave)을 설정한다.
0 : Peripheral (Slave) (기본값)
1 : Central (Master)
AT+IMME? : 모듈의 동작 타입을 확인한다. (Central 모드에서 사용)
AT+IMME? : 모듈의 동작 타입을 설정한다. (Central 모드에서 사용)
0 : When power on, work immediately (기본값)
1 : When module is powered on, only respond the AT command.
(Don't do anything until AT+START is received, or can use AT+CON, AT+CONNL)
AT+START : 'AT+IMME1' 이 설정되었을 때 'AT command' 모드를 종료하기 위해 사용한다.
AT+RESET : 재시작할 때 사용한다.
AT+RENEW : 공장 초기화 할 때 사용한다.
AT+PASS? : 현재 설정된 비밀번호가 무엇인지 확인할 수 있다.
AT+PASS[변경할 비밀번호] : 'Bluetooth Module' 의 비밀번호를 설정(000000 ~ 999999)한다.
AT+POWE? : 'Bluetooth Module' 의 신호 세기를 확인한다.
AT+POWE[설정할 값] : 'Bluetooth Module' 의 신호 세기를 설정한다.
0 : -23dbm
1 : -6dbm
2 : 0dbm (기본값)
3 : 6dbm
AT+BAUD? : 'Bluetooth Module' 의 'Baud Rate' 를 확인한다.
AT+BAUD[설정할 값] : 'Bluetooth Module' 의 'Baud Rate' 를 확인한다.
0 : 9600 (기본값)
1 : 19200
2 : 38400
3 : 57600
4 : 115200
5 : 4800
6 : 2400
7 : 1200
8 : 230400
AT+UUID? : 'Bluetooth Module' 의 'UUID' 를 확인한다.
AT+UUID[설정할 값] : 'Bluetooth Module' 의 'UUID(0x0001 ~ 0xFFFE)' 를 설정한다.
2) 스마트폰과 통신하기
Sketch Code
#include <SoftwareSerial.h>
SoftwareSerial hm10(4, 5);
void setup() {
//Initialize Serial Monitor
Serial.begin(9600);
Serial.println("ENTER AT Commands:");
//Initialize Bluetooth Serial Port
hm10.begin(9600);
}
void loop() {
//Write data from HM10 to Serial Monitor
if (hm10.available()) {
Serial.write(hm10.read());
}
//Write from Serial Monitor to HM10
if (Serial.available()) {
hm10.write(Serial.read());
}
}
3) Central (Master) / Peripheral (Slave) 연결하기
'Central' 과 'Peripheral' 모두 그림과 같이 동일하게 아두이노와 연결해준다.
다음 AT 명령어를 사용하여 두 개의 HM-10 모듈을 각각 'Central' 과 'Peripheral' 로 설정해준다.
AT+ROLE0 (Peripheral)
AT+ROLE1 (Central)
'Peripheral' 모드가 설정된 HM-10 모듈의 시리얼 모니터 창에서 다음 AT 명령어를 사용하여 HM-10 모듈의 주소를 확인한다.
AT+ADDR?
'Central' 모드가 설정된 HM-10 모듈의 시리얼 모니터 창에서 다음 AT 명령어를 사용하여 'AT+IMME' 를 1로 설정해준다.
AT+IMME1
'Central' 모드가 설정된 HM-10 모듈의 시리얼 모니터 창에 다음 명령어를 입력하면 연결 가능한 블루투스의 주소가 표시된다.
'AT+DISC?'
이 중 연결하고자 하는 블루투스의 주소를 다음 AT 명령어를 사용하여 선택한다.
AT+CONN[연결하고자 하는 장치 번호]
다음 명령어를 입력하면 자동으로 이전에 접속했던 주소로 자동 접속한다.
AT+CONNL
1) Sketch Code (Central)
#include <SoftwareSerial.h>
SoftwareSerial hm10(4, 5);
void setup() {
//Initialize Serial Monitor
Serial.begin(9600);
Serial.println("ENTER AT Commands:");
//Initialize Bluetooth Serial Port
hm10.begin(9600);
hm10.print("AT");
delay(1000);
hm10.print("AT+IMME1");
delay(1000);
hm10.print("AT+CONNL"); // 마지막 연결했던 장치와 자동으로 연결
}
void loop() {
//Write data from HM10 to Serial Monitor
if (hm10.available()) {
Serial.write(hm10.read());
}
//Write from Serial Monitor to HM10
if (Serial.available()) {
hm10.write(Serial.read());
}
}
2) Sketch Code (Peripheral)
#include <SoftwareSerial.h>
SoftwareSerial hm10(4, 5);
void setup() {
//Initialize Serial Monitor
Serial.begin(9600);
Serial.println("ENTER AT Commands:");
//Initialize Bluetooth Serial Port
hm10.begin(9600);
}
void loop() {
//Write data from HM10 to Serial Monitor
if (hm10.available()) {
Serial.write(hm10.read());
}
//Write from Serial Monitor to HM10
if (Serial.available()) {
hm10.write(Serial.read());
}
}