アンドロイドのもの


(注:これらの投稿は前から移動されますmedium.com ブログ
Androidのものは、Androidとモバイル開発生態系をIOTデバイスにもたらします.それは現在開発者のプレビュー4であり、ラズベリーパイ、インテルエジソン/ジュール、およびNXPピコのようなプラットフォームの様々なサポートをしています.あなたはもっと学ぶことができますofficial site , しかし、本質的には、開発者はすぐにGoogleのサービス/検索/マップ/フィット/FirebaseなどのようなGoogleサービスへのアクセスを含むiOTデバイス上で同じAndroidツールとAPIを使用することができます.

ゼロのAndroid開発経験を持って、これは私の関心をキャッチし、私はそれがハードウェアの“Hello World”に取得するために必要なものを参照してくださいに行くだろうと考えた.

ハードウェア


Androidは現在、上記のプラットフォームをサポートしています.当然のことながら、私はインテルEdisonと一緒に行っていました(私はあなたの多くも1つを持っているかもしれません、あなたが1年を持っているかもしれません、あなたが昨年の多くのHackathonsのうちの1つに出席したならば).あなたがもう一つの支持されたプラットホームを持っているならば、あなたは以下のSetup部をスキップして、続くことができましたhttps://developer.android.com/things/hardware/developer-kits.html 代わりに.

ソフトウェアの設定


私たちは始めるために何かをダウンロード/インストールする必要があります.
  • Intel Flash Tool Lite (インテルエジソンのファームウェアを更新するには)
  • Android Things System Image ( Android用のシステムシステムのボード)
  • Android Studio ( IDEと開発ツール)
  • あなたがしなければならない最初のことはAndroidのスタジオをインストールし、最新のSDK/Toolsに更新することです.後でこれらのツールを使用してボードを更新し、アプリケーションを配備する必要があります.インストール後は、コマンドプロンプトで* ADB *と* * *を起動してください.
    したら、Androidのシステムシステムのイメージと一緒にインテルフラッシュツールLiteをダウンロードして準備が整いました.あなたはこのガイドに従うことができますhere ファームウェアのアップデートとAndroidのインストール方法の詳細については.フラッシュカード.ガイドで書かれたshスクリプトは私のために機能しませんでしたので、ここでは、ボードを上げて実行するために取った手順の要約です.
  • インテルFlashツールLiteを実行してファームウェアを更新するには、それが成功した場合は、ボードの起動FastBootモードで約30秒かかる必要があります.これをputtyまたはscreen端末から監視できます.

  • 一旦FastShotsモードに起動すると、ホストコンピュータのコマンドプロンプトで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:/$
    
  • …………今あなたのボード上で実行しているAndroidのものを持っている!
    また、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.8などのIPをpingしてみてください.

    あなたのAndroidのものを作成するアプリ


    これに続いてくださいguide Androidのもののアプリを作成するため.手順は基本的に、通常のAndroidアプリを作成するのと同じですが、私はゼロの事前の経験を持って以来、私はこれに従ってguide 私の最初のAndroidプロジェクトを作成するため.あなたは* Android 7.0(API 24)**をターゲットにする必要がありますし、SDKのツールは、最新のことを確認します.プロジェクトが作成されると、*ビルドを変更する必要があります.Gradle **および* * androidmanifext.Android *アプリケーションとして自分自身を構成するXML **ファイル
    ビルド.グラグラ
    dependencies {
            ...
            provided 'com.google.android.things:androidthings:0.4-devpreview'
        }
    
    アンドロイドマニフェスト.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のもの(HA)についてのクールなことは、開発者は、アプリケーション内のハードウェア周辺機器と対話することができることです.PedieSeralManagerService APIを通して、あなたはデバイスのGPIO、PWM、I 2 C、SPI、I 2 SとUARTと対話することができました.そして、どんな標準的なプロトコルも使っているどんなセンサー/アクチュエータとでも通信することができます.

    周辺APIに加えて、Androidのものも、ユーザー空間ドライバの概念を持っていますこれらのドライバは本質的に抽象化されているので、周辺機器と相互作用するときにハードウェアの実装やボードの設定を心配する必要はありません.あなたは簡単にGPS/温度センサー/オーディオ出力/OLEDスクリーン/HIDドライバーに落ちることができて、センサー・プロトコルとどんな低レベルの周辺IO APIを気にすることなくすぐにそれを使用します.チェックアウト**peripheral driver library ** すでにサポートされているものを参照し、どのように自分自身を追加するには.
    今のところ、基本的な周辺のI/O APIを起動します.次のコードをあなたのホームアクティビティに追加します.Javaはあなたのボード上の利用可能なGPIOのリストを取得する(注:Android Studioでは、Altキーを押して入力し、クイックフィックスの場合は、不足している依存関係をインポートします).
    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ウィンドウを開き、gpiosのリストを参照してください.

    点滅する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のインスタンスを作成しました.PageSeralManagerServiceを使用して、ピンを13に設定しました.* *出力を最初にオフに設定し、* DirectionHellow初期値を低くして、* setValue **メソッドを使用してオン/オフします.
    それだ!アンドロイドものの上でLEDを点滅することにおめでとう!
    あなたがこれらのコードスニペットをタイプしたくないならば、あなたはhttps://developer.android.com/things/sdk/samples.html プロジェクトを実行する準備完了、ダウンロードしてください.それはGithubのすべてであり、そこにも多くの追加のコードサンプルを見つけることができます.
    まだ開発者のプレビューでは、私はAndroidのものを始めると素晴らしい経験を持っていた、それは多くの楽しみだった.ご質問やご意見があれば手を差し伸べてください.