2012년 6월 12일 화요일

ADK DemoKit 실행하기

Android Open Accessory support는 3.1부터 소개되었고, 2.3.4로 백포팅 된 기능으로, 안드로이드 기기와 외부 기기가 USB를 통해 통신이 가능하게 합니다.

이 기능을 사용하기 위한 각종 도구가 ADK이며, 당연하게도 ADK에는 demokit 이라는 샘플 소스코드가 존재합니다.
Arduino Mega ADK와 GalaxyNexus를 이용해서 이를 실행하는 과정을 정리해 보겠습니다.


0. 관련 프로그램 설치

Arduino IDE를 설치합니다.
CapSense 라이브러리ADK software package를 다운로드, 압축을 적당한 곳에 풉니다.
압축을 푼 CapSense 디렉토리와 ADK software package의 arduino_libs/AndroidAccessory, arduino_libs/USB_Host_Shield 디렉토리를 <아두이노 설치 경로>/libraries/ 아래로 복사합니다.

아두이노 설치 경로는 우분투에서 우분투 소프트웨어 센터를 이용해 설치한 경우, /usr/share/arduino/ 가 됩니다. 기본적으로 <아두이노 설치 경로>/libraries/ 디렉토리의 권한에 쓰기 권한이 없으므로, sudo 등을 이용합니다.


1. 아두이노 보드에 DemoKit firmware 설치하기

Arduino IDE를 실행, 아두이노 보드를 연결합니다.
File > Examples > AndroidAccessory > demokit 을 선택합니다.
demokit을 위한 아두이노 프로그램의 소스코드가 열립니다.
바로 업로드 합시다. 곧바로 소스 코드가 컴파일 되고, 보드 위로 바이너리가 써집니다.
(firmware 라느니 바이너리라느니 관습적으로 쓰이는 용어를 쓰고 있는데, 아두이노에서는 아두이노에 사용되는 소프트웨어를 스케치라고 부르는 것 같습니다.)
이제, 우리의 아두이노 보드는 Android USB accessory 가 되었습니다.


1.5. 간소화된 demokit

구글이 제공하는 아두이노용 demokit 소스코드는 LED와 서보모터, 릴레이버튼, 빛/온도 센서 등등 여러 하드웨어를 구성한 보드를 가정 하에 작성되어 있으며, 이에 따라 동일한 하드웨어 구성을 해주지 않으면 demokit은 초기화 과정에서 멈추고 아무 동작도 하지 않습니다.
따라서, 아래의 간소화 되었으며 보드의 LED로 연결되는 13번 핀을 DemoKit 안드로이드 어플리케이션에서 릴레이 1 버튼으로 연결되게 한 다음 코드를 아래 링크에서 제공하고 있습니다.
이걸 사용합시다.
#include <Max3421e.h>
#include <Usb.h>
#include <AndroidAccessory.h>

#define  LED1         13

AndroidAccessory acc("Google, Inc.",            // Manufacturer
                     "DemoKit",                 // Model
                     "DemoKit Arduino Board",   // Description
                     "1.0",                     // Version
                     "http://www.android.com",  // URI
                     "0000000012345678");       // Serial

void setup();
void loop();

void init_led()
{
  pinMode(LED1, OUTPUT);
}

void setup()
{
  Serial.begin(115200);
  Serial.print("\r\nADK Started\r\n");

  init_led();

  // Power On Android Accessory interface and init USB controller
  acc.powerOn();
}

void loop()
{
  byte data[3];
  if (acc.isConnected()) {
    int len = acc.read(data, sizeof(data), 1);
    if (len > 0) {
      if (data[0] == 0x3) {
        if (data[1] == 0x0) {
          digitalWrite(LED1, data[2] ? HIGH : LOW);
          Serial.print("Toggle LED\r\n");
        }
      }
    }
  }

  delay(10);
}


2. 안드로이드 기기에 DemoKit 안드로이드 어플리케이션 설치하기

ADK software package 아래의 app/ 디렉토리 아래에 DemoKit의 안드로이드 어플리케이션 소스코드가 있습니다.
이클립스에서 Create project from existing source 기능을 이용해 이 소스코드로부터 프로젝트를 생성합니다. 이 때, Build target은 Google APIs(platform 2.3.3, API Level 10)으로 합니다.
그러면 빌드에 실패하는데, DemoKit 은 태블릿을 걱정해서는 Holo 테마를 사용하기 때문입니다. AndroidManifest에서 테마를 바꿔주거나, Google APIs(platform 3.2, API Level 13)을 사용하도록 합니다.
전 어차피 갤럭시 넥서스를 사용하므로 후자의 방법을 사용했습니다.
빌드가 잘 된다면 자신의 안드로이드 기기(안드로이드 accessory 모드는 2.3.4 까지 백포팅 되어 있지만, 제조사에서 만들기에 따라 최신 버전일지라도 지원되지 않을 수 있다고 합니다. 전 진리의 레퍼런스, 갤럭시 넥서스를 사용합니다.)에 어플리케이션을 설치 합니다.

3. 합체

아두이노 보드는 컴퓨터와 연결한 채로, USB 포트를 이용해 아두이노 보드와 안드로이드 기기를 연결합니다.

연결된 USB 액세서리(이 경우 아두이노 보드)를 위해 DemoKit 어플리케이션을 실행하겠느냐는 다이얼로그가 뜹니다. OK 해주면 보드의 상태를 읽고, 특정 장치들을 안드로이드 기기에서 동작시킬 수 있습니다.
1.5에서 제공한 소스코드를 사용했다면 릴레이 버튼1을 이용해 보드의 LED를 켜고 끌 수 있습니다.




References:
http://www.iheartrobotics.com/2011/07/arduino-mega-adk-setup-notes.html

아두이노 시작하기.

Ubuntu 12.04 사용하고 있습니다.

먼저, Arduino IDE를 설치합니다.
Ubuntu Software center 를 열고, arduino로 검색하면 arduino IDE가 뜹니다.
걍 설치합니다.


이제, 뭔가 시작해 봅시다.

아두이노 보드를 USB로 연결합니다. 우분투에서는 곧바로 인식되는군요.
USB를 통해 전원이 연결되어, 아두이노 보드의 ON led에 불이 들어옵니다.


이제, 뭔가 동작시켜보죠. LED 깜빡이기로 시작해 보겠습니다.
일단, 방금 설치한 Arduino IDE를 실행합니다.
Tools > Board > 에서 자신이 사용하는 보드를 선택합니다.
제 경우는 Arduino Mega 2560 or Mega ADK를 선택했습니다.

Tools > Serial Port 에서 연결된 보드를 선택합니다.

이제 화면 중앙의 소스코드 편집창에 소스코드를 써넣고 -> 모습의 업로드 버튼을 누르면 소스코드를 컴파일하고 곧바로 아두이노 보드에 컴파일한 바이너리를 업로드, 실행합니다.

소스코드를 처음부터 짜기는 쉬우면서 어려우므로, Arduino IDE는 예제 코드를 제공합니다.
상단의 오픈 버튼(위쪽 화살표)을 누르면 하드디스크의 소스코드나 기본적으로 제공되는 샘플 코드를 불러올 수 있습니다. Basics > Blink 를 선택합시다.

직관적인 내용의 소스코드입니다. 1초 간격으로 LED가 깜빡일 겁니다.

이제 업로드 버튼을 누르면, 해당 소스 코드를 컴파일 하고, 연결한 아두이노 보드에 컴파일된 바이너리를 올려 실행합니다.

바이너리를 아두이노 보드에 올릴 때에는 아두이노 보드의 TX, RX LED가 깜빡이는 걸 볼 수 있습니다.

이제, LED가 1초 간격으로 깜빡일 겁니다.

이 블로그는 뭐하는 곳이냐면요.



GDG Suwon 활동 중 구글 코리아의 후원으로 아두이노 인벤터 킷 + Arduino MEGA ADK 를 대여받았습니다.

이것들을 가지고 맨땅에 헤딩하며 삽질하는 내용들을 포스팅 하는 용도로 사용되는 블로그입니다.