[아두이노] [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기

지난 시간에 RN-42 모듈의 설정을 확인하고 변경하는 방법에 대해서 알아봤었다. MultiSerialMega 예제를 이용했고. 



이번 시간에는 실제로 다른 디바이스와 통신하는 실습을 진행할 예정. 아두이노의 소스는 MultiSerialMega 예제(또는 SoftwareSerialExample 예제)를 그대로 사용하면 된다. 


참고로 아이폰과는 통신할 수 없다. 나쁜 아이폰. (나 아이폰임 ㅜㅜ) 그 외에 블랙베리나 윈도우 폰 등에서는 안해봐서 모르게써요. 안드로이드 폰이랑만 해봤.. 

brown_and_cony-21 

(그나마 안드로이드 폰도 예전 버전(진저브레드 이전)에서는 안된다는 소문이;;;;)



그러타. 이번 시간에는 "안드로이드 폰"을 이용해서 아두이노와 안드로이드 폰 간에 데이터를 주고 받는 실습을 해볼 것이다.



우선 블루투스 통신을 위한 어플리케이션이 필요하다. 'Play 스토어'에서 "Bluetooth"라고 검색하면 수많은 앱이 나오는데, 종류가 너무 많아. "Bluetooth Chat"이라고 검색해보자. 블루투스 통신을 이용해서 채팅할 수 있는 어플들이 검색된다. 꽤 많다. 


이 어플들 중 어느 어플을 사용해도 될 것 같지만, 의외로 안되는 애들이 몇 있음. 왜인지는 아직 잘 모르겠다. UUID 설정 때문인 것 같기도 하고.



그 중에서 사용할 어플은, RN-42 모듈의 제조사에서 제공하는 "RN Bluetooth Chat" 어플이다. 


69fed85037a6ad679607a43fe34ef143.png



제조사에서 제공하는 어플이니 안될리는 없겠지.


실행해보자. 상단에 "not connected"라는 문구가 보일 것이다. 아직 연결이 안됐으니까. 메뉴 버튼을 눌러보자. 화면 하단에 아래와 같은 메뉴가 나타난다.


8ab158de4e217d2ee4c35b10f7ad58c9.png


"Connect a device"를 선택한다. 그러면 현재 등록된 블루투스 기기의 목록이 나온다. 그 중에 RN-42 모듈이 있을 경우 바로 선택하면 되고, 만일 없을 경우 창 아래의 "Scan for devices" 버튼을 누른다. 그럼 현재 내 주변의 블루투스 기기들이 검색된다. 


검색된 기기들 중 내 기기(MAC 주소 또는 기기 이름으로 확인)를 찾아 선택하자. 내 모듈의 MAC 주소와 기기 이름은 커맨드 모드에서 "D" 명령어로 확인할 수 있다. MAC 주소는 모듈의 라벨에 표시되어 있기도 하다.


b4c86ff4a0b562a70961788c4f9114a3.png

 

선택하면 연결이 되는데, 만일 스마트 폰과 RN-42 모듈의 연결이 처음이라면 아래와 같이 핀 코드를 입력하라는 창이 나타날 것이다. RN-42 모듈의 기본 핀 코드는 "1234"이며, 핀 코드는 커맨드 모드에서 "D" 명령으로 확인할 수 있다. 


8ab39d5c5b9797e84db895b7928918b9.png


핀 코드를 입력하면 아래와 같이 상단의 "Not Connected" 표시가 "connected" 표시로 바뀐다.


19009294f68de385fb2c31e629a405cf.png

여기까지 완료되면 스마트 폰과 아두이노가 통신할 수 있는 환경 설정이 끝난 것이다. 이제 데이터만 보내면 됨. 두근두근.



보내보자. 난 유치하지만 "Hello"라는 문장을 보낼꺼임. 데이터를 보내기 전, 아두이노 스케치의 시리얼 모니터가 실행되고 있어야 수신된 문자를 확인할 수 있다. (아두이노에는 MultiSerialMega 예제 또는 SoftwareSerialExample 예제가 업로드 되어 있어야 함)


0177ef588bd4b6f5ce8ecda542a39407.png

a64beadc471a1c27984eea3eabc0d81a.png




시리얼 모니터 창에 "hello"라는 문장이 출력되는 것이 보이는가? 스마트 폰에서 전송한 데이터를 RN-42 모듈이 수신한 후 시리얼 통신을 이용해 아두이노로 전송한 것. MultiSerialMega 예제는 RN-42 모듈로부터 수신된 데이터를 PC와 연결된 시리얼로 다시 전송하는 예제였으니까 시리얼 모니터로 확인할 수 있는 것이다. 



그럼 이번엔 아두이노에서 스마트 폰으로 데이터를 전송해보자. "hello"라는 인사를 받았으니, 답을 해야지. "hi~" 

moon_and_james-21 

97a8306a7eec40a1eb40024149a333d3.png


전송하면 "RN Bluetooth Chat" 어플의 화면에 아래와 같이 수신된 문자가 표시된다.


d575ee0ee3fa886b0522534a5d1d4dff.png

으잉!? 왜 짤렸어??

아마 어플에서 수신된 데이터에 대한 처리를 깔끔하게 안하고 출력하는 듯.

블루투스로 데이터를 주고 받는 어플이나 소스 코드를 만들 경우 위와 같이 데이터가 이어져서 안들어오고 몇 개씩 잘려서 수신되는 문제가 발생하는 경우가 많은데, 이는 어쩔 수 없는 현상이다. 이런 현상을 방지하기 위해 '프로토콜'이라는 것을 만들어 사용한다. 

프로토콜이란 데이터 송수신에 대한 약속 같은 것으로, 시작 문자나 끝 문자를 지정할 수도 있고, 데이터의 개수를 지정할 수도 있고. 아무튼 받는 쪽과 보내는 쪽에서 약속된 형식으로 데이터를 주고 받게 하여 데이터의 손실이나 오류를 방지한다.

프로토콜에 대한 간단한 예는 다다음 강좌에서. LED를 켜고 끄는 실습을 할 예정.



아무튼, 이렇게 스마트 폰과 아두이노가 RN-42 모듈을 통해 블루투스 통신을 할 수 있다,는 것이 이번 강좌의 주제.

다음 강좌에서는 커맨드 명령을 이용하여, 아두이노에서 다른 기기를 검색하고 연결하는 실습을 해보자. 그럼 오늘은 여기서 이만. 안녕!
0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기

임베디드 보드

번호 제목 글쓴이 날짜 조회수
58 아두이노 [강좌] 50. 와이파이 통신 (4) - WebServer 예제 icon 양재동메이커 03-21 12,867
57 아두이노 [강좌] 49. 와이파이 통신 (3) - WebClient 예제 icon 양재동메이커 03-21 16,338
56 아두이노 [강좌] 48. 와이파이 통신 (2) - 커맨드 모드 사용하기 (WiFly 쉴드) icon 양재동메이커 03-20 11,658
55 아두이노 [강좌] 47. 와이파이 통신 (1) - 와이파이란 무엇인가 icon 양재동메이커 03-20 16,087
54 아두이노 [강좌] 46. 블루투스 통신 (5) - 프로토콜 만들기 (2) icon 양재동메이커 03-20 11,879
53 아두이노 [강좌] 45. 블루투스 통신 (4) - 프로토콜 만들기 (1) icon 양재동메이커 03-20 13,510
52 아두이노 [강좌] 44. 블루투스 통신 (3) - RN42 모듈에서 직접 접속하기 icon 양재동메이커 03-20 10,562
51 아두이노 [강좌] 43. 블루투스 통신 (2) - 스마트폰과 통신하기 icon 양재동메이커 03-20 12,726
50 아두이노 [강좌] 42. 블루투스 통신 (1) - RN42 블루투스 모듈 실습하기 icon 양재동메이커 03-20 14,029
49 아두이노 [강좌] 41. 서보 모터 (2) - Servo 함수 알아보기 icon 양재동메이커 03-20 15,779
48 아두이노 [아두이노 강좌] 40. 서보 모터 (1) - 서보 모터 동작 방식 icon 양재동메이커 03-20 16,135
47 아두이노 [강좌] 39. 스텝 모터 (3) - 모터 드라이버 EasyDriver(A3967) 사용하기 icon 양재동메이커 03-20 12,002
46 아두이노 [강좌] 38. 스텝 모터 (2) - Stepper 함수 알아보기 icon 양재동메이커 03-20 15,840
45 아두이노 [강좌] 37. 스텝 모터 (1) - 스텝 모터 동작 방식 icon 양재동메이커 03-20 12,450
44 아두이노 [강좌] 36. DC 모터 (2) - DC 모터 드라이버 실습하기 (TB6612FNG) icon 양재동메이커 03-20 12,052
43 아두이노 [강좌] 35. DC 모터 (1) - DC 모터 동작 방식 icon 양재동메이커 03-20 14,555
42 아두이노 [강좌] 34. SPI 통신 (3) - 기압 센서(MPL115A1) 실습하기 icon 양재동메이커 03-20 11,303
41 아두이노 [강좌] 33. SPI 통신 (2) – SPI 함수 알아보기 icon 양재동메이커 03-20 18,018
40 아두이노 [강좌] 32. SPI 통신 (1) - SPI 통신이란 무엇인가 icon 양재동메이커 03-20 22,922
39 아두이노 [강좌] 31. I2C 통신 (3) - 온도 센서(TMP102) 실습하기 icon 양재동메이커 03-20 18,241