'2020/01/05'에 해당되는 글 1건
일전에 구입해 놓은 bluetooth 모듈인, HC-06, HC-05, SPP-C 사용기 2탄 입니다.
첫번째 포스트는 아래 링크를 참고해 보세요.
* Hardware | bluetooth 모듈 HC-06 / HC-05 사용해 보기 - 1
- https://chocoball.tistory.com/entry/Hardware-bluetooth-HC06-HC05-1
오늘은 master/slave 두 가지 모드를 지원하는 HC-05 에 대해 알아봅니다.
1. Firmware
Wi-Fi 모듈처럼 자체 firmware 를 가지고 있습니다.
Firmware 를 최신버전으로 update 하고 싶었으나, 인터넷에서 찾기는 어렵네요.
HC-05 는 Bluetooth 계열에서는 고가면서 다기능인 RN42 로 업그레이드가 가능하다고 하지만,
저의 PCB 는 불가능한 제품임을 알게 되었습니다.
* Fake HC-05/HC-06 modules with BlueCore3 chips relabeled as BC417
- https://github.com/lorf/csr-spi-ftdi/issues/25
언뜻 튜닝 요소가 많아 보이지만, 요즘 나오는 제품들은 튜닝이 불가능 한것 같습니다.
2. USB 시리얼 연결
궂이 arduino 를 통해서 연결할 필요는 없고, 직접 serial 통신으로 연결합니다.
HC-05 | FTDI ---------------- RX | TX TX | RX ---------------- | POWER ---------------- GND | GND VCC | 3.3V ----------------
Arduino 를 거치지 않더라도 Arduino IDE 를 사용할 수 있습니다.
FTDI 가 연결 된 Port 만 정확하게 선택하면 Serial Monitor 를 이용하여 AT 명령어를 확인해 볼 수 있습니다.
HC-05 가 사용하는 전류량이 많은지라, arduino 나 FTDI 에서 전력을 공급하면 불안정한 모습을 보입니다.
Bluetooth 모듈도 Wi-Fi 모듈과 동일하게, 외부 전원을 이용하는 편이 좋습니다.
실제 연결은 다음과 같습니다.
3. AT mode
HC-05 가 동작하는 mode 는 두 가지가 있습니다. 하나는 보통 mode 이고, 다른 하나는 AT mode.
Normal mode 는 LED 깜빡임이 빠르고, AT mode 는 깜빡임이 느려서 그 구분을 할 수 있습니다.
참고로 설정을 변경할 수 있는 모드가 AT mode 이고, 기본 모드가 아닙니다.
* Normal mode
* AT mode
AT mode 로 들어가는 방법은 두 가지가 있습니다.
EN pin 을 high 로 (전원 연결)
EN pin 에 대해 전원을 연결한 상태로 키면 AT mode 로 진입하게 됩니다.
어떤 제품은 그냥 켰다가, 한번만이라도 EN 에 전원을 인가해 주면 AT mode 로 접근한다 하는데, 제꺼는 처음부터 high 로 놓지 않으면 AT mode 로 진입할 수 없었습니다.
Button 를 누른 상태에서 켜기
위의 화살표 버튼을 누른 상태에서 전원을 인가하면, AT mode 로 동작합니다.
그 뒤에 손을 놔도 그대로 AT mode 를 유지합니다.
4. Command list
HC-06 과 비슷하지만 다른 부분들도 있습니다.
주로 사용하는 command 를 가지고 간단한 설명을 남겨 놓습니다.
AT+VERSION?
firmware 버전에 대해 확인합니다.
비교적 요즈음 구매해서 그런지 "VERSION:3.0-20170601" 라고 뜨네요.
AT+STATE?
커멘드 입력시의 상태를 표시해 줍니다.
"INITIALIZED" ---- initialized status
"READY" ---- ready status
"PAIRABLE" ---- pairable status
"PAIRED" ---- paired status
"INQUIRING" ---- inquiring status
"CONNECTING" ---- connecting status
"CONNECTED" ---- connected status
"DISCONNECTED" ---- disconnected status
"NUKNOW" ---- unknown status
AT+ROLE?
Master 인지 Slave 인지 확인할 수 있습니다. Master 이면 1, Slave 면 0 입니다.
AT+ADDR?
주소 정보를 반환해 줍니다.
AT+NAME?
기기 이름을 설정하거나 알려 줍니다.
AT+PSWD?
비밀번호를 확인할 수 있습니다.
AT+UART?
Serial connect 시에 사용될 속도를 설정/확인 할 수 있습니다.
AT+CMODE?
지정된 기기와 연결 시킬 것인지, 여러 기기와 통신하게 할 지를 정할 수 있습니다.
0 이면, 지정된 기기와의 연결만 가능하고, 1 이면 다른 여러 기기와 연결시킬 수 있는 mode 입니다.
AT+BIND?
연결할 상대 기기 주소 지정.
AT+POLAR?
PIO8 / PIO9 연결 상태에 따른 LED 표시 상태를 정의한다 합니다. 무슨 이야기 인지 하나도 모르겠습니다.
AT+IPSCAN?
IP 스캔할 인터벌과 타이밍을 설정합니다.
AT+SENM?
Safe / Encryption mode 라고 합니다.
AT+ADCN?
인증을 통해 pairing 된 기기의 수를 알려 줍니다.
AT+MRAD?
가장 최근에 인증을 통해 연결된 기기를 보여줍니다.
AT+MPIO?
Multiple port output 이라고 합니다. 무슨 소리인지 모르겠습니다.
AT+CLASS?
디바이스 타이프를 보여 줍니다.
AT+IAC?
Access code 에 GIAC type (General Inquire Access Code : default 는 0x9e8b33) 을 사용.
AT+INQM?
RSSI 모드로 몇 개의 device를 최장 몇 초동안 받아들일지의 설정.
잘 쓰이지 않을 보안과 deep한 설정은 잘 모르겠네요. 기준이 되는 문서를 첨부합니다.
추가로, firmware version 에 따라 명령어가 조금씩 다를 수 있습니다.
HC-0305_serial_module_AT_commamd_set_201104_revised.pdf
5. Slave 모드로 Windows 10 과 연결해 보기
HC-06 을 가지고 놀 때도 했지만, HC-05 이니 한번 더 동일한 방법으로 Windows 10 와 연결 해 봅니다.
인식 후, 연결을 위해 암호를 입력합니다.
특별한 문제 없이 연결 되었습니다.
장치 관리자에서 확인해 보면, Bluetooth 장치에 정상적으로 등록 되었네요.
Putty 로 연결해 보기 위해 COM port 를 확인해 봅니다.
Putty 의 Serial 로 연결해 봅니다.
Putty 에서 키보드로 입력하면, Putty 상에서는 보이지 않지만, Arduino IDE 의 Serial Monitor 에서는 전송된 글씨가 보입니다.
Slave 모드로 Windows 10 에 연결에 문제가 없네요.
6. Master 모드로 Slave 연동 - firmware 설정
마지막으로, HC-05 (Master) 와 HC-06 (Slave) 를 연결하여 통신이 가능한지 확인해 봤습니다.
참고한 사이트와 너tube 정보는 다음과 같아요.
* How to Configure HC-05 Bluetooth Module As Master and Slave Via AT Command
- https://www.instructables.com/id/How-to-Configure-HC-05-Bluetooth-Module-As-Master-/
* Communication between Master HC-05 and Slave HC-05
- https://www.youtube.com/watch?v=mY803K-5WxE
구성품은 arduino / 스위치 / LED 각각 두 개씩 필요하고, Master/Slave 가 될, HC-05 / HC-06 이 필요합니다.
HC-06 Slave 설정
우선 HC-06 Slave 에서 다음과 같이 설정합니다.
- AT+ROLE=0 : Slave 설정
- AT+ADDR? : Master 에 등록하기 위해 address 를 알아 냄
- AT+UART=38400,0,0 : Serial 통신 속도를 38400 으로 맞춤
통신속도를 맞추면, Serial Monitor 의 속도도 새로운 값 - 38400 에 맟줘 줘야 확인이 가능 합니다.
HC-05 Master 설정
그 다음으로, HC-05 Master 는 다음과 같이 설정합니다.
- AT+ROLE=1 : Master 설정
- AT+CMODE=1 : pairing 할 기기를 검색하지 않고, 지정하여 등록. 등록은 아래의 BIND 명령어로 설정.
- AT+BIND=98D3,41,F93341 : 패어링 할 Slave 기기를 지정. (위에서 Slave 의 ADDR 로 확인한 주소 정보)
- AT+UART=38400,0,0 : Serial 통신 속도를 38400 으로 맞춤
최종적으로 BIND 정보를 확인하여, Slave 어드레스가 잘 등록되어 있으면 OK 입니다.
6. Master 모드로 Slave 연동 - arduino 와 연결
Pin 연결은 다음과 같습니다.
HC-05 와 HC-06 의 연결은 Master/Slave 로 기능은 다르나, 연결 방법은 동일합니다.
HC-05/06 | Arduino Nano ------------------------- TXD | D10 RXD | D11 ------------------------- | POWER ------------------------- VCC | 3.3V GND | GND ------------------------- SWITCH | D2 LED+220Ω| D8 -------------------------
회로도를 Fritzing 으로 그려 봤습니다.
최근에 업데이트 된 0.9.4 로 그렸는데, 그림 export 에 버그가 있네요. (점프선에 점선)
실제 구현한 사진 입니다.
주의할 점으로는, Wi-Fi 모듈 연결 시험 했을때와 동일하게, Bluetooth 모듈도 추가 전원으로 연결해야 원활한 확인이 가능 합니다.
Arduino 로부터 빼서 사용하는 전원은 충분치 못하여 불안정한 동작을 보입니다.
위의 사진 오른쪽 밑에 있는 것이 추가 전원입니다.
Arduino 에 써넣을 sketch 는 다음과 같습니다.
Master Source
//this is master #include "SoftwareSerial.h" SoftwareSerial BTSerial(10, 11); int state = 0; const int ledPin = 8; const int buttonPin = 2; int buttonState = 1; void setup() { BTSerial.begin(38400); pinMode(ledPin, OUTPUT); digitalWrite(ledPin, LOW); pinMode(buttonPin, INPUT); digitalWrite(buttonPin, HIGH); } void loop() { if(BTSerial.available() > 0) { // Checks whether data is comming from the serial port state = BTSerial.read(); // Reads the data from the serial port } // Controlling the LED buttonState = digitalRead(buttonPin); if (buttonState == LOW) { BTSerial.write('1'); } else { BTSerial.write('0'); } if (state == '1') { digitalWrite(ledPin, HIGH); // LED ON state = 0; } else if (state == '0') { digitalWrite(ledPin, LOW); // LED ON state = 0; } }
Slave Source
//this is slave #include "SoftwareSerial.h" SoftwareSerial BTSerial(10, 11); int state = 0; const int led = 8; const int button = 2; int buttonstate = 1; void setup() { BTSerial.begin(38400); pinMode(led, OUTPUT); digitalWrite(led, LOW); pinMode(button, INPUT); digitalWrite(button, HIGH); } void loop() { if(BTSerial.available() > 0) { // Checks whether data is comming from the serial port state = BTSerial.read(); // Reads the data from the serial port } // Reading the button buttonstate = digitalRead(button); if (buttonstate == LOW) { BTSerial.write('1'); // Sends '1' to the master to turn on LED } else { BTSerial.write('0'); } if (state == '1') { digitalWrite(led, HIGH); // LED ON state = 0; } else if (state == '0') { digitalWrite(led, LOW); // LED ON state = 0; } }
여기까지 오면 모든 준비는 다 되었습니다.
7. Master 모드로 Slave 연동 - 확인
HC-05 (Master) 와 HC-06 (Slave) 끼리의 연동 통신을 위해 서로 LED 가 깜빡거리다 연결 됩니다.
Arduino 소스 및 회로에서 구성한 대로,
Master 의 스위치를 누르면, Slave 쪽의 LED 가 켜지고, Slave 의 스위치를 누르면, Master 쪽의 LED 가 점등하는 것을 알 수 있습니다.
문제 없이 서로 통신하고 있다는 것을 LED 점등으로 확인 할 수 있습니다.
8. SPP-C 연동
다음 편에서는 SPP-C 확인을 해보도록 하겠습니다.
'Hardware' 카테고리의 다른 글
Hardware | bluetooth 모듈 SPP-C 사용해 보기 (0) | 2020.01.17 |
---|---|
Hardware | ebook 크레마 사운드 액정 수리기 - 5 (24) | 2020.01.10 |
Hardware | Intel NUC5i5RYK 유지보수 (0) | 2020.01.03 |
Hardware | PCB 세척용 IPA 와 토출기 (0) | 2020.01.02 |
Hardware | ebook 크레마 사운드업 액정 수리기 - 4 (0) | 2019.12.31 |