|
void setup(){ // 시리얼 모니터 (SerialUSB)에서 입력하면 블루투스(Serial2)로 전송하고, 그 반대로도 입력받아 전송한다. void loop(){ if(Serial2.available()){ |
* HC-06 Baud rate 자동 검색
HC-06 전송 속도를 자동으로 찾고 싶으면 다음과 같이 Setup()함수를 수정하여 찾을 수 있다. 여기서 Serial2 객체를 사용해야 한다. 다른 아두이노에서는 적절히 바꾸어 사용가능하다.
long baud[10]={ 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 115200 }; void setup() { delay(2000); for(int i=0;i<10;i++) { Serial2.begin( baud[i] );
} |
* 앱에서 통신 테스트 하기
android bluetooth controller 앱을 다운 받아 테스트해보자. 명령어를 설정하면 컨트롤러 모양으로도 제어가 가능하다.
* 기본 명령어
- 시리얼모니터에서 AT 명령을 입력해 보면 OK 가 뜬다. 안뜨면 연결이 제대로 안되었으니 다시 확인해 봐야 한다.
- 이름 변경: AT+NAMEMYBT
- 암호 변경: AT+PIN2018
- 버전 확인: AT+VERSION
- 마스터로 지정: AT+ROLE=M (master)
- 슬레이브로 지정: AT+ROLE=S (slave)
- 전송속도 지정: AT+BAUD1 (1: 1200, 2: 2400, 3: 4800, 4: 9600, 5: 19200, 6: 38400, 7: 57600, 8: 115200 )
* 페어링 하기
- 앱에서 연결시에 PIN 번호는 기본적은 1234 를 입력한다. 또는 위에서 바꾼 2018 으로 입력한다.
HM-10 인경우는 PIN 번호가 000000 또는 123456 이다.
* 전송하기
- HC-06은 연결되기 전에는 빨간 LED가 천천히 깜빡이다가, 연결되면 계속 켜져있다.
- 연결하고 나면 왼쪽 그림의 시리얼모니터에서처럼 Connected 메세지가 뜨면서 오른쪽 그림에서 Hello를 쳐서 전송하면 글자가 전송되어 보인다.
- 주의할것은 송수신 문자열에는 carriage return(\r)과 line feed(\n)과 을 추가해서 전송한다. 또는 no line ending 인 경우도 있다.
시리얼모니터 화면 블루투스 앱 화면
* PC에서 연결하기
참고: http://emanual.robotis.com/docs/kr/parts/communication/bt-410/#bt-410-설정하기
PC에서 연결하기 위해서는 블루투스 동글이 필요하다. 그리고 HC-05와 HC-06 설정방법이 다른데 여기서는 HC-06모델을 기준으로 작성한다.
양방향 Bluetooth Nexi 동글이를 설치한다. (CSR 4.0 지원)
다음 그림과 같이 bluetooth에 3가지가 보인다. 이중 LE는 low energy를 뜻하며 방식이 다르니 주의해야 한다. 다른 설치 프로그램은 설치하지 말고, 기본적인 블루투스를 사용한다.
PC의 블루투스 동글을 인식하기 위해서는 다음과 같으 이름 검색을 허용해야 한다.
* Socket를 이용해 블루투스를 연결하기
(1) MS Bluetooth Programming:
(2) Winsock2 이용:
(3) Bluetooth connection sample: https://code.msdn.microsoft.com/windowsdesktop/Bluetooth-Connection-e3263296
이 소스는 Client/Server로 나뉘어 동작시키며, 데이터를 전송/수신하는 샘플 코드이다.
서버로 동작: bthcxn.exe -c0
클라이언트: bthcxn.exe -nJDX-30 (JDX-30은 블루투수 디바이스 명)
Bluetooth connection sample C .zip
* 블루투스 시리얼 터미널 (BTSerialTerm)
동글이를 이용해서 PC와 HC-06을 연결해보자. 이 프로그램으로 위 소스코드 (Vc++ 에서 블루투스 통신 및 핸들링 샘플을 이용해서 작성함)
BTSerialTerm은 서버로 동작하기도 하고, 디바이스를 선택하면 자동으로 서버로 Listening을 하고 있으며, 접속을 기다리고 있다. 클라이언트로 동작하기도 한다. 위 모드는 Client 동작이다. 아직 버그가 있지만, 소스를 공개한다.
1. 시리얼모니터로 먼저 AT를 입력하여 OK가 뜨는지 확인한다.
2. 블루투스 시리얼 터미널(BTSerialTerm) 에서 BT Refresh List 버튼을 눌러 라디오와 디바이스 명을 얻는다.
3. BTSeriaTerm에서 해당 블루투스 디바이스 (JDY-30)을 선택하고
4. PIN 번호 (암호: 1234 또는 0000)를 입력한후,
5. Connect를 누른다. (클라이언트로 동작함)
소스 구조는 다음과 같다.
BluetoothManager.cpp 블루투스 전체 관리 클래스
BluetoothRadioManager.cpp 블루투스 라디오 관리 클래스
BluetoothDeviceManager.cpp 블루투스 디바이스 관리 클래스
BluetoothSockets.cpp 블루투스 시리얼통신 클래스
BTSerialTermDlg.cpp 메인 다이얼로그
BluetoothManager --- BluetoothRadioManager --- BluetoothDeviceManager
+- BluetoothSocketListener +- BluetoothSocket (Socket 포함)
(Server/Client Socket) +- BluetoothSocket (Socket 포함)
위 구조처럼 라디오 관리 클래스에는 ServerSocket과 ClientSocket이 모두 포함되어 관리되고 있고, 디바이스 관리 클래스에서는 하나의 Socket(클라이언트)을 관리하여 통신을 하고 있다.
소스코드: (현재 계속 bug 수정 중... 18.7.7)
* HC-05(Master)로 HC-06(Slave)과 연결해보자.
HC-05 기본 모드
– UART = 9600 (baud rate for communication mode)
– CMODE = 0 (only connect to paired devices)
– PSWD = 1234 (password/PIN for pairing)
- It requires “Both NL & CR”
HC-05 소스코드
|
HC-06 소스코드
|
다음은 모두 HC-05의 AT 모드에서 실행한다.
1. 패스워드 설정
HC-05: AT+PSWD1234
HC-06: AT+PIN1234
2. 동일 Baud rate 설정
3. HC-05 설정
AT+RMAAD clears any previously paired devices.
AT+ROLE=1 puts the HC-05 in Master Mode
AT+RESET reset the HC-05. This is so metimes needed after changing roles.
AT+CMODE=0 allows the HC-05 to connect to any device
AT+INQM=0,5,9 set inquiry to search for up to 5 devices for 9 seconds
AT+INIT initiates the SPP profile. If SPP is already active you will get an error(17) which you can ignore.
AT+INQ searches for other Bluetooth devices.
AT+INQ에서 블루투스 주소가 나오는데 다음 명령어로 이름을 확인한다. (3014,10,171179은 INQ 후에 나온 숫자이다.)
AT+RNAME?3014,10,171179
+RNAME:HC-06
4. 페어링 (Pair)
AT+PAIR=3014,10,171179,9
5. 바인딩 (Bind)
AT+BIND=3014,10,171179
6. 페어링 디바이스와 연결 설정
AT+CMODE=1
7. 링크 (Link)
AT+LINK=3014,10,171179
8. 통신모드 테스트 (AT모드 해제)
다음은 데이터 통신 모드로 바꾸어 사용한다. (HC-05에 핀에 HIGH 또는 LOW 신호 바꾼다.)
그리고 다시 HC-05 소스를 업로드 하여 실행한다.
HC-06를 켠다: 1초에 5번 정도 빠르게 깜빡이면 connection 또는 pairing을 기다리는 중이다.
HC-05를 켠다: 천천히 깜빡이다가, 연결되면 계속 켜진다.