[라즈베리파이 강좌] 안드로이드 씽스(Android Things) 시작하기 - 1.3 직접 연결하여 초기화하기

알도 2017-11-15 (수) 17:48 7년전 4590  


 

라즈베리파이 강좌

  안드로이드 씽스(Android Things) 시작하기 - 1.3 직접 연결하여 초기화하기






  안녕하세요. 메카솔루션 알도입니다.

  오늘은 안드로이드 씽스(Android Things)에 대해서 알아보도록 하겠습니다.


  안드로이드 씽스는 안드로이드 운영체제를 기반으로 한 사물 인터넷 플렛폼입니다. 안드로이드 운영체제나 리눅스 기반의 라즈비안과 다른 점이라면 안드로이드 씽스는 컴퓨터가 아닌 장치 자체를 개발하는 것이 목적이기 때문에, 마치 아두이노처럼 하나의 앱(프로그램)만 실행한다는 점입니다. 컴퓨터로 치면, 여러분들이 컴퓨터 전원을 넣었는데 작업표시줄도 바탕화면도 없이 오직 크롬 브라우져만 실행되고 있는 것입니다. 실행할 앱 하나에만 모든 자원을 집중하기 때문 라즈베리파이의 자원을 최대한 활용할 수 있다는 것입니다.


  안드로이드 씽스는 라즈베리파이만을 위한 것이 아니라 인텔의 에디슨이나 줄, NXP사의 i.MX 시리즈 같은 파트너 사들의 싱글보드 컴퓨터들도 지원하고 있습니다. 지금은 개발 중이지만, 나중에 완성되면, 더 많은 싱글 보드 컴퓨터들을 지원할 것 같습니다. 안드로이드 씽스의 궁극적인 목적은 안드로이드 앱을 개발하듯이 장치를 개발할 수 있게 해주는 것입니다. 안드로이드 씽스 홈페이지에도 보면 처음 부분에 나오는 말이 "당신이 앱을 개발할 수 있다면, 장치도 개발할 수 있습니다.(If you can build an app, you can build a device)"입니다.



   이러한 부분에서 보면 라즈베리파이로 분류하기보다는 안드로이드 앱 개발로 분류되는 것이 더 맞습니다만, 아무리 구글에서 한다고는 해도 아직 개발 중(현재 DP5:Developer Preview 5)이고, 과거 구글이 시도했던 사물 인터넷 플랫폼 '브릴로'처럼 언제 엎어질(?)지 모르기 때문에 당장은 소개만 하는 느낌으로 라즈베리파이 쪽에 넣었씁니다. 또한 라즈베리파이를 리눅스 컴퓨터로 활용하기보다는 아두이노보다 강력한 사물 인터넷 장치로 이용하고자 하시는 분들에게는 더 이상 리눅스 터미널에서 허우적대지 않아도 되는 희소식이 될 것 같습니다.


 


 

     직접 연결하여 초기화하기


  지난 번에는 안드로이드 씽스 시스템 이미지를 굽고 이 이미지로 라즈베리파이를 부팅하기까지 해봤습니다. 이번 시간에는 시리얼 통신을 이용하여 안드로이드 씽스를 WiFi에 연결하여 후에 안드로이드 스튜디오에서 프로젝트를 업로드 할 준비를 하는데까지 하도록 하겠습니다.



mDNS 준비

  mDNS란 Multicast Domain Name Service의 약자로 DNS(Domain Name Service)와 비슷한 개념입니다. DNS란 우리가 인터넷을 사용할 때 이용하고자 하는 사이트의 IP주소를 사용하는 것은 불편한 점이 많기 때문에 naver.com 같은 도메인 네임이라는 것을 만들어 IP주소에 연결해주는 서비스를 말합니다. mDNS란 로컬 네트워크 즉 집이나 사무실, 혹은 건물에 하나 혹은 다수의 공유기로 구성된 네트워크에서 IP가 아닌 컴퓨터의 이름으로 통신을 할 수 있게 해주는 서비스입니다. DNS는 서비스를 제공하는 서버에서 도메인 네임과 IP를 연결해주는 반면, mDNS는 각 컴퓨터가 자신의 이름과 IP를 네트워크 안에 연결된 모든 컴퓨터에 전송, 즉 다중전송(multicast)을 하기 때문에 mDNS란 이름이 붙었습니다.  원래 네트워크 프린터 같은 네트워크 장비의 사용을 편하게 하기 위해 만든 기능인데, 라즈베리파이 같은 싱글보드 컴퓨터에서 사용해도 편리하다는 점 때문에 점차 알려지기 시작했습니다.

  필자의 경우도 모니터 없이 라즈베리파이를 사용하는 방법에 대해 조사를 하다가, "모니터가 없는 라즈베리파이의 IP주소를 어떻게 알아내느냐?"하는 난관에 부딛혀서, "브로드캐스트 주소를 사용하면 되지 않을까?"라는 생각을 했습니다. 브로드캐스트 주소란 아이피 주소에서 255에 해당하는 주소로, xxx.xxx.xxx.255이면 xxx.xxx.xxx.2 ~ xxx.xxx.xxx.254 사이에 있는 모든 컴퓨터에게 브로드캐스트 즉 방송을 할 수 있는 주소입니다. 아무튼 네트워크 초보자인 필자는 "과연 어떻게 브로드캐스트 주소로 메세지를 주고 받을까?" 고심하던 중, 안드로이드씽(Android Things)을 만지면서 안드로이드씽이 mDNS를 사용하기 때문에 이 mDNS에 대해서 알게 되었습니다

  이 기술을 초기에 애플과 마이크로소프트 모두 개발하기 시작했는데, 어떤 이유에서인지 마이크로소프트는 실패하고 애플만 성공하게 되었습니다. 그래서 애플과 라즈비안을 포함한 리눅스 운영체제들은 이 기능을 기본으로 탑재하고 있습니다. 즉 라즈베리파이는 이미 자신의 이름을 연결된 네트워크에 브로드캐스트하고 있기 때문에 윈도우에서 이걸 받기만 하면 됩니다.


  mDNS를 받기 위해서는 간단하게 애플의 프린터 드라이버를 설치하면 됩니다. 구글에서 bonjour printer를 검색하거나 여기에 가서 받거나 아래 링크를 클릭해서 바로 다운받아서 설치하시면 됩니다.


    BonjourPSSetup.exe

  

  Bonjour(봉주르)란 애플이 만든 mDNS 소프트웨어의 등록된 상품명입니다.



DHCP server for windows 다운 및 실행하기

  라즈베리파이를 직접 컴퓨터의 이더넷 포트에 연결하는 방법입니다. 이 방법을 위해서는 DHCP(Dynamic Host Configureation Protocal, 동적 호스트 구성 프로토콜) 서버 유틸리티가 필요합니다. DHCP란 필요에 따라 동적으로 IP를 부여하는 프로토콜로써, 일반적으로 공유기가 DHCP 서버 역할을 하여, 자신에게 접속하는 장치(클라이언트)들에게 IP주소를 부여해줍니다. 라즈베리파이부터 컴퓨터나 노트북, 핸드폰, 네트워크 프린터 같은 장치들이 클라이언트에 속하게 되는데요. 이 장치들은 항상 클라이언트 역할을 하도록 설정되어 있기 때문에 클라이언트끼리만 연결을 하면 서로 통신을 할 수가 없습니다. 컴퓨터와 라즈베리파이를 이더넷 케이블로 연결을 해도 그렇습니다. 서로 통신을 하려면 둘 중 하나를 클라이언트로 바꿔줘야 하는데요. 이와 비슷한 것이 스마트 폰에서 핫스팟을 터뜨려 주는 것입니다. 핫스팟이란 클라이언트인 스마트 폰을 DHCP 서버로 바꿔줘서 공유기와 같은 역할을 할 수 있게 해주는 기능입니다. 네트워크가 아닌 인터넷 기준에서 이것을 AP(Access Point)라고 하고, 스마트 폰에서 핫스팟을 터뜨려 주는 것을 AP 모드로 전환한다라고 합니다. 원래는 WAP(Wireless Access Point)가 정확한 말인데, 유선에서 굳이 클라이언트를 서버로 바꿔주는 일이 일상에서는 흔하지 않아서 Wireless를 빼고 AP모드라고 합니다. 이는 스마트 폰 뿐 아니라 노트북이든 데스크톱이든 WiFi 기능이 있는 모든 장치에서 사용할 수 있습니다. 가령 여러분들의 컴퓨터에 이더넷 포트와 와이파이가 동시에 있다면, 공유기 대신 인터넷 케이블을 이더넷 포트에 연결하고 와이파이를 AP모드로 바꿔서 공유기 역할을 하게 할 수도 있습니다. 물론 와이파이 안테나가 공유기보다 안좋으니 성능은 더 낮을 수 밖에 없습니다.

  이제 본격적으로 여러분들의 컴퓨터를 DHCP 서버로(이더넷 카드를 AP모드로) 만들어 보겠습니다. 여기에 가서 DHCP server for windows을 다운 받거나 64-bit 윈도우 사용자 분들은 아래 링크를 클릭하여 프로그램을 다운 받습니다.


    dhcpsrv2.5.2.zip


  설치 없이 압축을 풀면 바로 실행할 수 있는 프로그램입니다. 압축을 푼 다음 아래와 같이 dhcpsrv.exe를 실행시킵니다. dhcpwiz는 고급 옵션을 선택할 때 사용됩니다.



  별 다른 설정 없이 프로그램만 실행하면 이더넷 카드가 AP모드로 변환됩니다. 혹시 문제가 있다면 프로그램 우측 하단에 Admin...을 클릭하거나 최초 실행시 우클릭하여서 관리자 모드로 실행하면 됩니다.


 



이더넷 포트로 컴퓨터와 라즈베리파이 연결하기

  아래 사진과 같이 이더넷 포트로 컴퓨터와 라즈베리파이를 연결해 줍니다.



  사진에는 없지만 전원을 연결해주는 것도 잊지 마세요.

 



 

WiFi 연결 설정하기

  지금 이 상태에서 사용해도 되지만, WiFi를 연결하면 선이 하나 줄어드는 셈이니 WiFi에 연결해보겠습니다. 시리얼 통신을 했던 경우와 달리, 윈도우의 프롬프트나 파워쉘에서 안드로이드 씽스에 접속하려면 SDK Platform-Tools 안에 있는 ADB(Android Debug Bridge)라는 것이 필요합니다. 사실 안드로이드 스튜디오를 설치했으면 함께 설치되는데, 찾아가서 사용하기가 불편한 부분이 있으므로 그냥 새로 하나 받아서 하겠습니다. 여기에 가서 다운받거나 윈도우 사용자 분들은 다음의 링크를 클릭하시면 다운로드가 시작됩니다.


    platform-tools-latest-windows.zip


  이번에만 쓰고 지울 것이니 어디든 여러분들이 프롬프트나 파워쉘에서 쉽게 찾아갈 수 있는 곳에 푸시면 됩니다. 전 D 드라이브에 풀도록 하겠습니다. 아래와 같이 압축을 푼 폴더에 간 다음 .\adb connect Android.local 명령으로 안드로이드 씽스에 연결합니다. .\ 는 리눅스에서 sudo와 같은 개념입니다.



  안드로이드 씽스에 연결되면 .\adb shell 명령으로 안드로이드 씽스의 쉘로 들어갑니다. 다음 명령을 입력해서 와이파이 설정을 해줍니다.


am startservice \

  -n com.google.wifisetup/.WifiSetupService \

  -a WifiSetupService.Connect \

  -e ssid <공유기 이름> \

  -e passphrase <공유기 비밀번호>


  설정 후에 logcat -d | grep Wifi 명령으로 와이파이에 접속합니다.




굉장히 많은 내용이 터미널에 뜨는데 중간에(위 캡처에서는 맨 윗부분 같이) 다음 내용이 뜨면 접속이 된 것입니다.


WifiConfigureator : Successfully connected to 공유기 이름


  안드로이드 씽스에 모니터가 연결되어 있다면 다음과 같은 화면을 볼 수 있습니다. 


 





메카리워즈 Image Map


모바일 버전으로 보기