MitAppInventor Bluetooth server/client 비교

이 글은 2017년도 고등학생들이랑 IOT 우편함을 만들며 생긴 의문을 해결해보고 그 지식을 정리하고자 작성한다.

의문은 이것이다.

MitAppInventor로 아두이노의 HC-06블루투스 모듈과 android기반 스마트폰의 블루투스를 통해 arduino와 android스마트폰을 연결해주는 앱을 작성하고자 할 때, MitAppInventor에서 Bluetooth Server와 Client 중 무엇을 사용해야 하며, 왜 그런가? “

Q1개념도

따라서 이 글에서는 Bluetooth Server와 Client를 비교해보고, 위의 상황에 관련된 지식들을 정리하며 질문을 해결해보려고 한다.

1.일반적인 Server와 Client

server와 client 개념을 정리해보면,

Server

서버는 클라이언트에게 네트워크를 통해 정보나 서비스를 제공하는 컴퓨터 또는 프로그램을 말한다. 특히, 서버에서 동작하는 소프트웨어를 서버 소프트웨어라 한다. (from wikipedia)

Client

클라이언트는 네트워크를 통하여 서버라는 다른 컴퓨터 시스템 상의 원격 서비스에 접속할 수 있는 응용 프로그램이나 서비스를 말한다.(from wikipedia)

즉,Client란 정보를 보유하고 있는 Server라는 대상에게 약속된 방식으로 특정 정보를 요청하여 정보를 받은 후, 적절한 방식(보통 시각적 표현)으로 우리에게 표현해주는 대상이라고 이해하면 될 것 같고, Server란 정보를 보유하고 있다가 Client가 약속된 방식으로 특정 정보를 요청하면 자신이 가진 정보 중 특정 정보를 복사해 전달해주는 대상이라고 보면 될 것 같다.
———————————————————————————————
Server와 Client 모델의 예시로는 웹 서버와 클라이언트를 들 수 있다.

‘생활코딩’ 사이트에서 자세히 설명되어 있어 일부분을 가져왔다.

웹 서버와 클라이언트에 대한 이미지 검색결과
웹 서버와 클라이언트 개념도

웹의 경우, ‘웹 브라우저’라는 프로그램이 설치된 컴퓨터를 클라이언트, ‘웹 서버’라는 프로그램이 설치된 컴퓨터를 서버라고 한다. 작동 원리는 다음과 같다.
1)웹 브라우저에 우리가 원하는 웹페이지의 주소를 치면
2)클라이언트가 해당 주소의 웹페이지를 지닌 서버에게 그 웹페이지의 정보를 요청하게 된다.
3)그러면 서버는 그 웹페이지 정보를 다시 클라이언트에게 전달해주고
4)클라이언트는 그 정보를 기반으로 우리가 보는 시각적인 웹사이트를 만들어 보여주는 것이다.
———————————————————————————————-

2.Bluetooth의 Master/Slave

Bluetooth개념

Piconet 개념도

먼저, 블루투스에 대해 간략히 요약하자면

블루투스는 2.4GHz영역에서 무선으로 데이터를 주고받기위한 통신규약이다. 블루투스는 보안 프로토콜이며 단거리, 저전력, 저비용으로 장치들을 무선 연결할 수 있도록 해주며, 유선 통신 방식 중 serial(직렬) 통신 방식을 무선 통신으로 구현하기 위해 개발되었다고 한다.

나는 처음에 블루투스도 Server/ Client 개념을 사용하는 기술로 생각하고 있었다. 하지만,블루투스 네트워크에서는 사실 Server와 Client 모델 대신 Piconet 이라고 불리는 Master/Slave 모델을 사용한다고 한다. 이 모델에서는 하나의 마스터 장치가 최대 7개의 활동 슬레이브 장치로 연결될 수 있으며 언제든지 마스터 장치가 활성 상태로 바꿀 수 있는 최대 255개의 비활성 슬레이브 장치를 가질 수 있다고 한다. 그리고 시간이 지남에 따라 Bluetooth classic에서 Bluetooth Low energy로 기술이 발달하면서 Master/Slave 모델에서 그와 유사한 Central/Peripheral 모델로 호칭만 바뀐 듯 하다.

따라서 이번에는 블루투스를 통한 일대일 통신만 하지만, 필요에 따라 일대다 통신도 가능한 것이다. 구글링 해 본 결과 스마트폰끼리도 일대다 통신이 가능하고, 스마트폰과 여러 아두이노로도 일대다 통신이 가능한 것으로 보인다.

단, 이 모델에서 마스터 장치는 연결된 어떤 슬레이브 장치에든 데이터를 전송할 수 있고, 요청을 보낼 수도 있지만, 슬레이브 장치는 마스터와 데이터를 교환할 수만 있고 슬레이브간 통신은 할 수 없다. 블루투스에 관한 좀 더 자세한 기초정보는 참고사이트에서 확인할 수 있다.

참고
piconet개념 : http://cseric.or.kr/new_Cseric/yungoostep/content.asp?idx=892&startpage_view=886&startpage=900&page=1
블루투스 기초 : http://www.hardcopyworld.com/ngine/aduino/index.php/archives/2101
블루투스 일대다 통신 : http://m.blog.naver.com/roboholic84/220789820175
블루투스 BLE(v4.0이상)통신 : http://blog-kr.zoyi.co/bluetooth-low-energy-ble/

BLUETOOTH CLASSIC 와 BLUETOOTH LOW ENERGY

Bluetooth Classic의 연결 흐름도

 

BLE의 연결 흐름도

Bluetooth의 기초에 대해 공부하며,  추가적으로 Bluetooth Classic과 Bluetooth Low Energy 기술에 대해 간단히 적어놓으려고 한다. Bluetooth Classic기술이 먼저 나온 기술이고 Bluetooth Low Energy 기술이 그 다음으로 개발된 Bluetooth 기술(통신 규약)이다.

상기 이미지와 같이 블루투스 Classic와 BLE는 페어링 방식이 다르다고 한다.

Classic 는 Master가 주변에 요청을 날리고 Slave가 그에 응답한 뒤 페어링 절차를 가지게 된다고 한다.

BLE는 Peripheral(슬레이브/서버역할)이 주변에 일정간격으로 Advertising을 진행하게되고 Central(마스터 역할)이 Scan에 성공함으로서 Peripheral의 정보를 취득하고 페어링을 시도하게 된다고 한다.

나는 이 둘 중 Bluetooth Classic 개념을 이해하는 것이 중요했는데, HC-06모듈은 Bluetooth Classic 기술을 이용한 구식 모듈이기 때문이다.

참고 : https://help.chipsen.com/support/solutions/articles/22000207397-%EB%B8%94%EB%A3%A8%ED%88%AC%EC%8A%A4-classic-%EC%99%80-ble-bluetooth-low-energy-%EA%B2%80%EC%83%89%EB%B0%A9%EC%8B%9D-%EB%B9%84%EA%B5%90%ED%91%9C

HC-06 bluetooth module

HC-06에 대한 이미지 검색결과
HC-06모듈

HC-06은 arduino에 연결할 수 있는 블루투스 모듈이다. 해당 모듈의 블루투스 버전은 2.0이다. 기본적으로 HC-06모듈은 펌웨어 버전 1.7 미만은 마스터 또는 슬레이브로 제작되며 나중에 변경불가하고, 버전1.7이상은 마스터/슬레이브 겸용으로 제작되며, 기본적으론 슬레이브 상태이다. 필요한 경우 마스터로 펌웨어 수정이 가능하다. 나는 버전1.7이상을 기준으로 이야기해보려고 한다.

1)스마트폰이 master이고 HC-06들이 slave. <일대 다 통신 가능>

이 경우 android studio로 스마트폰 앱을 만들 때 bluetoothsocket 객체를 여러개 만들어서 앱을 구성하면 일대 다 통신이 가능하다고 한다.

참고
http://m.blog.naver.com/roboholic84/220789820175

2)HC-06이 master이고 HC-06이 slave.<일대일 통신만 가능>
이 경우는 HC-06 둘끼리 통신하고 싶을 때 사용가능한 방법으로, 한 개 초과의 HC-06모듈들을 master HC-06에서 연결하여 제어하는 것은 불가능한 것으로 보인다.

둘끼리만 통신하게 만드는 방법을 살펴보면, HC-06이 기본적으로 slave이므로 HC-06모듈들 중 하나를 master로 재설정해주어야 한다.과정은 참고사이트를 보고 따라하면 된다. 두 가지 과정이 있는데, 둘 중 하나만 따라하면 된다.

첫번째 과정을 간단히 요약해보면, ATcommand를 통해 마스터로 만들고자 한 모듈에 AT+ROLE=M, 다른 한 모듈에 AT+ROLE=S라고 문자열을 시리얼 통신을 통해 보낸 후 두 모듈의 이름과 암호를 또다시 ATcommand를 통해 같게 설정하면 마스터 쪽에서 슬레이브 쪽을 자동연결하는 방식이다.

두번째 과정을 간단히 요약해보면, 참고사이트에서 시키는대로 기초 세팅을 하고 아두이노에 참고사이트에서 준 소스코드를 업로드하면 된다. 사실 두번째 과정은 첫번째 과정을 걍 소스코드화 시켜서 원큐에 모든 과정을 끝낼 수 있게 편의성을 높인 것이다.
참고
http://blog.naver.com/PostView.nhn?blogId=roboholic84&amp;logNo=220594314436&amp;redirect=Dlog&amp;widgetTypeCall=true

Android Bluetooth(MitAppInventor)

android developer 공식 사이트에서 보았을 때, 안드로이드의 블루투스 통신의 경우 server와 client 개념을 사용하는 것 같다. 안드로이드 앱 개발 프로그램인 android studio에서 서버의 경우는 BluetoothServer라는 클래스를, 클라이언트의 경우는 BluetoothDevice라는 클래스를 사용하는 것으로 보인다.

하지만 나는 내공부족의 문제도 있고, 시간/비용/품질 문제가 있으므로 빠르고 저렴하며 저품질 앱을 만들기 위해 mitappinventor를 이용하여 앱을 제작할 것이기에 mitappinventor 의 용어에 대해 자세히 살펴보려고 한다.

appinventor에 대한 이미지 검색결과
MitAppInventor 의 모습

MitAppInventor에서는 Bluetooth server/client 두 가지 설정이 있다.각각의 설정을 이용하여 앱을 만드는 과정은 참고사이트에 잘 나와있다. 역시 제일 중요한 것은 과연 둘 중 무엇을 이용해야 HC-06과 연결할 수 있는가이다.

실험 결과, HC-06 slave 와 연결하려면 Bluetooth client를 이용해 블록을 구성하고 앱을 제작해야 한다.

Bluetooth Classic

HC-06 모듈은 기본적으로 Slave상태로 세팅되어 있고, Bluetooth Classic기술을 이용했기 때문에 위의 Bluetooth Classic 개념도와 같이 Master역할을 하는 기기가 먼저 접근을 해주어야  연결을 할 수 있는 수동적 구조이고, App Inventor에서는 Bluetooth client가 스마트폰의 블루투스로 하여금 먼저 어떤 대상에 먼저 접근요청을 하는 능동적 구조이기 때문에 둘의 통신이 성립되는 것 같다.

BTServerAcceptConnect
Bluetooth Server(수동적)
BTClientSend
Bluetooth Client(능동적)

내가 Bluetooth Client가 능동적으로 접근할 수 있는 방식이라고 하는 이유는 Client 관련 블록 중 call BluetoothClient.Connect address ‘ ‘ 같은 블록이 있어, 이 블록 사용시 스마트폰이 다른 블루투스 기기에 먼저 접근요청을 하기 때문이다.

참고
appinventor bluetooth basic : http://appinventor.pevest.com/?p=520

부디 이 정리가 다른 사람에게도 도움이 되었으면 좋겠다.