안드로이드의 물건. - 반짝거려.

(주의: 이 게시물들은 제 이전medium.com의 블로그에서 옮겨온 것입니다)
Android Things는 사물인터넷 기기에 Android와 모바일 개발 생태계를 가져왔다.현재 개발자 미리보기 4에서는 Raspberry Pi, Intel Edison/Joule, NXP pico 등 다양한 플랫폼을 지원합니다.official site에서 더 많은 것을 알 수 있지만 본질적으로 개발자들은 현재 사물인터넷 기기에서 같은 안드로이드 도구와 API를 사용할 수 있다. 구글 드라이브/검색/지도/Fit/Firebase 등 구글 서비스에 접근하는 것을 포함한다.

안드로이드 개발 경험이 없기 때문에 제 흥미를 끌었습니다. 하드웨어의'좋은 세상'에 들어가려면 무엇이 필요합니까? 반짝이는 LED가 필요합니다.

하드웨어


Android Things는 현재 이러한 플랫폼을 지원합니다.물론, 나는 내가 계속 사용하고 있는 Intel Edison을 선택했다. (지난 1년 동안 많은 해커 경쟁에 참가한 적이 있다면, 너희들 중 많은 사람들도 하나가 있을 것이다.) 만약 네가 다른 지원되는 플랫폼이 있다면, 너는 아래의 설정 부분을 건너뛰고 따르는 것으로 바꿀 수 있다https://developer.android.com/things/hardware/developer-kits.html.

소프트웨어 설정


시작하려면 다운로드/설치가 필요합니다.
  • Intel Flash Tool Lite(Intel Edison의 펌웨어 업데이트용)
  • Android Things System Image(Android Things System Image for your board)
  • Android Studio(우리의 IDE 및 개발 도구)
  • 가장 먼저 해야 할 일은 Android Studio를 설치하고 최신 SDK/tools로 업데이트하는 것입니다.잠시 후, 이 도구를 사용해서 마더보드를 업데이트하고 응용 프로그램을 배치해야 합니다.설치 후 명령 프롬프트에 *adb** 및 **fastboot**가 있는지 확인합니다.
    준비가 완료되면 Intel Flash Tool Lite 및 Android Things 시스템 미러를 다운로드합니다.이 안내서here에 따라 펌웨어를 업데이트하고 안드로이드를 설치하는 방법에 대한 상세한 정보를 알 수 있습니다.플래시안내서에 언급된 sh 스크립트는 나에게 작용하지 않는다. 다음은 내가 이 판을 시작하고 실행하기 위한 절차의 요약이다.
  • Intel Flash Tool Lite 펌웨어 업데이트를 실행하는 데 약 30초가 소요되며, 성공하면 마더보드가 빠른 부트 모드로 안내됩니다.퍼티나 스크린 단말기에서 이 점을 감시할 수 있습니다.

  • FASTBOOT 모드로 부트한 후 호스트의 명령 프롬프트에서 FASTBOOT 도구를 실행하여 이미지를 설치합니다.
    $ fastboot \
        flash gpt        partition-table.img \
        flash u-boot     u-boot-edison.bin \
        flash boot_a     boot.img \
        flash boot_b     boot.img \
        flash system_a   system.img \
        flash system_b   system.img \
        flash gapps_a    gapps.img \
        flash gapps_b    gapps.img \
        flash oem_a      oem.img \
        flash oem_b      oem.img \
        set_active a \
        reboot
    

  • 디바이스를 재부팅하고 adb 케이스를 기다립니다.
    $ adb wait-**for**-device
    $ adb shell
    edison:/$
    
  • ...너 망했어!당신은 지금 당신의 이사회에서 안드로이드를 실행하고 있습니다!
    Wi-Fi에 보드를 연결할 수도 있습니다(LED를 깜박일 필요는 없지만 향후 프로젝트에 연결할 수도 있습니다).
    edison: am startservice \
         -n com.google.wifisetup/.WifiSetupService \
         -a WifiSetupService.Connect \
         -e ssid <SSID-name> \
         -e passphrase <SSID-password>
    
    몇 초 동안 기다린 다음 8.8.8과 같은 IP를 ping하여 정상적으로 작동하는지 확인하십시오.

    Android Things 응용 프로그램 만들기


    guide 에 따라 Android Things 응용 프로그램을 만듭니다.이러한 절차는 기본적으로 일반적인 안드로이드 응용 프로그램을 만드는 것과 같지만, 나는 이전에 아무런 경험이 없기 때문에 이 절차guide에 따라 나의 첫 번째 안드로이드 프로젝트를 만들었다.* * * Android 7.0 (API 24) * 을 조준하고 SDK 도구가 최신 버전인지 확인해야 합니다.프로젝트를 작성한 후 ** 버전을 수정해야 합니다.gradle** 및 *AndroidManifext.Android Things 응용 프로그램으로 자체 구성된 xml** 파일:
    건축하다글라델
    dependencies {
            ...
            provided 'com.google.android.things:androidthings:0.4-devpreview'
        }
    
    AndroidManifest.xml
    <application
            android:label="@string/app_name">
            <uses-library android:name="com.google.android.things"/>
            <activity android:name=".HomeActivity">
                <!-- Launch activity as default from Android Studio -->
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.LAUNCHER"/>
                </intent-filter>
    
                <!-- Launch activity automatically on boot -->
                <intent-filter>
                    <action android:name="android.intent.action.MAIN"/>
                    <category android:name="android.intent.category.IOT_LAUNCHER"/>
                    <category android:name="android.intent.category.DEFAULT"/>
                </intent-filter>
            </activity>
        </application>
    
    당신의 프로젝트를 세우고 실행하면 성공할 것입니다. 하지만 이 점에서 많이 하지는 않을 것입니다.

    주변 장치와 상호 작용


    Android Things(ha)의 가장 멋진 점은 개발자가 현재 응용 프로그램에서 하드웨어 주변 장치와 상호작용을 할 수 있다는 것이다.주변 장치 관리 서비스 API를 통해 장치의 GPIO, PWM, I2C, SPI, I2S 및 UART와 상호 작용하여 이러한 표준 프로토콜을 사용하여 모든 센서/집행기와 통신할 수 있습니다.

    외곽 API를 제외하고 Android Things는 사용자 공간 구동의 개념을 가지고 있다.이러한 드라이버는 본질적으로 추상적이기 때문에 주변 장치와 상호작용할 때 하드웨어 구현과 보드 설정을 걱정할 필요가 없습니다.GPS/온도 센서/오디오 출력/OLED 스크린/HID 드라이버를 손쉽게 삽입하여 센서 프로토콜과 저급 주변 IO API 걱정 없이 즉시 사용할 수 있습니다.보기 **peripheral driver library**지원되는 컨텐츠와 자신의 컨텐츠를 추가하는 방법을 봅니다.
    이제 기본 주변 입력/출력 API를 시작합니다.HomeActivity에 다음 코드를 추가합니다.java는 마더보드에서 사용할 수 있는 GPIO 목록을 가져옵니다(참고: Android Studio에서 Alt + Enter 키를 눌러 빠르게 복구하면 부족한 의존 항목을 가져옵니다).
    public class HomeActivity extends Activity {
            private static final String TAG = "HomeActivity";
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
    
                PeripheralManagerService service = new PeripheralManagerService();
                Log.d(TAG, "Available GPIO: " + service.getGpioList());
            }
        }
    
    구축 및 실행, logcat 창을 열면 GPIO 목록이 표시됩니다.

    LED 깜박임


    마지막따라서 보드를 설치하고 모든 소프트웨어 위치를 설치한 후 마지막 단계는 LED를 깜박이는 코드를 실행하는 것이다.다음 그림과 같이 보드를 설정하거나 간단하게 차량 적재 LED를 사용할 수 있습니다.차량용 LED 및 외부 LED가 GPIO 트랙 13에 연결됩니다.

    가족 활동을 편집합니다.java, 코드는 다음과 같습니다.
        public class HomeActivity extends Activity {
            private static final String TAG = "HomeActivity";
            private static final int INTERVAL_BETWEEN_BLINKS_MS = 1000;
            private static final **String ***LED_PIN_NAME = "IO13";
    
            private Handler mHandler = new Handler();
    
            private Gpio mLedGpio;
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
    
                PeripheralManagerService service = new PeripheralManagerService();
                Log.d(TAG, "Available GPIO: " + service.getGpioList());
    
                try{
                    mLedGpio = service.openGpio(LED_PIN_NAME);
                    mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
                    mHandler.post(mBlinkRunnable);
    
                }catch(IOException e){
                    Log.e(TAG, "Error on peripheral", e);
                }
    
            }
    
            @Override
            protected void onDestroy() {
                super.onDestroy();
    
                // Step 4. Remove handler events on close.
                mHandler.removeCallbacks(mBlinkRunnable);
    
                // Step 5. Close the resource.
                if (mLedGpio != null) {
                    try {
                        mLedGpio.close();
                    } catch (IOException e) {
                        Log.e(TAG, "Error on PeripheralIO API", e);
                    }
                }
            }
    
            private Runnable mBlinkRunnable = new Runnable() {
                @Override
                public void run() {
                    // Exit if the GPIO is already closed
                    if (mLedGpio == null) {
                        return;
                    }
    
                    try {
                        // Step 3. Toggle the LED state
                        mLedGpio.setValue(!mLedGpio.getValue());
    
                        // Step 4. Schedule another event after delay.
                        mHandler.postDelayed(mBlinkRunnable, INTERVAL_BETWEEN_BLINKS_MS);
                    } catch (IOException e) {
                        Log.e(TAG, "Error on PeripheralIO API", e);
                    }
                }
            };
        }
    
    이렇게 되었습니다. 우리는 Gpio 실례를 만들었습니다. 주변 장치 관리자 서비스를 사용하여 이를 인덱스 13으로 설정하고 **를 출력으로 설정하며 *DIRECTION\u OUT\u initially\u LOW로 초기에 닫고 **setValue** 방법으로 열기/닫습니다.
    그렇습니다!안드로이드에 LED를 깜빡이는 것을 축하합니다!
    이 코드 세그먼트를 입력하지 않으려면 https://developer.android.com/things/sdk/samples.html 로 이동하여 전체 실행 준비 항목을 다운로드할 수 있습니다.이 모든 것은 GitHub에 있습니다. 거기에서 추가 코드 예시를 많이 찾을 수 있습니다.
    아직 개발자 미리보기판에 있지만 안드로이드에 대한 입문 체험이 좋고 재미있습니다.질문이나 피드백이 있으면 언제든지 연락하십시오.)

    좋은 웹페이지 즐겨찾기