정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

블루투스를 이용하여 아두이노 간의 통신은 어떻게 하나요?
김진하 | 2015-11-20

제가 하고자 하는 프로젝트가 아두이노 간의 무선통신입니다.

 

와이파이 보다는 블루투스가 더 구현하기 쉽다고 하여 블루투스로 하려고 합니다.

 

찾아보니까 HC-06 라는 블루투스 모듈이 있더라고요.

 

이 모듈은 마스터랑 슬레이브 블루투스 모듈이 있어서 쌍방향 통신이 가능하더라고요.

 

제가 구현하고자 하는 것은 한쪽 아두이노 보드에서 RFID 신호를 받으면 블루투스를 통해서 다른 아두이노 보드에 그 신호를 보내주고 어떤 간단한 작업(LED가 켜진다거나 서보모터가 돌아간다거나 등)을 하는 것 입니다.

 

그런데 예제를 찾아보면 거~의 다 아두이노와 안드로이드 스마트폰 간의 통신에 관한 예제 코드만 잔뜩 있고

아두이노와 아두이노 사이의 마스터/슬레이브 블루투스 통신에 대한 예제는 거의 없더라고요...

 

혹시 관련 예제나 방법을 아시는 분이 있다면 도와주실 수 있나요? ㅜㅜ

프로필사진

수박쨈 2015-11-20 17:09:53

블루투스를 이용하여 아두이노 간의 통신에 대해서는 해본적이 없지만 일단 댓글 남겨 드립니다.

블루투스를 사용하기 위해서는 페어링 과정이 필요하기 때문에 간단하지는 않은거 같습니다.

 

페어링을 하기 위해서는 ATcommand 명령어가 필요하기 때문에 일단 아래에 나열해 드리겠습니다.

아래 블루투스 ATcommand명령어는 HC-05, HC-06 공통입니다.(굵은 글씨가 블루투스 통신과정에 쓰이는 AT커맨드 입니다.)

ATcommand 접속 방법은 인터넷에 많이 나와있으니 참고하시면 될 듯 합니다.

 

COMMAND FUNCTION 
1 AT 			Test UART Connection 
2 AT+RESET 		Reset Device 
3 AT+VERSION 		Querry firmware version 
4 AT+ORGL 		Restore settings to Factory Defaults 
5 AT+ADDR 		Query Device Bluetooth Address 
6 AT+NAME 		Query/Set Device Name 
7 AT+RNAME 		Query Remote Bluetooth Device’s Name 
8 AT+ROLE 		Query/Set Device Role 
9 AT+CLASS 		Query/Set Class of Device CoD
10 AT+IAC 		Query/Set Inquire Access Code 
11 AT+INQM 		Query/Set  Inquire Access Mode 
12 AT+PSWD 		Query/Set Pairing Passkey 
13 AT+UART 		Query/Set UART parameter 
14 AT+CMODE 		Query/Set Connection Mode 
15 AT+BIND 		Query/Set Binding Bluetooth Address 
16 AT+POLAR 		Query/Set LED Output Polarity 
17 AT+PIO 		Set/Reset a User I/O pin 
18 AT+MPIO 		Set/Reset multiple User I/O pin
19 AT+MPIO? 		Query User I/O pin 
20 AT+IPSCAN 		Query/Set Scanning Parameters 
21 AT+SNIFF 		Query/Set SNIFF Energy Savings Parameters 
22 AT+SENM 		Query/Set Security & Encryption Modes 
23 AT+RMSAD 		Delete Authenticated Device from List 
24 AT+FSAD 		Find Device from Authenticated Device List 
25 AT+ADCN 		Query Total Number of Device from Authenticated Device List
26 AT+MRAD 		Query Most Recently Used Authenticated Device
27 AT+STATE 		Query Current Status of the Device 
28 AT+INIT 		Initialize SPP Profile 
29 AT+INQ 		Query Nearby Discoverable Devices 
30 AT+INQC 		Cancel Search for Discoverable Devices 
31 AT+PAIR 		Device Pairing 
32 AT+LINK 		Connect to a Remote Device 
33 AT+DISC 		Disconnect from a Remote Device 
34 AT+ENSNIFF 		Enter Energy Saving mode 
35 AT+EXSNIFF 		Exit Energy Saving mode

 

 

아래와 같은 방법으로 통신해 보세요.(설명은 옆에 주석처럼 달아드리겠습니다.)

 

AT    //AT커맨드 모드 접속
OK
AT+CMODE=0   //CMODE 0으로 설정  0일경우 특정 장비와 통신
OK
AT+ROLE=1    //0일경우 default값으로 Slave모드, 1일경우 master모드
OK
AT+INIT      //초기화
OK
AT+INQ      //근처에 있는 블루투스 장비 검색
+INQ:4D65:4D:CA6612,5A0204,7FFF   (검색된 장비의 목록들)
OK
AT+BIND=4D65,4D,CA6612   //특정 장비와 BIND시도
OK
AT+PAIR=4D65,4D,CA6612,30  //특정 장비와 페어링 시도
OK

프로필사진

수박쨈 2015-11-20 17:11:02

아두이노간의 무선통신은 경험상 zigbee가 제일 사용하기 쉬웠습니다.

단순하게 Serial.print(데이터)만 해도 바로 전송되기 때문에 사용하기 쉽습니다.

프로필사진

김진하 2015-11-26 22:33:56

네 감사합니다!

일단 테스트 중에 있는데요

그런데 제가 RFID랑 연동해서 사용하려고 합니다

RFID도 마찬가지로 rx, tx핀을 사용하는 SoftwareSerial 통신이더라고요

 

두 개 이상의 Serial 통신을 사용하는 경우에 

예를 들어

SoftwareSerial bluetooth(2,3);

SoftwareSerial rSerial(7,8);

 

일 때

각 시리얼 포트를 사용하기 전에

bluetooth.listen();

와 같이 listen() 함수를 호출해야 된다고 하더라고요

 

 

근데 문제는 rfid 하나만 사용할 때는 잘 되던 것이

그 뒤에 bluetooth.listen()를 호출하여 블루투스를 사용하면

rfid가 정상적인 작동을 안하더라고요...

 

이전글   |    스마트 화재경보기 2015-11-20
다음글   |    심장박동센서에 대해 다시 질문드립니다. 2015-11-20